FriendAdvisor is a mobile app with a focus on allowing friends and family to coordinate and receive text notifications about upcoming group events.

Overview

Friend Advisor Logo

Planning events with friends just got easier! With just a few taps, you can create an event, invite friends, and share updates. Plus, you get reminders through notifications on your phone, so you never forget an important event again! Say goodbye to forgetting your significant other's anniversary or your mother's birthday.

We know that life can get busy, so we make it easy for you to stay on top of your plans. Plus, our app is avilable through both your internet browser or as an app on your mobile device. No more excuses!

Whether you're planning a birthday party, a weekend getaway, or just a night out, FriendAdvisor makes it easy for you and your friends to stay connected.

So what are you waiting for?

Try out FriendAdvisor today!

Inspiration

Our team was inspired to create FriendAdvisor because coordinating events with a group of friends can be a huge hassle. You would have to send out group emails or texts to try and get everyone together, and then have to follow-up to make sure everyone got the message. And, if someone couldn't make it, then you would have to change the entire plan! That's why we built FriendAdvisor--a simple, yet elegant solution to coordinating and staying in the know for your upcoming events.

The Hackathon Theme

Additionally, we wanted to directly tackle the Hacklahoma theme, which is "unity/togetherness". This theme inspired us to think about how we can improve the unity in our lives, and we all decided that a big struggle with getting together with others is the process of planning and coordinating get-togethers.

We also entered the Domain.com challenge, as well as the Google Cloud challenge and Twilio challenge. Incorporating all of these systems into our project was difficult, but it definitely helped us learn a lot about using different APIs and making them interact with each other.

What it does

With FriendAdvisor, you can:

  • Easily create and join groups through a QR code or group ID
  • Invite friends and family to your groups
  • Create and manage group events all from one place
  • View event details
  • Receive notifications on your phone about upcoming events
  • And more!

How we built it

We built the frontend using React with TypeScript, and Ionic so that FriendAdvisor works both in the web browser, and as a standalone mobile app. On the backend, we used Node.js and Express for the main server code. Additionally, we used the Twilio API to send periodic text notifications about upcoming events to users.

We also many Google Cloud technologies such as:

  • Firebase to authenticate and login users
  • Monitoring to alert us to any site downtime, site traffic, and resource usage
  • Firestore to act as our database
  • Hosting to deploy our code to our live website.

Challenges we ran into

Since it was our first time using the Twilio API, we had some trouble initially with authenticating our Twilio account, but after we got it setup, it was surprisingly easy to create and send messages.

Since many of us were new to using Firebase, it was a bit tricky to figure out how to create scheduled function through Firebase in order to periodically check if any events for users will be happening soon. It took a lot of trial and error and sifting through documentation, but we eventually got it to work like a charm!

A challenge we ran into on the frontend side of things was fixing the app so that content that hasn't yet been loaded will not be displayed to the user.

And finally, one of the biggest challenges we ran into was with limiting the scope of our project. There are so many ideas that we had, but just didn't have time to implement due to the time constraint of 24 hours.

Accomplishments that we're proud of

We're very proud of the text notification system. Even though it was our first time using the Twilio API, we were able to implement personalized, periodic text notifications to each user in a group across any and all events.

What we learned

Since it was the first time anyone on our team created a mobile app, we decided to use the Ionic framework, which allows us to code a mobile app just like we could with a website. We learned a lot about creating responsive web design so that our app works on any and every device.

We also learned about how to send texts through Twilio and how to schedule a function to periodically run with Firebase functions, all of which we were new to using.

What's next for FriendAdvisor

We have many ideas for ways to extend the functionality of our app, including, but not limited to:

  • Allowing users to customize when and how often they receive text notifications about upcoming events
  • Integrating events with Google Calendar, Outlook, iOS Calendar, etc.
  • Automatically creating an event from an event in an external calendar (e.g. Outlook).
  • Allowing users to display all of their upcoming events through a calendar view.
  • Allowing users to automatically create an SMS group chat with the people in their FriendAdvisor groups
  • Extending our login options, so users may login with through other services like Facebook or email.

Link to Devpost

