Traceable routes
Request wrapper + OTEL spans from handlers into services and repositories.
Lean architecture
Tailwind v4 and shadcn/ui for the interface, Zod and Drizzle for feature boundaries, plus structured logs, Prometheus metrics, and end-to-end tracing from request entry to database work.
Request wrapper + OTEL spans from handlers into services and repositories.
Pino logs carry request IDs and trace IDs so incidents can be stitched back together.
Prometheus exposition with process, route, and DB metrics at /metrics.
Drizzle stays shallow, but repository spans still make database timing visible in Tempo.
/
What the template includes and how the pieces fit together.
Open page/guide
How to use the project once the app is running for real work.
Open page/operations
Runbook for health checks, metrics, logs, and tracing in production.
Open pageApp Router, route handlers, instrumentation, and proxy entrypoints.
Tailwind v4 tokens with a light shadcn/ui layer for durable UI work.
Composable components kept in-repo instead of hiding logic in a package.
Shared contracts for env parsing, request payloads, and feature boundaries.
Typed SQL access with generated migrations outside runtime source code.
Root tracing, nested feature spans, and OTLP export to Grafana Tempo.
Process, HTTP, and database metrics exposed at /metrics.
Fast unit coverage around contracts, services, and observability helpers.
Browser checks for the site, subscriber flow, and API smoke routes.
src/appRoute entrypoints, page composition, and thin HTTP adapters only.src/featuresBusiness rules, validation contracts, and repositories grouped by domain.src/serverEnv parsing, observability, db wiring, and generic HTTP utilities.src/componentsReusable UI primitives and client components that stay close to the app.drizzleGenerated SQL migrations kept outside src for cleaner runtime code.opsLocal Grafana and Tempo provisioning for observability smoke tests.pnpm checkRun linting, type checks, and unit tests in one pass.pnpm e2eMigrate the local database, build the app, and run Playwright.pnpm observability:upBoot Grafana and Tempo locally with ready-to-use provisioning.pnpm observability:testStart the stack, run the app, and verify spans reach Tempo.pnpm db:migrateApply committed migrations to the configured database.pnpm devStart the local development server with the current configuration.Included baseline
First 15 minutes
Copy .env.example to .env.local and decide whether OTEL tracing should be on for your environment.
Run pnpm observability:up when you want Grafana Tempo available locally.
Run pnpm db:migrate to prepare the local SQLite database before feature work.
Use pnpm observability:test to verify traces, metrics, and middleware wiring end-to-end.