Fastify is a Node.js framework built around plugin encapsulation and speed: every plugin gets its own isolated scope by default, decorators extend the framework itself rather than chaining middleware onto individual routes, and request validation is a first-class part of the framework rather than something bolted on. It’s also what I use in my day job, so this series is built to genuinely mirror a real production stack rather than a simplified version of one.
The domain is support and helpdesk ticketing, deliberately: it shows up across nearly every industry, and the underlying problems it involves (status lifecycles, SLA timers, agent assignment) are a natural fit for the tools this series builds toward. Each app in this series goes deeper, starting with ticket CRUD and real authentication, then agent accounts and live updates, then durable SLA workflows and background jobs.
Projects build on each other.
| 1 | Support Ticket API A support agent can register, log in, and manage a full ticket lifecycle: creating tickets, filtering by status or priority, updating assignment and priority, and leaving comments tied to whichever agent is actually logged in. Built inside an NX monorepo matching a real production folder structure, with every route backed by a real JWT-based auth check and a full test suite covering both success and failure paths. NX | Fastify | Postgres · Drizzle ORM | Zod validation | Vitest · 23 tests | TypeScript |
| 2 | Agent Console Agents sign in with email/password or Google, manage a full ticket lifecycle including attachments and assignment, and see updates from other agents appear live without refreshing, powered by Server-Sent Events. Every ticket action that matters triggers a real email through a local mail server, and the API exposes live Prometheus metrics visualized in Grafana. Google OAuth · JWT refresh rotation | MinIO | SSE | Prometheus · Grafana | React + Zustand | Vitest · 59 tests |