# Mitbringsl ๐Ÿ›’ > **Local-First Einkaufslisten-App (Bring-Alternative, werbefrei & datensparsam).** 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. --- ## ๐ŸŒŸ Highlights & Features - ๐Ÿ“ฑ **Android App**: Kotlin 2.x, Jetpack Compose Material 3, Room, Hilt, WorkManager. - ๐Ÿ”Œ **Local-Only by Default**: Kein Account nรถtig โ€” die App startet direkt ohne Login; Sync & Account sind optional (auch Self-Hosted, Server-URL in der App konfigurierbar). - ๐Ÿ‘ฅ **Geteilte Listen**: Listen per 8-Zeichen-Invite-Code teilen und gemeinsam bearbeiten; Membership wird serverseitig bei jedem Sync geprรผft. - ๐ŸŽจ **Produkt-Icons (Bring-Style)**: Jeder Artikel bekommt automatisch ein passendes Emoji mit Kategorie-Farbe โ€“ Milch ๐Ÿฅ›, Brot ๐Ÿž, ร„pfel ๐ŸŽ โ€ฆ auch im Autocomplete und live beim Tippen. Komplett offline รผber ein deutsches Wรถrterbuch, kein Tracking. - โšก **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 wie Authentik/Keycloak) โ€” Login-Methoden werden serverseitig per `/api/config` entdeckt, Passwort-Login lรคsst sich per `AUTH_PASSWORD_ENABLED=false` komplett abschalten. - โš™๏ธ **Settings & Themes**: Account-/Profil-Verwaltung (`/api/me`), Theme-Umschalter (System/Hell/Dunkel), lokaler Daten-Reset โ€” alles direkt in der App. - ๐Ÿš€ **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 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 ``` --- ## ๐Ÿš€ Quickstart: Backend & Stack lokal starten ### 1. Backend lokal bauen & testen ```bash cd backend go build ./... go vet ./... go test ./... ``` Integrationstests (Invite/Join/Membership, E2E รผber HTTP) laufen gegen eine wegwerfbare PostgreSQL-Instanz: ```bash docker run -d --name mitbringsl-test-pg -e POSTGRES_USER=app \ -e POSTGRES_PASSWORD=testpw -e POSTGRES_DB=appdb -p 55432:5432 postgres:16-alpine cd backend TEST_DATABASE_URL="postgres://app:testpw@localhost:55432/appdb?sslmode=disable" go test ./... docker rm -f mitbringsl-test-pg ``` ### 2. Stack per Docker Compose starten ```bash cd deploy cp .env.example .env # Passwรถrter in .env anpassen docker compose up -d --build ``` --- ## ๐Ÿ“ฑ Android App bauen ```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