Stack at a glance
Stack map
Runtime and dev dependencies, what each does, and why each piece exists. BoringStack is built from proven parts and wired with contracts so humans and AI agents can change one layer without guessing about the others.
UI
api + infra
1
OpenAPI contract
validate
architecture gate
Summary
Section titled “Summary”Bun HTTP API + workers
Elysia, Drizzle, Postgres, Valkey, BullMQ, Pino. Owns security, persistence, background work, and OpenAPI.
apps/uiVite React SPA
React 19, TanStack Query, Zustand, shadcn/ui, Playwright, and a generated client instead of hand-written API calls.
infra-composeSingle-host Compose runtime
Postgres, Valkey, Traefik, and optional observability/error-tracking overlays for local and VPS environments.
infra-tofuFirst real deploy path
OpenTofu, Hetzner, Cloudflare, and cloud-init provision a VPS and drop the Compose stack in place.
Full inventory
Section titled “Full inventory”Runtime: Bun
HTTP framework: Elysia
ORM: Drizzle
Database: Postgres
Cache + queue store: Valkey
Queues: BullMQ
Auth
Error tracking
AI
OPENAI_BASE_URL for compatible endpoints.Logger
Templates
Dead-code detection
bun run validate.Build tool: Vite
/api/*.Framework: React 19
Server state: TanStack Query
Client state: Zustand
Forms
Routing
Components
Styling
@theme tokens.HTTP
Error tracking
i18n
Tests
Visual regression
Storybook
Dead-code detection
bun run check.Reverse proxy (prod): Traefik
Certs
Metrics
Logs
Dashboards
compose/grafana/dashboards/.Alerts
Error tracking (self-hosted)
Image updates
Local email
WITH_MAILPIT=1.Queue dashboard
Backups
Optional firewall
IaC: OpenTofu
VPS: Hetzner Cloud
DNS + edge
Firewall
First boot
bootstrap.sh; clone infra, compose pull && up -d.Backups (optional)
Architecture-enforcement plugins
Section titled “Architecture-enforcement plugins”Each app workspace ships custom ESLint plugins (all open-sourced) that codify the patterns and stop drift at the lint gate.
Full inventory with GitHub links →
Related
Section titled “Related”- Why BoringStack; the decision guide behind these choices.
- Repository layout; how the workspaces fit together.
- Deployment; how the runtime choices ship.