Demo project showcasing the best practices for a TypeScript-based web app.
Features
- CRUD resources (e.g. user can create food entries)
- Authentication (email + password; social login) using auth cookies
- Authorization using user roles (user, admin)
- Tiered GraphQL queries (different user roles have access to different queries)
- User settings
- Admin reports and views
Frontend
- Apollo GraphQL
- TypeScript
- Vue3
- Vuetify
Backend
- GraphQL server
- TypeScript
- Prisma with PostgreSQL
- Authentication layer with Express + Passport.js
- Redis as a cache store
- Dockerized
- Reverse proxy using Nginx