Fastify patterns — always apply schema-first validation, plugin encapsulation, structured error handling, hooks lifecycle, decorators, TypeScript type providers, production hardening (CORS, helmet, rate limiting), pino logging, graceful shutdown, and correct async handler patterns
89
89%
Does it follow best practices?
Impact
91%
2.75xAverage score across 5 eval scenarios
Passed
No known issues
Build a Fastify microservice that manages user notifications. The service will be deployed in a Docker container behind an API gateway.
POST /api/notifications -- Create a notification. Accepts userId (string), type ("email", "sms", "push"), title (string), message (string), and optional metadata (object).GET /api/notifications/:userId -- List notifications for a user. Accepts optional query params read (boolean) and limit (integer, default 20).PATCH /api/notifications/:id/read -- Mark a notification as read.DELETE /api/notifications/:id -- Delete a notification.GET /api/health -- Health check endpoint returning { status: "ok" }.Use an in-memory store. Each notification gets an id, createdAt timestamp, and read: false by default.
Produce TypeScript files in a src/ directory:
src/app.ts -- Fastify app setup and plugin registrationsrc/plugins/notifications.ts -- Notification routessrc/plugins/health.ts -- Health check routesrc/services/notificationService.ts -- Notification business logicsrc/server.ts -- Server startup and configurationDo not include test files or build configuration.
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
skills
fastify-best-practices
verifiers