A full-stack movie database application. Users can browse movies, write reviews, and manage accounts. Admins can manage the full catalog via a dedicated panel.
The project is a pnpm monorepo with two applications: a NestJS API and a Next.js frontend, plus a shared packages/types package.
bmdb/
+-- apps/
| +-- api/ # NestJS backend (REST + GraphQL)
| +-- web/ # Next.js frontend
+-- packages/
| +-- types/ # Shared TypeScript types
+-- docker-compose.yml
+-- .env.example
+-- package.json
| Layer | Technology |
|---|---|
| Frontend | Next.js, React 19, Tailwind CSS v4, shadcn/ui |
| Backend | NestJS 10, Apollo Server 4, GraphQL |
| Database | PostgreSQL 16, Prisma 5 |
| Auth | JWT access and refresh cookies, Passport.js |
| Package manager | pnpm 10 workspaces |
- Node.js >= 20
- pnpm >= 10 (
npm i -g pnpm) - Docker for PostgreSQL
pnpm installcp .env.example .envSet JWT_SECRET and JWT_REFRESH_SECRET to random strings. Configure EMAIL_HOST, EMAIL_USER, and EMAIL_PASS if you want registration emails to be sent.
By default, the API runs on http://localhost:3001, the web app runs on http://localhost:3000, and the Next.js app proxies /api/* and /graphql to the API through API_URL.
pnpm db:upcd apps/api
pnpm prisma:migrate
pnpm seedpnpm dev- API: http://localhost:3001
- Web: http://localhost:3000
- GraphQL Playground: http://localhost:3001/graphql
- Email:
admin@bmdb.local - Password:
Admin1234!