Digitale Mitfahrbank mit Einkaufshilfe für Gemeinden — installierbare PWA und native Android-App, seniorengerechtes UI, OpenStreetMap, Push für Fahrer, Chat & Telefon.
cp .env.example .env
docker compose up db -d
cd backend && npm install && npm run dev
cd frontend && npm install && npm run devOhne OIDC: Anmelden → Demo-Login.
Für Push in der Entwicklung VAPID-Schlüssel in .env setzen (siehe unten). HTTPS ist für Push in Produktion erforderlich; lokal funktioniert localhost.
- Lidl Bornhöved — Kieler Tor 25, 24619 Bornhöved
- Plön Innenstadt — Lange Str. 9-23, 24306 Plön
- Ascheberg Edeka / Aldi — Langenrade 2, 24326 Ascheberg (Holstein)
- plus freie Eingabe über Karte und OpenStreetMap-Suche (Nominatim)
Anpassen: backend/src/destinations.ts
-
VAPID-Schlüssel erzeugen und in
.enveintragen:cd backend && node --input-type=module -e "import w from 'web-push'; console.log(w.generateVAPIDKeys())"
-
Potenzielle Fahrer: App auf den Startbildschirm installieren, im Profil Push aktivieren, Regionen und Zeiten festlegen, Benachrichtigungen erlauben.
-
Bei neuer Fahrtanfrage sendet der Server Web-Push an passende Fahrer (Filter nach Region und Uhrzeit).
Umgebungsvariablen:
VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY— SchlüsselpaarVAPID_SUBJECT— z. B.mailto:mitfahrbank@gemeinde.deWEB_PUSH_ENABLED=false— Web Push abschalten
Die Play-Store-App nutzt Firebase Cloud Messaging statt Web Push.
-
Firebase-Projekt anlegen, Android-App mit Package
de.stocksee.mitfahrbankregistrieren -
google-services.jsonaus der Firebase Console nachfrontend/android/app/google-services.jsonkopieren (Vorlage:google-services.json.example) -
Firebase Service-Account-JSON für das Backend in
.enveintragen:FCM_ENABLED=true FIREBASE_SERVICE_ACCOUNT_JSON=/pfad/zum/service-account.json -
Potenzielle Fahrer: App aus dem Play Store installieren, im Profil Push aktivieren, Benachrichtigungsberechtigung erlauben.
Der Server sendet Benachrichtigungen parallel über Web Push (PWA) und FCM (native App) — jeweils an registrierte Geräte.
- Chrome/Edge: Menü → „App installieren“ oder Banner in der App
- iOS Safari: Teilen → „Zum Home-Bildschirm“
- Icons:
frontend/public/pwa-*.png(auswappen.pnggeneriert)
Zusätzlicher Installationsweg neben der PWA — kein Ersatz für den Web-Client.
cd frontend
npm run build:android # Vite-Build + cap sync
npm run android:open # Android Studio öffnenAndroid Studio: Projekt aus frontend/android/ öffnen — nicht frontend/android/app/. Siehe frontend/android/README.md. JDK 17 oder 21 verwenden.
Die App nutzt server.hostname = mitfahren.stocksee.de und server.html5mode = false, damit OAuth-Pfade (/auth/login, /auth/callback) den Server erreichen und nicht lokal als SPA geladen werden.
Optional Live-Reload gegen den Dev-Server: in capacitor.config.ts temporär server.url setzen (Emulator: http://10.0.2.2:5173).
Voraussetzungen: Android Studio, JDK, google-services.json, Release-Keystore.
cd frontend
npm run build:android
cd android
./gradlew bundleReleaseAAB liegt unter android/app/build/outputs/bundle/release/.
Play-Store-Checkliste:
- App-Signing bei Google Play (Upload-Key + App-Signing)
- Datenschutzerklärung: https://www.stocksee.de/datenschutz/
- Data Safety Form: Auth-Daten, Standort (Karte), Push-Tokens
- Screenshots für Smartphone und Tablet
versionCode/versionNameinfrontend/android/app/build.gradlebei Updates erhöhen
App-Icons anpassen (optional):
cd frontend
npx @capacitor/assets generate --iconBackgroundColor '#1f5c2e' --splashBackgroundColor '#f6faf7'Quelle: public/pwa-512x512.png
Native iOS-App neben PWA und Android — Frontend-only gegen https://mitfahren.stocksee.de (kein lokales Backend).
cd frontend
npm install
npm run build:ios # Vite-Build + cap sync
npm run ios:open # Xcode öffnenXcode: frontend/ios/App/App.xcworkspace öffnen — siehe frontend/ios/README.md.
Voraussetzungen: Apple Developer Account, GoogleService-Info.plist (Vorlage: frontend/ios/App/App/GoogleService-Info.plist.example), APNs-Key in Firebase.
Push auf iOS nutzt Firebase Cloud Messaging (@capacitor-firebase/messaging) — FCM-Token an Prod-Backend. Nur auf echtem iPhone testbar.
- Signing in Xcode mit Developer-Team
- Datenschutzerklärung: https://www.stocksee.de/datenschutz/
MARKETING_VERSION/CURRENT_PROJECT_VERSIONin Xcode bei Updates erhöhen- TestFlight-Upload: siehe
frontend/ios/README.md
- Suchende: Kurzwahl mit Adresse oder OSM-Karte; Freitext → „OSM suchen“ → Treffer auswählen
- Fahrer: Karte zum Ziel, Link zu OpenStreetMap, Chat, Anrufen (
tel:) wenn Nummer freigegeben - Chat: WebSocket-Aktualisierung mit automatischem Reconnect; nach Abschluss der Fahrt werden Chat-Daten gelöscht
docker compose up -d --buildApp: https://mitfahren.stocksee.de
OAuth2/OIDC — siehe .env.example (OIDC_ISSUER, OIDC_CLIENT_ID, …).
| Bereich | Status |
|---|---|
| OIDC / Authentik + Dev-Login | ✓ |
| OSM-Karte (Leaflet) + Geocoding-Proxy | ✓ |
| Kurzwahl + freie Zieleingabe (OSM-Suche) | ✓ |
| Web Push für registrierte Fahrer (Region & Zeit) | ✓ |
| Native Android-App (Capacitor + FCM) | ✓ |
| Native iOS-App (Capacitor + FCM) | ✓ |
| Chat (Fahrten) + Telefon | ✓ |
| Einkaufshilfe | ✓ |
| Installierbare PWA | ✓ |