I am needing some guidance on how to approach this project

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…

  1. I am assuming I will need to use a websocket or similar solution such as socketIO. Am I correct?
  2. Should I favor sessions over JWT in this scenario?
  3. 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?
  4. 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?
  5. 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?

Yes, you’ll need to leverage websockets/socketio (which abstracts websockets) to get “real-time” updates.

No, JWT’s main advantages are tied to their scalability, but unless your targeting millions or billions of concurrent users, traditional sessions will work fine. JWTs are more complex to use correctly, so they end up becoming a “pre-optimization”

Yes, however depending on what methods your using to “notify” the user, you might already have this information automatically.

Seems like you just answered your own question. Having a “cache” or multiple levels of caches, or some service that acts as a cache can be an optimization. However, since a forum is not high performance based use-case, you could optimize around not calling the database all the time. For example, you could have a service “emit” changes when they occur, and then tell users affected by that change at that time. This would leave you saving state to your database, but not relying on it to “tell” users at the time. There are plenty of other methods optimized for this use-case though.

I’d consider where you’re going to host/run your stack. It could be on the cloud, but which cloud, and what parts of the cloud you’d need/want would be the next questions.

You may also want to consider the age of the users. You wouldn’t want to be talking with people whom are much younger than you. Ya know, that wouldn’t look good. I’ve seen videos of stuff like that.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.