← Projects

Event-Planner

07/2023 - 09/2023

Tech Stack:

https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/bootstrap/bootstrap-original.svg
https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/docker/docker-original.svg
https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/express/express-original.svg
https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/javascript/javascript-original.svg
https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/mongodb/mongodb-original.svg

Description: A web app that helps manage events using microservices


What is this project about

A dockerized web app that helps people create and sign up events using microservices

Requirements

You would need to create two .env file, one in Gmail, another one in Yelp.

  • In Yelp service, you would need to add the API KEY, YELP_APIKEY, from Yelp Developers.
  • In Gmail service, you would need to add multiple OAuth2 authentication code, as they are CLIENT_ID, CLIENT_SECRET, REDIRECT_URL, REFRESH_TOKEN from Google API.

How to run the web app

Note: You must have mongoDB and Docker installed in your local machine.

cd EventPlanner
docker compose up

how to stop the containers from running:

docker compose down

how to remove all unused objects such as images and containers:

docker system prune -a

how to remove all unused volumes:

docker volume prune -a

Dockerfile

  • Run docker compose -f docker-compose.dev.yml up in dev mode
  • Why is the context keyword used?
    • The context keyword is important when you are specifying a Dockerfile that is different from the default (Dockerfile). The context represents the directory that Docker Compose uses as the build context. This is typically the directory where your application code resides and where your Dockerfile is located. When you specify a custom Dockerfile using the dockerfile keyword, it's assumed that this Dockerfile is located in the directory defined by context. Without the context keyword, Docker Compose wouldn't know where to find the Dockerfile you're referencing.

Why start I this project

After a few thoughtful days, I decided the best scalable web application that fits my taste is a web application that involves event planning. I wanted to create an interactive and scalable web app that helps people register and sign up for events. My idea comes from the UMASS campus pulse and FaceBook Events. These are great apps, but I wanted to create a more user-friendly web app that is simple, clean, neat, and scalable that comes with many interesting tools.

The basic components that support my web app will be microservices, interactive user interface, NoSQL database integration, and containerization and dockerization.

Microservices help modularize and organize independent applications to communicate over APIs through Eventbus. I plan to work on four microservices. The first one I am going to implement, called “Events”, helps users register for an event. An event could have an event name, start date, end date, location description, location option, image link, and an option for people to sign up online. After registering for the event, the event information will be stored in the MongoDB database and shown in a card format. Since the event can be signed up online, it gives us the ability to create another microservice that stores people’s personal information such as their first name and email - only these two are enough, making it simple. This microservice I named it is “People”. I planned to implement the third microservice called “Yelp”. The “Yelp” will use the user preference to find the nearby place. This will generate a list of nearby suggested locations for the event. This helps event planners to better organize their events in a much quicker manner and choose their desired place. The fourth microservice will only be implemented if I have enough time, which is called “Gmail”. “Gmail” will send out an email to people who have signed up for an event, this will remind people that they have signed up for the event, deliver important messages in a quick time manner and increase user engagement in a friendly and fun way. This microservice will be utilizing the Gmail API. If possible and if I have time, their Google Calendar will attach the event automatically.

My application is interesting because it allows people to maneuver their event location in a fun and quick way, allowing more friends and families to gather together at their favorite places. People would use it because it is simple, and they can sign up for an event with a few clicks, and receive a notification with the event they signed up for, such as live updates of the events. It will also give users constant notifications about the upcoming event, and most importantly, they can see the names of friends and families attending the event. Someone would use it because it comes with great notification features, a simple UI that allows them to sign up for an event without much work, great for time-saving and having fun interacting with the web app meanwhile practicing some sort of pre-work ritual to ready to join the event. It will be fun and interactive with many micro-interactions.

For an event-planning app, scalability is important. As more important events arise, the application will be populated with more users. This will lead to slow performance, crashes, or data loss due to the abundance of user information. But when effective scalability comes into play, those risks will be mitigated to allow a seamless experience for users. The scalable design will help future growth, balance traffic, and protects personal data, resulting in the app's long-term success and reliability for users.

Here is video demo of the web app: link