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

49
README.md Normal file
View file

@ -0,0 +1,49 @@
# Mitbringsl
Eine **Local-First Einkaufslisten-App** eine schlanke, werbefreie Bring-Alternative.
Android-App (Kotlin + Jetpack Compose) mit eigenem **Go-Backend** (PostgreSQL, Docker),
OIDC-Login (Google + Generic) und verlustfreiem Sync.
> Status: **Work in Progress / MVP**.
## Was das Projekt kann (Ziel)
- 📝 Einkaufslisten anlegen, Items verwalten, an-/abhaken
- 🔄 **Local-First**: voll funktionsfähig offline, automatischer Sync ohne Datenverluste
(Append-only Operations-Log + Hybrid Logical Clocks + Tombstones)
- 👤 Anmeldung mit **eigenen Usern** (E-Mail/Passwort, Argon2id) **oder** **OIDC**
(Google + beliebiger Generic-OIDC-Provider wie Keycloak/Authentik)
- 🔍 **Autocomplete** beim Tippen Vorschläge aus den aggregierten Item-Namen aller User
- 🚫 **Keine Werbung** cleanes Material-3-Design
- 🐳 **Self-hosted** als Docker-Container, automatisches HTTPS via Caddy
## Repository-Aufbau
```
mitbringsl/
├── backend/ # Go-API (net/http, pgx, sqlc, golang-migrate, go-oidc)
├── android/ # Android-App (Kotlin, Jetpack Compose, Room, Hilt, WorkManager)
├── deploy/ # docker-compose.yml, Caddyfile, .env.example
└── docs/ # Architektur-, Sync- und API-Doku
```
## Schnellstart
### Backend (Docker)
```bash
cd deploy
cp .env.example .env # Werte anpassen (v.a. Secrets/URLs)
docker compose up -d --build
# API unter https://<deine-domain> (oder http://localhost:8080 ohne Caddy)
```
### App bauen
Siehe [`android/README.md`](android/README.md) (folgt).
Detaillierte Doku:
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) Aufbau, Auth-Flows
- [`docs/SYNC.md`](docs/SYNC.md) Sync-Modell & Konfliktlösung
- [`docs/API.md`](docs/API.md) REST-Endpoints
## Lizenz
Privatprojekt alle Rechte vorbehalten.