- User Authentication
- Create account
- Login
- Verify email
- Change account settings
- First name, last name, email, or password
- Recover account from lost password
- Logout
- Create a golf profile
- One golf photo
- Status
- Bio
- Days/Times available
- Average score
- Play style - relaxed, competitive, social, etc
- Age
- Male/Female/Other
- Other choices like music player, smoking, betting, fast
- Search other golf profiles
- Search by geolocation
- With or without the other profile filters
- Search by first and last name
- With or without the geolocation or other profile filters
- Search by geolocation
- One to one Messaging
- Message other people by clicking on message button their profile
- Send email alerts
- Send email notifications when someone messages them
- limited to one email a day
- Scalable
- Performant
- Cheap to run
- Easy to maintain
- Where the user interacts with our application
- Each page is server rendered from a SvelteKit container
- It will establish a websocket connection to the WebSocket server in order to send and to receive one-to-one messaging
- All api calls to the Profile and Message CRUD service will be routed through a SvelteKit container
- The web javascript server rendering framework for the application
- All api calls from browser go through this service except for the websocket connections
- Handles all of the authentication flows
- Create account, login, getSession, verify, recovery, logout, etc…
- Calls the AWS SES to send emails for verification and recovery
- Stores session and user data in an AWS RDS postgres database
- API allows users to create, update, read, and delete their own profile
- Allows users to search and filter for other profiles
- This service calls the dynamoDB table to get the data
- Allows users to read previous messages
- Browser establishes a websocket connection to this server
- Allows users to send and receive messages from other people
- Publish messages sent from the websocket to the specific person’s user id
- Subscribe to messages for a specific person and send them through their websocket connection
- Uses AWS elasticache for redis for the pub/sub
- Uses a single table design to store the profiles and messages