A real-time collaborative sprint retrospective application built with Next.js, NestJS, and WebSockets.
retroloop/
├── apps/
│ ├── back/ # NestJS backend API + WebSocket server
│ └── front/ # Next.js frontend application
├── packages/
│ └── shared-types/ # Shared TypeScript types and interfaces
└── docs/ # Architecture, testing, WebSocket protocol
- Node.js 24+
- Yarn 4.x (packageManager is set in package.json)
- PostgreSQL 16+
- Docker & Docker Compose (recommended)
Run the entire app (database + backend + frontend) with a single command:
# 1. Configure environment
cp .env.example .env
# Edit .env — at minimum set JWT_SECRET (generate with: openssl rand -base64 32)
# 2. Start everything
docker compose -f docker-compose.full.yml up --buildOnce running:
- Frontend — http://localhost:3000
- Backend API — http://localhost:3001/api
To stop: docker compose -f docker-compose.full.yml down
To stop and remove data: docker compose -f docker-compose.full.yml down -v
# 1. Install dependencies
yarn install
# 2. Configure environment
cp .env.example .env
# Edit .env — set JWT_SECRET (generate with: openssl rand -base64 32)
# 3. Start PostgreSQL
docker-compose up -d
# 4. Build shared types
yarn workspace @retro/shared-types build-lib
# 5. Run database migrations
yarn workspace back db:migrate
# 6. Start development servers
yarn dev:back # Terminal 1 — http://localhost:3001
yarn dev:front # Terminal 2 — http://localhost:3000If running PostgreSQL manually instead of Docker, create a database and set the
POSTGRES_*variables in.envaccordingly.
All environment variables live in a single root .env file, used by Docker Compose, the backend, and the frontend.
Copy the example and fill in your values:
cp .env.example .env| Variable | Description | Example |
|---|---|---|
JWT_SECRET |
Secret key for JWT token signing (minimum 32 characters) | Generate with: openssl rand -base64 32 |
| Variable | Description | Default |
|---|---|---|
POSTGRES_USER |
PostgreSQL user | retro |
POSTGRES_PASSWORD |
PostgreSQL password | retro_dev_password |
POSTGRES_DB |
PostgreSQL database name | retro |
POSTGRES_HOST |
PostgreSQL host | localhost |
POSTGRES_PORT |
PostgreSQL port | 5432 |
PORT |
Backend server port | 3001 |
FRONTEND_URL |
Frontend URL (for CORS) | http://localhost:3000 |
INTERNAL_PORT |
Internal observability port (metrics) | 9090 |
NEXT_PUBLIC_API_URL |
Backend API base URL (frontend) | http://localhost:3001/api |
NEXT_PUBLIC_WS_URL |
WebSocket server URL (frontend) | http://localhost:3001 |
| Group | Variables | Setup |
|---|---|---|
| Google OAuth | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_CALLBACK_URL |
Google Cloud Console |
| Email (Mailgun) | MAILGUN_API_KEY, MAILGUN_DOMAIN, MAILGUN_EU_HOST, EMAIL_FROM |
mailgun.com |
| Sentry | SENTRY_DSN, SENTRY_ENABLED, NEXT_PUBLIC_SENTRY_DSN, NEXT_PUBLIC_SENTRY_ENABLED, SENTRY_ORG, SENTRY_PROJECT, SENTRY_AUTH_TOKEN |
sentry.io |
| DB Pool Tuning | DB_POOL_MIN, DB_POOL_MAX, DB_POOL_IDLE_TIMEOUT_MS, DB_POOL_CONNECTION_TIMEOUT_MS |
See .env.example for defaults |
See
.env.examplefor full documentation on every variable.
| Command | Description |
|---|---|
yarn dev:back |
Start backend in development mode |
yarn dev:front |
Start frontend in development mode |
yarn build:back |
Build backend for production |
yarn build:front |
Build frontend for production |
yarn build-lib |
Build all library packages |
yarn lint |
Run ESLint on all packages |
yarn lint:fix |
Run ESLint with auto-fix |
yarn format |
Format all files with Prettier |
| Command | Description |
|---|---|
yarn workspace back start:dev |
Start in watch mode |
yarn workspace back build |
Build for production |
yarn workspace back test |
Run unit tests |
yarn workspace back test:e2e |
Run E2E tests |
yarn workspace back db:generate |
Generate new migration |
yarn workspace back db:migrate |
Run pending migrations |
yarn workspace back db:push |
Push schema to database (dev) |
yarn workspace back db:studio |
Open Drizzle Studio |
| Command | Description |
|---|---|
yarn workspace front dev |
Start in development mode |
yarn workspace front build |
Build for production |
yarn workspace front start |
Start production server |
yarn workspace front test |
Run unit tests |
- NestJS 11
- Drizzle ORM
- PostgreSQL
- Socket.IO (WebSockets)
- Passport.js (JWT Authentication)
- Next.js 16 (App Router)
- React 19
- Tailwind CSS
- Framer Motion
- Socket.io Client
- TypeScript
- Yarn Workspaces
- ESLint + Prettier
- Husky (Git hooks)
| Document | Description |
|---|---|
| Architecture | System diagram, module overview, database schema, data flows |
| WebSocket Protocol | Full WebSocket event reference |
| Testing Guide | How to write, run, and maintain tests |
| Contributing | Code style, commit conventions, PR process |
| Backend README | Backend architecture, commands, migrations, deployment |
| Frontend README | Frontend architecture, components, data fetching |
| Security Policy | Vulnerability reporting |
| Support | Getting help |
This project is licensed under the MIT License - see the LICENSE file for details.