~/projects / quiz-forge
Quiz Forge
Full-stack quiz app: users browse and play quizzes, admins manage content in a dashboard. A TypeScript monorepo with Nuxt 4 and NestJS.
- role
- full stack: NestJS API, Nuxt frontend, auth, tests
- time
- Mar 2026
- type
- personal
- stack
- Nuxt 4 · NestJS · TypeORM · PostgreSQL · Turborepo · Docker
01 / problem
Quizzes need a player side and an admin side
A quiz app has two audiences: players who browse, play and submit answers, and admins who create the question sets. Each needs its own access rules and its own screens.
02 / solution
A role-based quiz platform
Users sign in with JWT access and refresh tokens kept in HTTP-only cookies. Admins create quizzes with questions and answer options; players pick a quiz, play it and submit their responses. Server-side guards enforce the admin and user roles, quiz listings are paginated and Swagger documents the API. The interface has a Polish locale.
- [screenshot 1]
[caption]
- [screenshot 2]
[caption]
03 / architecture
How it works
A Turborepo + pnpm monorepo. apps/backend is a NestJS REST API on TypeORM and PostgreSQL 15 with auth, quiz and user modules; apps/frontend is a layer-based Nuxt 4 app (core, base, auth) with Tailwind and Pinia. Shared DTOs live in a shared-types package. Vitest covers units, Playwright covers end-to-end flows and Docker Compose runs the database.
04 / results
Outcome
05 / lessons
What I learned
- Shared TypeScript DTOs in one package keep the frontend and backend contracts in sync.
- Splitting the Nuxt app into core, base and auth layers keeps layouts and i18n apart from the feature pages.
gallery
- [photo]
[caption]
- [photo]
[caption]
- [photo]
[caption]