Git Product home page Git Product logo

bradwj / friend-advisor Goto Github PK

View Code? Open in Web Editor NEW
4.0 4.0 0.0 3.38 MB

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

Home Page: https://friendadvisor.tech

License: MIT License

TypeScript 57.97% HTML 0.93% CSS 7.72% JavaScript 33.38%
firebase firestore ionic nodejs react twilio twilio-api twilio-sms-api

friend-advisor's Introduction

Hey there, I'm Brad! ๐Ÿ‘‹

Interested in all things technology!
Most of my experience is in Full Stack software development, but I am mainly interested in backend development and cybersecurity.

  • ๐Ÿ”ญ Iโ€™m currently working as a Software Engineer Intern at Fidelity Investments
  • ๐ŸŒฑ Iโ€™m currently learning penetration testing and offensive security
  • โšก Fun fact: I have been playing the drums for over 10 years! ๐Ÿฅ

My GitHub Language Stats My GitHub Stats

friend-advisor's People

Contributors

bradwj avatar demonlexe avatar heartgg avatar pmaxhogan avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

friend-advisor's Issues

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

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.

Secure /test

/test is an endpoint that we use to test the notification sending service, it should be secured so that only specific users can run it.

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.

Add profile pictures

Add an ability for a user to upload or take a picture as their avatar.

  • upload photo
  • take photo
  • replace existing stock photos with uploaded photo

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.

  • frontend
  • backend

Add a loading screen when fetching

Sometimes the app does not render out the components because it is fetching data. A waiting screen can inform the user of the fetching.

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.

Fix remove button in events tab

Remove button currently redirects you to the event page.
Intended behavior is that it removes an event from the events page.

Add ability to schedule notifications about upcoming events

Text notifications are by default sent out a month before, week before, day before, and on the day of the event. We should allow users to choose which days or on how many days before that notifications should be sent.
I'm thinking that we'll restructure the documents for events too have their sentNotifications look something like this:

sentNotifications: [
  { 
    hoursBefore: 24, // day of
    usersNotified: [<array of user IDs>]
  },
  {
    hoursBefore: 48, // day before
    usersNotified: [<array of user IDs>]
  },
  {
    hoursBefore: 168, // week before
    usersNotified: [<array of user IDs>]
  },
  {
    hoursBefore: 720, // month before
    usersNotified: [<array of user IDs>]
  },
]

This could be how the default notification schedule will look, but the user should have the option to define their own.

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)

Seperate tab for past events

basically title. if an event has passed, there should be a button to view past events instead of having expired events displayed on the main page.

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.

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.

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

Css files?

There are currently many css files that are empty. Should there be a single css file with all of the styling that we would like in our app?

Add "About" Page

Add an 'about' page that has information about:
-Project members, with photos, names, and their contributions
-How we came up with the idea (hackathon)

Authenticate via token instead of user ID parameter

  • Make middleware to authenticate (@realprogrammer5000 )
  • Remove usage of user id parameter in backend and use middleware authentication
  • Make helper function in frontend to handle authenticated requests
  • Remove usage of user id parameter in frontend, replace with token
  • Authenticate user membership on group modification endpoints (@demonlexe )

Verify user-inputted phone numbers

After a user has inputted a valid phone number (see issue #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.

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.

  • frontend
  • backend

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.

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.

  • frontend
  • backend

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.