Creating the ultimate platform tool for universities to lease unused spaces to unlock new realms of collaboration amongst a network of students and alumni.
Explore the Repo »
View Demo Here
UniVenue empowers universities with the ultimate platform tool to enable seamless space leasing opportunities and unlocking new realms of collaboration and revenue generation. Verified students, alumni, and organizations within the network can leverage our platform to lease out unused spaces for meetings, workshops, and even stadium-sized events. Admin accounts associated with each university will have the ability to publish a variety of different spaces (study tables, classrooms, lecture halls, indoor arenas, outdoor stadiums, etc.) for a variety of different occasions (study, meeting, community event, large-scale event, etc.) and for a desired duration. seats and venues are published through the form of tickets. Students and alumni verified through a university ID or university email will have the ability to reserve an available venue at any of the network institutions for a given duration. Once an order is made for that space, an admin account from the given institution must then make the approval to finalize the order and complete the purchase. Confirmation of a reservation will be sent to the user in the form of a ticket. In the case of this demo, as the user, you will be able to sign in and log in to multiple accounts, create tickets, browse through available space catalog, create an order for a ticket, and make a payment to successfully claim a ticket.
This mobile-responsive application embodies an event-driven architecture, meticulously constructed to facilitate seamless interactions. Leveraging Next.js in developing the client service (handling all client related interactions) and Express.js and Bull.js in developing server-side services (authentication, tickets, orders, payments, and expiration services), the application's architecture seamlessly orchestrates the flow of data and interactions. Each distinct service within the kubernetes ecosystem is meticulously designed to communicate through events distributed through technologies such as NATS Streaming Server, allowing for modular development and scalability. Next.js empowers the frontend with its efficient rendering and routing capabilities, while Express.js facilitates the each service's responsiveness and data handling. This combination of technologies enables the application to gracefully adapt to various devices while maintaining a fluid and dynamic user experience.
GitHub Actions was integrated into this project as an essential automated workflow tool. By leveraging its capabilities, I streamlined UniVenue's development processes, enabling automatic builds, tests, and deployments. This not only bolstered our code quality through consistent testing but also expedited the delivery pipeline, promoting overall project efficiency. DigitalOcean was utilized as the cloud host solution of choice to host out Kubernetes cluster due to its robust (and budget friendly) Kubernetes offering. The platform's straightforward management tools, along with its reliable infrastructure, provided a seamless environment for orchestrating containerized applications while minimizing administrative overhead.
** A custom built npm package ('@crescenttheater/common') was utilized to house all common methods and functionality shared between the different services to avoid repition within the repository **
- Typescript
- Next.js
- React.js
- Tailwindcss
- Express.js
- Node.js
- MongoDB
- Redis
- Bull.js
- Stripe API
- Ingress-NGINX Controller
- Docker
- Kubernetes
- Github Actions
- Digital Ocean
To check out the web application, check it out HERE
To play around with the codebase, lets do the following...
-
Clone the repo
git clone https://github.com/Mohsin-Braer/UniVenue.git
-
Under each service directory, install NPM packages
cd *service name* npm install
-
Build and push docker images to Docker Hub
cd *service directory* docker build -t *your docker username*/*image name*
-
Install neccessary Ingress Kubernetes objects to use Ingress-NGINX Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
-
Update
skaffold.yaml
and infra directory files where necessary -
Add required secrets
JWT_KEY
andSTRIPE_KEY
to your kubernetes clusterkubectl create secret generic jwt-secret --from-literal JWT_KEY= *your jwt key here* kubectl create secret generic stripe-secret --from-literal STRIPE_KEY= *your stripe api secret key*
-
Run skaffold to run application within cluster
skaffold dev