Skip to content

About

Shared offline-first shopping list for Android (Flutter) with a self-hosted PocketBase backend – no Google, F-Droid ready

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

13 Commits

Folders and files

Repository files navigation

ShopBandit

ShopBandit

Gemeinsame Einkaufsliste für Android – offline-first, ohne Google, mit eigenem Server.
Shared shopping list for Android – offline-first, Google-free, self-hosted backend.

Deutsch · English


Deutsch

Funktionen

  • Eine Liste pro Haushalt: Artikel + optionale Menge („2“, „500 g“), abhaken = gekauft (mit „Rückgängig“), wischen = löschen, antippen = Menge ändern. Man sieht dezent, wer etwas hinzugefügt hat.
  • Offline-first: Alles landet sofort in der lokalen Datenbank und wird synchronisiert, sobald eine Verbindung besteht. Live-Updates, solange die App offen ist.
  • Artikelkatalog & „Häufig gekauft“: Autovervollständigung, Vorschläge nach Häufigkeit (jüngere Käufe zählen mehr).
  • Haushalt / Familie: Einladung per QR-Code (24 h gültig, einmalig, widerrufbar), Mitglieder entfernen, Haushalt verlassen.
  • Benachrichtigungen ohne Google: UnifiedPush über einen eigenen ntfy-Server; ohne Push-App prüft die App etwa alle 15 Minuten.
  • Datenschutz: Kein Firebase, keine Tracker, keine Google-Play-Dienste. Der Server gehört dir.
  • Deutsch und Englisch, heller und dunkler Modus.

Screenshots

Folgen. (fastlane/metadata/android/*/images/phoneScreenshots/)

App installieren

  • GitHub-Releases: signierte APKs (pro ABI + universell) unter Releases.
  • F-Droid: in Vorbereitung.

Quellcode auch auf GitLab (Spiegel): https://gitlab.com/CrashBandit82/shopbandit

Beim ersten Start fragt die App nach der Server-Adresse (Standard: https://shop.macrobandit.at). Du kannst jeden eigenen ShopBandit-Server eintragen.

Sofortige Benachrichtigungen: ntfy aus F-Droid installieren, in ntfy den eigenen Server als Standard-Server eintragen (z. B. https://push.example.com), dann in ShopBandit unter Einstellungen → Benachrichtigungen einschalten.

Server betreiben

Kurzfassung (Details: docs/SERVER.md):

git clone https://github.com/CrashBandit82/shopbandit && cd shopbandit/server
cp .env.example .env        # Domain, SMTP, Push-Hosts eintragen
docker compose up -d
docker compose exec pocketbase /pb/pocketbase superuser upsert admin@example.com 'EinLangesPasswort!1' --dir=/pb/pb_data
  • Läuft auf einem Proxmox-Host als Docker in einem LXC (nesting=1, keyctl=1) oder in einer Docker-VM. Ohne Docker: server/deploy/*.service (systemd, siehe SERVER.md).
  • Reverse Proxy mit HTTPS davor (Caddy oder Nginx Proxy Manager). Wichtig: Buffering für SSE abschalten (PocketBase-Realtime) und lange Timeouts für ntfy.
  • Updates: docker compose pull && docker compose up -d
  • Backups: server/scripts/backup.sh (konsistenter SQLite-Snapshot mit Rotation), Restore-Anleitung in SERVER.md.

App bauen

cd app
../tools/fetch-sqlite.sh        # SQLite-Quellcode (wird mitkompiliert)
flutter pub get
dart run build_runner build -d   # Drift-Code
flutter test
flutter build apk --release --split-per-abi

Flutter 3.47.7 (stable). Release-Signatur über android/key.properties oder Umgebungsvariablen, siehe docs/RELEASE.md.

Lizenz

GPL-3.0 © CrashBandit82


English

Features

  • One list per household: item + optional quantity, check off = bought (with undo), swipe = delete, tap = edit quantity, subtle "added by".
  • Offline-first: local database first, synced when online; live updates while the app is open.
  • Item catalog & "Frequently bought": autocomplete and suggestions weighted towards recent purchases.
  • Household / family: invite via QR code (24 h, single use, revocable), remove members, leave.
  • Notifications without Google: UnifiedPush via your own ntfy server; without a distributor app the app checks about every 15 minutes.
  • Privacy: no Firebase, no trackers, no Google Play Services. You own the server.
  • German and English, light and dark mode.

Install

Signed APKs on GitHub Releases; F-Droid in preparation. On first start, enter your server address (default https://shop.macrobandit.at).

For instant notifications install ntfy from F-Droid, set your own server as its default server, then enable notifications in ShopBandit's settings.

Run a server

git clone https://github.com/CrashBandit82/shopbandit && cd shopbandit/server
cp .env.example .env
docker compose up -d
docker compose exec pocketbase /pb/pocketbase superuser upsert admin@example.com 'ALongPassword!1' --dir=/pb/pb_data

Put a reverse proxy with HTTPS in front (Caddy / Nginx Proxy Manager) and disable buffering for SSE. Updates: docker compose pull && docker compose up -d. Backups: server/scripts/backup.sh. Details, Proxmox notes and proxy examples: docs/SERVER.md.

Build

See the German section above (flutter pub get, dart run build_runner build -d, flutter build apk). Release signing: docs/RELEASE.md.

License

GPL-3.0 © CrashBandit82

About

Shared offline-first shopping list for Android (Flutter) with a self-hosted PocketBase backend – no Google, F-Droid ready

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages