5 Commits

Author SHA1 Message Date
m
45605c803b fix: pass NEXT_PUBLIC_* env vars as build args for Supabase client
Next.js inlines NEXT_PUBLIC_* vars at build time. They must be
available as ARGs during the Docker build, not just as runtime
environment variables.
2026-03-25 15:53:32 +01:00
m
c5c3f41e08 feat: production hardening — slog, rate limiting, integration tests, seed data (Phase 4)
- Structured logging: replace log.* with log/slog JSON output across backend
- Request logger middleware: logs method, path, status, duration for all non-health requests
- Rate limiting: token bucket (5 req/min, burst 10) on AI endpoints (/api/ai/*)
- Integration tests: full critical path test (auth -> create case -> add deadline -> dashboard)
- Seed demo data: 1 tenant, 5 cases with deadlines/appointments/parties/events
- docker-compose.yml: add all required env vars (DATABASE_URL, SUPABASE_*, ANTHROPIC_API_KEY)
- .env.example: document all env vars including DATABASE_URL and CalDAV note
2026-03-25 14:32:27 +01:00
m
792d084b4f fix: use node fetch for frontend health check
wget in node:22-alpine can't connect to localhost:3000 — use
node's built-in fetch instead, which works correctly.
2026-03-24 23:47:36 +01:00
m
ff9a6f3866 fix: use expose instead of ports for Dokploy/Traefik compatibility
Port 3000 conflicts with Dokploy. Traefik routes traffic via
Docker network, so expose is sufficient. Also remove env_file
refs since Dokploy injects env vars directly.
2026-03-24 23:43:11 +01:00
m
b797b349e7 build: add Docker Compose setup for Dokploy deployment
- Multi-stage Dockerfile for Go backend (golang:1.25-alpine -> alpine:3)
- Multi-stage Dockerfile for Next.js frontend (bun:1 -> node:22-alpine)
- docker-compose.yml with backend + frontend services, health checks
- Next.js standalone output + API rewrites to proxy /api/* to backend
- .dockerignore files for both services
- .env.example documenting required environment variables
2026-03-24 19:20:49 +01:00