I am a full time frontend developer with around 2 years of professional experience in the field and 5 years of overall learning experience. I am still rather junior and still have plenty to learn and explore.
During my free time, I want to work on a personal project of mine, although I don’t know exactly how to approach this idea.
I am wanting to create a GirlsAskGuys (GAG) clone with a twist. I want to create a forum-type web application like GAG but with real-time features. I have used that site for years and it has inspired me to create something similar. Here is the website for reference: https://www.girlsaskguys.com
In case you are unfamiliar with GAG, it is an online platform where users can ask questions about various life topics and gain feedback from others. You can create polls and create your own articles/editorials called “myTakes”. When you participate, you earn xper points, which unlock features and allow you to advance in ranks. In the past, users were able to redeem points for rewards, such as Amazon gift cards and such. Sadly, they removed that incentive but I want to bring that back in my web app.
Over the years, GAG has gone downhill and has lost a huge amount of participants. The young crowd has left and mainly consists of older adults now.
As stated, I want to create a web app like GAG, but with a better user experience and more appeasing to younger people. I want to add realtime capabilities to mine where, for example, the user can receive realtime notifications, replies and opinions are updated in realtime, polls are reactive in realtime, and much more!
I already know some of the technologies I want to use. I want to use Vue3, NodeJS w/ Express, and Postgres for persistent data storage.
I do, however, have questions…
- I am assuming I will need to use a websocket or similar solution such as socketIO. Am I correct?
- Should I favor sessions over JWT in this scenario?
- Do I need to somehow keep track of users that are currently “logged in” to know whether or not a notification needs to be emitted to the individual?
- Constantly reaching out to the database for every little change can be performance intensive as I assume. Do I need to somehow cache or hold info in memory for better performance?
- Do I need to consider using some cloud platform for storing assets submitted by the user, such as images?
Also, are there any technologies I am missing or should consider for this project? What is the best approach?