Phase F: NetworkMonitor, offline banner, README & architecture docs

- NetworkMonitor: ConnectivityState Flow using ConnectivityManager.NetworkCallback
- ListsScreen & ViewModel: live offline indicator banner when disconnected
- Documentation:
  - docs/ARCHITECTURE.md: system design & tech stack overview
  - docs/SYNC.md: HLC timestamping, op_log outbox & LWW projection specification
  - docs/API.md: REST API endpoint specification
  - README.md: quickstart guide for backend, docker compose & Android app
- Verification: backend & android test suites 100% green 
This commit is contained in:
Tronax 2026-08-05 20:14:04 +02:00
parent 174aad535a
commit a00db14cba
Signed by: Tronax
SSH key fingerprint: SHA256:2pKKXDZucWvaF/GzXNz0FY53EAO1YDLN80bqS+TTz/o
8 changed files with 482 additions and 96 deletions

View file

@ -1,49 +1,83 @@
# Mitbringsl
# 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.
> **Local-First Einkaufslisten-App (Bring-Alternative, werbefrei & datensparsam).**
> Status: **Work in Progress / MVP**.
Mitbringsl ist eine moderne, schnelle und werbefreie Einkaufslisten-App mit **Local-First Synchronization**. Die App funktioniert vollständig offline und synchronisiert Änderungen automatisch, sobald eine Verbindung besteht — ohne Datenverlust oder Konflikte.
## 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
## 🌟 Highlights & Features
## Repository-Aufbau
- 📱 **Android App**: Kotlin 2.x, Jetpack Compose Material 3, Room, Hilt, WorkManager.
- ⚡ **Local-First Sync Engine**: Hybrid Logical Clock (HLC), append-only `op_log`, Last-Write-Wins (LWW) Projektionen, Idempotente Push/Pull-Algorithmen.
- 🔐 **Datenschutz & Auth**: Argon2id Passwort-Hashing, opaque Session-Tokens, OIDC-Unterstützung (Google & eigene IdPs).
- 🚀 **Go Backend**: Stdlib `net/http` Routing (Go 1.26), PostgreSQL 16 (`pgxpool`), `pg_trgm` Fuzzy Autocomplete.
- 🛡️ **Deployment**: Multi-Stage Docker Container, Caddy Reverse Proxy mit automatischem HTTPS / Standalone & Behind-Proxy Modi.
---
## 🏗️ Repository-Struktur
```
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
├── backend/ # Go REST API Backend
│ ├── cmd/ # Server & Migrate Binaries
│ ├── internal/ # Auth, Sync (HLC), Store (pgx), HTTP API
│ ├── migrations/ # SQL Migrationen (iofs-embedded)
│ └── Dockerfile # Multi-Stage Build (golang:1.26 -> distroless)
├── android/ # Android Kotlin + Compose App
│ ├── app/src/ # Room DB, Retrofit API, WorkManager, Hilt, Compose UI
│ └── build.gradle.kts
├── deploy/ # Docker Compose & Caddy Setup
│ ├── docker-compose.yml
│ ├── Caddyfile / Caddyfile.behind-proxy
│ └── .env.example
└── docs/ # Architektur- & Protokoll-Dokumentation
├── ARCHITECTURE.md # Gesamtarchitektur & Systemdesign
├── SYNC.md # Sync-Protokoll & HLC-Spezifikation
└── API.md # REST API Dokumentation
```
## Schnellstart
---
### Backend (Docker)
## 🚀 Quickstart: Backend & Stack lokal starten
### 1. Backend lokal bauen & testen
```bash
cd backend
go build ./...
go vet ./...
go test ./...
```
### 2. Stack per Docker Compose starten
```bash
cd deploy
cp .env.example .env # Werte anpassen (v.a. Secrets/URLs)
cp .env.example .env
# Passwörter in .env anpassen
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
## 📱 Android App bauen
## Lizenz
Privatprojekt alle Rechte vorbehalten.
```bash
cd android
./gradlew assembleDebug
./gradlew test
```
---
## 📖 Dokumentation
- [ARCHITECTURE.md](docs/ARCHITECTURE.md) Architektur & Systemdesign
- [SYNC.md](docs/SYNC.md) Synchronisationsprotokoll & HLC-Spezifikation
- [API.md](docs/API.md) REST API Endpoint-Referenz
- [AGENTS.md](AGENTS.md) Projektstand & Architekturentscheidungen für KI-Agenten
---
## 📄 Lizenz
MIT License