Project tutorial

Build a NestJS Blog

Build Circuit Daily with NestJS, Handlebars, Bootstrap, Passport local, express-session, TypeORM, PostgreSQL, owned post CRUD, search, password recovery, and a Railway deployment.

  • Difficulty Intermediate
  • Parts 12
  • Stack TypeScript, NestJS, Handlebars, Bootstrap 5, Passport local, express-session, TypeORM, PostgreSQL

How this project works

Circuit Daily is an original teaching blog in twelve complete snapshots. Clone once and run any numbered folder without rebuilding earlier stages.

The path starts with NestJS and routing, adds Handlebars and Bootstrap, then introduces isolated Postgres databases. Later parts add sessions, media, ownership, pagination, search, reset tokens, and Railway deploy notes.

Snapshots 4–12 seed [email protected] and [email protected] with password123.

Local Postgres runs through Docker Compose on host port 5437 with databases circuit_01circuit_12.

Start with part 1 Open GitHub repo

Parts in order

Work through the parts in sequence. Each lesson explains the ideas in plain language, then points you to a complete runnable snapshot on GitHub for that stage.

  1. Part 1: Getting StartedCreate a minimal NestJS app on port 3001.
  2. Part 2: RoutingOrganize page routes with Nest controllers.
  3. Part 3: Layout and UIRender Handlebars pages with Bootstrap 5.
  4. Part 4: Data LayerPersist authors and posts with TypeORM and PostgreSQL.
  5. Part 5: Feed and DetailBuild a database-backed feed and post detail pages.
  6. Part 6: RegistrationValidate accounts and store bcrypt password hashes.
  7. Part 7: Login and SessionsAuthenticate with Passport local and express-session.
  8. Part 8: Profiles and MediaShow author profiles and accept constrained avatar uploads.
  9. Part 9: Posts CRUD and OwnershipCreate, edit, and delete posts with owner authorization.
  10. Part 10: Pagination and SearchPaginate the feed and search post text.
  11. Part 11: Password ResetIssue expiring one-use password reset tokens.
  12. Part 12: DeployPrepare Circuit Daily for Railway and managed Postgres.