Skip to content

[Docs] Project Requirements #3

@yusufaine

Description

@yusufaine

THIS ISSUE SERVES AS A DRAFT FOR PROJECT REPORT.

Decisions

Tech stack

  • Backend
    • NestJS
    • NestJS/passport
    • nodemailer
    • redis
    • socket.io
    • yjs
    • zod
    • Prisma + PlanetScale
  • Frontend
    • Vite
    • Tailwind
    • React-query
    • zustand
    • y-socket.io
    • simple-peer
    • monaco-editor
  • Data
    • NodeJS
    • Prisma + PlanetScale

Deployment

For the development and demonstration of the application, we would focus on running the service locally. Once all the features are up and running nearer and as we approach the deadline, we would ideally dockerise some of the microservices and deploy it as follows:

Frontend

Vercel Google App Engine
Price Free for personal repositories. Free for the first 28 instance hours of "F" instances
Availability Available 24/7, also provides readable URLs when deployed Available 24/7, default URLs are not very readable
Scaling Unable to find, but should not be an issue Handled by Google for free, within the deployed instance class (F1 - F4), different increasing memory and CPU limits.
CI/CD Difficulty Vercel has their own CICD pipeline To find out more on, but currently thinking of manually integration and deployment

Leaning towards Vercel if we can integrate it with our backend.


Backend

Google Cloud Run Google App Engine
Price Free 180000 vCPU seconds per month Free for the first 28 instance hours of "F" instances
Availability Pay-per-use, first request would is slow as it needs to "spin up" Available 24/7, does not require "spinning up"
Scaling Handled by Google for free Handled by Google for free, within the deployed instance class (F1 - F4), different increasing memory and CPU limits.
CI/CD Difficulty Relatively simple, can be done with Github Actions (example) To find out more on, but currently thinking of manually integration and deployment

Leaning towards Google App Engine.


User service

Planetscale -- Hosted SQL database.

  1. Reasonable free tier
  2. Chosen over NoSQL service as the data in our service can be relational and we would like the ability to work with that.

Matching service

Utilise Redis' namespace as the different types of "queues" (PubSub topics).


Question service

Planetscale to allow for relational queries/mappings, Redis for quick queries.


Design

We will prioritise functionality first before user experience. Simply put, the team would work on getting a functional version up first before improving on the UI elements that would improve the user experience.


Diagrams

All of our diagrams are stored in this Gist.

Architecture

Simplified

image

Specifics

  • Deployment is subjected to change but we are currently leaning towards the following:
    • Backend: Google App Engine
    • Frontend: Vercel

User flow

image

Specifics

  1. At any page after Dashboard users can navigate access the pages that are immediately a child to Dashboard as there would be a navigation bar.
    • Locked room page with past session can access Matching page directly without needing to go back to Dashboard.
  2. At any page, a user may choose to log out and would be directed back to the start of the user flow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions