- Build tool: Vite. Preferred over Next and CRA for its better developer experience.
- Routing: React router. Chosen for familiarity and ease of use.
- State management: Zustand. Preferred over Redux and others for simple API, use without hooks which pairs well for data loading using react-router and for its subscribe api which allows us to listen for updates to state without rerendering the component.
- Animation library: Framer-motion. Chosen for versatility and simple api.
- 3D graphics and Physics: Threejs through react-three-fiber and Rapier
- Styling solution: Tailwind + postcss. Chosen for ease-of-use and customisability.
- Middleware and routing: Expressjs. Chosen for simplicity and faster development.
- Authentication: Passportjs.
- Bidirectional socket communication: Socket.io.
- Database querying: Mongoose.
- Managing content: Contentful.
- AWS Lambda - caches to Redis and serves the cached response
- Puppeteer - Gets content from main server when cached response is not available.
- Pulumi - Manages the provisioning of AWS resources, namely Lambda and Function-url for lambda.