D2. Design Document

Platform Selection

General Information:

  • Programming Language: Typescript
  • Client-server system
  • Web application – should be compatible with any OS with web browsers

Client Requirements:

  • Client’s programmer has used Node.js and Express.js and would prefer for the team to use the same for easier integration

Selected platforms are italicized.

Frontend/UI

  • Angular
    • Pros:
      • More familiarity among teammates
      • Is a full MVC framework that doesn’t rely on other technologies
    • Cons:
      • Possibly slow performance
      • Large application size
  • React
    • Pros:
      • Performant UI library
      • More simplistic development
    • Cons:
      • Not a full fledged frontend Framework, only accounts for UI components

Backend/API

  • Node.js
    • Pros:
      • Is our clients preferred backend technology
      • Can be used with typescript, keeping a consistent programming language
      • Has a large existing package ecosystem, including express.js
      • ubiquitous
    • Cons:
      • Slower compared to other js runtimes (bun, deno)
      • API not stable
  • FastAPI:
    • Pros:
      • Faster than Express.js
      • Clean syntax and fast learning curve
    • Cons:
      • Uses a different programming language, could cause inconsistencies with frontend
      • Team is less familiar with the deployment process of FastAPI
      • Typing in Python is weaker than TypeScript, poorly affecting development time
  • Express.js
    • Pros:
      • Minimalistic framework that is easy to learn and use
      • Is client’s preferred framework
      • Written in JavaScript but compatible with TypeScript which allows for consistency with frontend
    • Cons:
      • Lack of built-in features may require more boilerplate code or importing dependencies

Database

  • Supabase
    • Pros:
      • Familiarity among backend lead
      • Has a strong free tier scheme
      • Uses a Postgres database
      • Can be used as just a database
    • Cons:
      • Needs 3rd party hosting of documents
  • Firebase
    • Pros:
      • Has a strong free tier scheme
      • Built on a big ecosystem of google add-ons
    • Cons:
      • Uses noSQL, which is not necessary
      • Is less flexible with other options; Would need to use firebase more throughout the stack

ORM

  • SQL
    • Pros:
      • Fast and performant
      • Industry standard
    • Cons:
      • Prone to error
      • Typing is not guaranteed in typescript
      • Expressive nature of SQL makes it harder to get up to speed
      • Database and queries can get out of sync; hard to track down cascading changes
  • Prisma
    • Pros:
      • Easy to learn
      • Has powerful typing guarantees, ensuring the database and the types are always in sync
      • Allows for raw SQL queries if needed
    • Cons:
      • Less control over the specifics of a query
      • Slower queries

Architecture Diagram