| src | ||
| .dockerignore | ||
| .env.example | ||
| .eslintrc.js | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| compose.dev.yml | ||
| compose.yml | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| nest-cli.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
NestJS Starter
A NestJS starter template with authentication, user management, email service, and database setup.
Features
- Authentication: JWT-based auth with access/refresh tokens, session management
- User Management: Registration, login, email verification, password reset
- Email Service: BullMQ queue-based email sending with Handlebars templates
- Database: PostgreSQL with TypeORM, migration support, transaction factory
- API Documentation: Swagger/OpenAPI with Dracula theme
- Security: Helmet, CORS, bcrypt password hashing
- Docker: Ready-to-use Docker Compose setup (dev & prod)
Tech Stack
- NestJS 11
- TypeScript 5
- PostgreSQL 17 + TypeORM
- Redis + BullMQ
- JWT Authentication
- Swagger/OpenAPI
- Docker & Docker Compose
Getting Started
Prerequisites
- Node.js 22+
- pnpm
- Docker & Docker Compose
Setup
- Copy the environment file and configure it:
cp .env.example .env
- Start with Docker Compose (development):
docker compose -f compose.dev.yml --env-file .env up --build
- Or start locally:
pnpm install
pnpm migration:run
pnpm start:dev
API Documentation
Once running, visit http://localhost:4000/docs for Swagger documentation.
Project Structure
src/
├── auth/ # Authentication module
│ ├── dto/ # Auth DTOs (login, register, etc.)
│ ├── entities/ # Session, PasswordResetToken, VerificationCode
│ ├── guards/ # AuthGuard (JWT)
│ ├── services/ # AuthService, CustomJwtService, VerificationCodeService
│ └── utils/ # Request utilities
├── common/ # Shared utilities
│ ├── decorators/ # CurrentUser, Pagination, Filtering, Sorting decorators
│ ├── entities/ # AbstractEntity (base entity)
│ ├── enums/ # ErrorCode enum
│ ├── interceptors/ # ResponseInterceptor
│ ├── transformers/ # Decimal column transformer
│ └── utils/ # Object utils, auth utils, decimal utils
├── config/ # Environment config & validation
├── database/ # Database module, migrations, transaction factory
├── mail/ # Email service with BullMQ queue
│ ├── enums/ # Mail job names
│ └── templates/ # Handlebars email templates
├── users/ # User module
│ ├── dto/ # User DTOs
│ └── entities/ # User, Password entities
├── app.module.ts # Root module
├── data-source.ts # TypeORM CLI data source
└── main.ts # Application entry point
Scripts
| Command | Description |
|---|---|
pnpm start:dev |
Start in development mode (watch) |
pnpm start:prod |
Start in production mode |
pnpm build |
Build the project |
pnpm migration:create --name=migration-name |
Create a new migration |
pnpm migration:generate --name=migration-name |
Auto-generate migration from entities |
pnpm migration:run |
Run pending migrations |
pnpm migration:revert |
Revert last migration |
pnpm lint |
Run ESLint |
pnpm test |
Run tests |