Comments
  • Clean-Up Scheduler

    Clean-Up Scheduler

    We could add a function to the notification scheduler that will do the following:

    • remove events from groups that don't exist
    • remove groups that have no members
    • remove groups whose joinId was not generated (The function will set the joinId to "" if it cannot create an id within 50 attempts)
    enhancement good first issue wontfix backend groups g-events 
    opened by demonlexe 2
  • Implement rate-limiting to prevent spam

    Implement rate-limiting to prevent spam

    We should have reasonable limits in place for how quickly people can:

    • [ ] join groups (prevent guessing join codes)
    • [ ] create events
    • [ ] edit events
    • [ ] edit groups
    • [ ] delete groups / events
    • [ ] get data for a group

    Pretty much everything should be covered here, but different endpoints should have different limits

    enhancement wontfix backend groups security 
    opened by pmaxhogan 1
  • Authenticate via token instead of user ID parameter

    Authenticate via token instead of user ID parameter

    • [x] Make middleware to authenticate (@realprogrammer5000 )
    • [x] Remove usage of user id parameter in backend and use middleware authentication
    • [x] Make helper function in frontend to handle authenticated requests
    • [x] Remove usage of user id parameter in frontend, replace with token
    • [x] Authenticate user membership on group modification endpoints (@demonlexe )
    enhancement frontend backend security 
    opened by pmaxhogan 1
  • Add method for joining a group

    Add method for joining a group

    On the backend, a method for /groups/join will be added to take two params: userId and joinId, then add the userId to the group's members.

    • [x] frontend
    • [x] backend
    frontend groups 
    opened by demonlexe 1
  • Improve/sanitize phone number input in profile

    Improve/sanitize phone number input in profile

    Improve phone number input

    Currently there is no input validation for when a user inputs a phone number. The Twilio API requires phone numbers to begin with a plus sign, followed by the country code, followed by the rest of the phone number (e.g. "+11234567899", where +1 is the country code, and 123-456-7899 is the user's phone number). One way to improve the user input is to require the user to specify a country code, and then enter their phone number. There may already be a built in phone number input form? We should make sure they are entering all of the digits of the number and without any extra symbols such as parenthesis or dashes.

    bug enhancement frontend profile 
    opened by bradwj 1
  • Add frontend support for group descriptions

    Add frontend support for group descriptions

    Groups should be able to have short descriptions about themselves. I already added backend support for this, so now it just needs to be supported on the frontend.

    • [x] frontend
    • [x] backend
    enhancement frontend groups 
    opened by bradwj 0
  • Fix empty event description displaying

    Fix empty event description displaying "undefined"

    Event descriptions should be optional, but when no description is inputted, it stores "undefined" as the description instead.

    The optional event description also needs to be handled in the backend when sending the messages through Twilio. Currently when no description is present, the message contains "Description: undefined" but instead, no description label should be sent.

    • [x] frontend
    • [x] backend
    bug frontend backend g-events 
    opened by bradwj 0
  • Improve readability of user phone numbers on profile

    Improve readability of user phone numbers on profile

    Phone numbers are currently displayed on user profiles in the exact manner that the user inputted their phone number. I'm thinking that we should display their phone number in a more readable format, for example +1 (123) 456-7899

    Additionally, users should be able to make their phone numbers private, so that it is not publicly displayed on their profile.

    enhancement frontend profile 
    opened by bradwj 0
  • Verify user-inputted phone numbers

    Verify user-inputted phone numbers

    After a user has inputted a valid phone number (see issue https://github.com/bradwj/friend-advisor/issues/18), we need to send a verification code to the entered phone number, and request the user to input the verification code in the app. This way we can confirm that user's are using their own phone numbers and aren't inputting someone else's to spam them with notifications.

    enhancement wontfix frontend backend profile 
    opened by bradwj 0
  • Add search bar to event location picker

    Add search bar to event location picker

    The user should be able to type in a city or address when choosing an event location. Also, the user should be able to add a custom location, which doesn't specify a location on the map, and instead just displays the user input next to the location. For example, say a friend group wants to meet up at Dining Hall West. They should have the option to specify a location on the map, or instead just use "Dining Hall West" as the data point for the location of the event.

    enhancement wontfix frontend g-events 
    opened by bradwj 0
  • Bug: Notifications

    Bug: Notifications

    I was sent a notification saying "You have ____ today!" on 2/17, 7pm, when the event is on 2/18, 7pm.

    The code needs to be updated to make sure the DAY is the same for this notification to be sent. Right now the code just checks if it is within 24 hours.

    bug good first issue backend 
    opened by demonlexe 0
  • Bug: Unable to create new group, profile not loading

    Bug: Unable to create new group, profile not loading

    image

    Page did not redirect after clicking create, document was added to database but member was added as undefined. Attempt was on mobile device.

    Also on mobile device, profile would not load.

    bug groups profile 
    opened by demonlexe 0
  • Add personal user events

    Add personal user events

    It would be cool feature if users could create events that only they themselves get notified for, without having to be in any specific group or create a group beforehand.

    enhancement frontend backend 
    opened by bradwj 0
  • Add cleanup to empty groups and events

    Add cleanup to empty groups and events

    When a request is sent to the backend for a user to be removed from a group, we can check if there are no users in the group after the user is removed, and then call the function to delete the group itself.

    In the function to delete a group, we can call a function that removes any events from that group as well.

    backend groups maintenance 
    opened by bradwj 0
  • Incorporate caching

    Incorporate caching

    With more and more users, we should optimize our firebase use to save money. Caching is a great way to avoid redundant functions calls and firestore reads.

    One of the ways to do this is to query firestore for most recently updated documents before the previous cache, using lastUpdated property in docs.

    • [ ] Leave group - delete events in local cache

    Local storage methods: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API https://developer.mozilla.org/en-US/docs/Web/API/Cache

    enhancement frontend backend 
    opened by heartgg 0
Owner
Brad Johnson
Computer Science Student at UT Dallas
Brad Johnson
NatsirtMC is a lightweight app allowing you to connect to any Minecraft server without having Minecraft open

NatsirtMC the only way to grind without grinding NatsirtMC is a lightweight app allowing you to connect to any Minecraft server without having Minecra

tristan 3 Dec 26, 2022
BetterDiscord plugin to see what your friends are playing across platforms, all on Discord

CrossPlatformPlaying A plugin that brings Rich Presence to games that don't support it, and lets you see what your friends are playing even if they tu

Giorgio 38 Dec 12, 2022
Windowatch - a singleton class managing scroll-, resize- and breakpoint-change events globally

Windowatch is a singleton class managing scroll-, resize- and breakpoint-change events globally. It uses passive resize & scroll event listeners and requestAnimationFrame to optimize dom interactions (get, update). It removes unnecessary window event listeners automatically, if no listeners are attached.

Taikonauten 3 Feb 24, 2022
Defines the communication layer between mobile native(iOS/Android) and webview using JSON Schema and automatically generates SDK code

Defines the communication layer between mobile native(iOS/Android) and webview using JSON Schema and automatically generates SDK code.

당근마켓 31 Dec 8, 2022
A lightweight jQuery plugin for collapsing and expanding long blocks of text with "Read more" and "Close" links.

Readmore.js V3 alpha I am deprecating the 2.x version of Readmore.js. A new version is coming soon! Check it out and help me test it! Readmore.js A sm

Jed Foster 1.5k Nov 30, 2022
Translate text to morse code, but the morse code is emojis

morsemoji Convert text to morse code... with emojis! Check it out! This project was built with React, Vite, Emoji Mart, Nord, and react-copy-to-clipbo

Cassidy Williams 48 Jul 21, 2022
AryaBota: An app to teach Python coding via gradual programming and visual output

AryaBota UI Development Note: Before you begin, make sure you have the back-end Flask app up and running. Visit aryabota-services to learn more about

null 5 Dec 18, 2021
A Pauli Test simulation app made with Web Component and RxJS

There was a discussion quite a while ago in Teknologi Umum about brain throughput or something. Basically it was about how long does your brain can maintain its performance. It was brought up because there was a discussion about typing speed and how someone can get high Words per Minute at the start but starts to slow down the longer they go.

elianiva 5 Jun 8, 2022
Web app for adding EU Digital COVID Certificates to your wallet apps

Web app for adding EU Digital COVID Certificates to your wallet apps

CovidPass 1.2k Dec 31, 2022
This is a Todo app build with JS, HTML/CSS , Webpack

todo-list Todo List app Additional description about the project and its features. Built With HTML5 CSS3 Webpack JavaScript Live Demo Live Demo Link G

houssam hichami 6 May 22, 2022
Math Magician is a single Page App that allows users to perform simple math calculations

Math Magician is a single Page App that allows users to perform simple math calculations

levy_ukwishaka 11 Apr 9, 2022
The perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on existing HTML.

List.js Perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on

Jonny Strömberg 10.9k Jan 1, 2023
Drag and drop library for two-dimensional, resizable and responsive lists

GridList Drag and drop library for a two-dimensional resizable and responsive list of items Demo: http://hootsuite.github.io/grid/ The GridList librar

Hootsuite 3.6k Dec 14, 2022
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings

JavaScript Algorithms and Data Structures This repository contains JavaScript based examples of many popular algorithms and data structures. Each algo

Oleksii Trekhleb 158k Dec 31, 2022
Gmail-like client-side drafts and bit more. Plugin developed to save html forms data to LocalStorage to restore them after browser crashes, tabs closings and other disasters.

Sisyphus Plugin developed to save html forms data to LocalStorage to restore them after browser crashes, tabs closings and other disasters. Descriptio

Alexander Kaupanin 2k Dec 8, 2022
A responsive image polyfill for , srcset, sizes, and more

Picturefill A responsive image polyfill. Authors: See Authors.txt License: MIT Picturefill has three versions: Version 1 mimics the Picture element pa

Scott Jehl 10k Dec 31, 2022
A high-performance, dependency-free library for animated filtering, sorting, insertion, removal and more

MixItUp 3 MixItUp is a high-performance, dependency-free library for animated DOM manipulation, giving you the power to filter, sort, add and remove D

Patrick Kunka 4.5k Dec 24, 2022
JavaScript Survey and Form Library

SurveyJS is a JavaScript Survey and Form Library. SurveyJS is a modern way to add surveys and forms to your website. It has versions for Angular, jQue

SurveyJS 3.5k Jan 1, 2023
Extensive math expression evaluator library for JavaScript and Node.js

?? Homepage Fcaljs is an extensive math expression evaluator library for JavaScript and Node.js. Using fcal, you can perform basic arithmetic, percent

Santhosh Kumar 93 Dec 19, 2022