Backend Phase A: foundation, migrations, Docker setup

- Go backend skeleton: config (caarlos0/env), slog JSON logging,
  pgxpool store, HTTP server with graceful shutdown.
- httpapi: render helpers, Problem errors, middleware chain
  (requestID / logging / recover / CORS), /healthz and /readyz.
- Migrations: full initial schema (users, sessions, lists,
  list_members, items, op_log SOURCE OF TRUTH, item_names) +
  golang-migrate runner binary using source/iofs (embedded).
- Docker: multi-stage Dockerfile (Go 1.26 -> distroless nonroot),
  builds both server and migrate binaries.
- deploy: docker-compose (caddy + backend + migrate + postgres:16),
  Caddyfile (auto-HTTPS), .env.example, pg extensions init script.
- AGENTS.md: project context + roadmap for AI agents.

Verified: image builds, both binaries run in container (smoke test).
This commit is contained in:
Tronax 2026-08-05 15:14:37 +02:00
commit 2899eb205b
Signed by: Tronax
SSH key fingerprint: SHA256:2pKKXDZucWvaF/GzXNz0FY53EAO1YDLN80bqS+TTz/o
23 changed files with 1372 additions and 0 deletions

55
.gitignore vendored Normal file
View file

@ -0,0 +1,55 @@
# === Secrets / local env ===
.env
.env.*
!.env.example
deploy/.env
*.pem
*.key
# === Go ===
backend/bin/
/backend/server
/backend/migrate
*.exe
*.exe~
*.dll
*.so
*.dylib
*.test
*.out
/backend/coverage/
# === sqlc generated (keep if committed; uncomment to ignore) ===
# backend/internal/store/sqlc/
# === IDE / OS ===
.idea/
.vscode/
*.iml
.DS_Store
Thumbs.db
# === Agent / tooling local data ===
.zcode/
# === Docker ===
deploy/data/
# === Android / Gradle ===
android/.gradle/
android/build/
android/app/build/
android/local.properties
android/captures/
android/.cxx/
*.apk
*.aab
*.ap_
*.dex
*.keystore
*.jks
keystore.properties
# === Gradle wrapper (KEEP gradlew + wrapper jar; ignore caches) ===
android/**/build/
!android/gradle/wrapper/gradle-wrapper.jar