- Svelte 36.4%
- TypeScript 35.9%
- JavaScript 16.5%
- Java 9.3%
- Shell 0.9%
- Other 0.9%
Ships the month widget (
|
||
|---|---|---|
| .vscode | ||
| android | ||
| deploy | ||
| docs | ||
| releases | ||
| skills | ||
| src | ||
| static | ||
| tests/e2e | ||
| .dockerignore | ||
| .gitignore | ||
| .npmrc | ||
| AGENTS.md | ||
| capacitor.config.ts | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| GEMINI.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
Heyer Familien-App
Selbst gehostete Familien-App für Browser und Android, ohne App-Store. Alle Familiendaten sind Ende-zu-Ende-verschlüsselt.
Funktionen
- Gemeinsamer Kalender: Farbe pro Person, Personen ein- und ausblendbar, Erinnerung aufs Handy, Ferien und Feiertage aus Kalenderdateien (.ics)
- Stundenplan für die Kinder: Zeiten festlegen, Fächer zuweisen
- Routinen pro Person wie ein Stundenplan (z. B. Aufstehen, Zähne putzen, Vorlesen) mit Bildern für Kinder; einzelne Schritte erinnern beim Start aufs Handy, auf Wunsch Pause in den Ferien
- Essenplan fürs ganze Jahr mit Vorschlägen aus bisherigen Gerichten; Zutaten mit einem Tipp auf die Einkaufsliste; Rezepte samt Zutaten aus dem eigenen Mealie übernehmen
- Einkaufsliste mit Abgleich in Echtzeit
- Haushaltsplan: Aufgaben mit wechselnder Zuständigkeit und Sternen für die Kinder
- Wetter mit Kleidungsempfehlung für heute und morgen, Vorschau auf die nächsten 5 Tage
- Abfahrten an den eigenen Haltestellen (Bahn und Bus) mit Echtzeit, Verspätungen und Ausfällen
- Links zu den selbst gehosteten Familiendiensten (Musik, Kochbuch, Immich …)
- Familienkarte: Wer teilt, ist mit Bild auf der Karte zu sehen; jede Person sieht, wer sie sehen kann, und kann das Teilen pausieren
- Familienspiele zum Abwechseln, auch zeitversetzt: Tic-Tac-Toe und Vier gewinnt, Kinder ohne eigenes Gerät spielen mit
- Einfache Ansicht pro Gerät für Kinder und Großeltern: größere Schrift, nur die nächsten Termine und der Kalender
Stand
Phasen 1–5: Familie gründen, Geräte per QR-Code hinzufügen und entfernen, Personen mit Farbe und Bild, gemeinsamer Kalender (Farbe pro Person, ein- und ausblendbar, Wiederholungen, Erinnerungen solange die App offen ist), Stundenplan für die Kinder, Routinen mit Erinnerung, Haushaltsplan mit Sternen, Einkaufsliste mit Abgleich in Echtzeit, Essenplan fürs ganze Jahr, Links zu den Familiendiensten, Wetter mit UV-Index und Kleidungsempfehlung, Familienkarte (ADR 0008, 0009), installierbare Web-App, Android-App, Deployment mit Docker. Entscheidungen stehen in docs/adr. Was noch offen ist und in welcher Reihenfolge, steht in der Roadmap.
Ausprobieren
Lokal zum Entwickeln (zwei Terminals):
npm install
npm run sync # Sync-Server
npm run dev # App auf http://localhost:5173
Wie auf dem Server (App und Sync-Server in Docker, Port 8080):
docker compose up -d --build
Für Handys die App hinter dem Reverse Proxy mit HTTPS betreiben und auf
Port 8080 weiterleiten (änderbar mit APP_PORT); WebSockets für /sync
müssen erlaubt sein. Ohne HTTPS verweigern Handy-Browser Verschlüsselung
und Installation.
Rezepte aus dem eigenen Mealie übernehmen: auf dem Server
MEALIE_URL setzen, z. B. in einer .env neben docker-compose.yml
(MEALIE_URL=http://mealie:9000, wenn Mealie im selben Docker-Netz läuft,
sonst seine HTTPS-Adresse). In der App dann unter „Essen“ ganz unten einen
API-Schlüssel aus Mealie (Profil → API-Tokens) eintragen (ADR 0011).
Sicherung
Zwei voneinander unabhängige Wege:
- Server-Backup:
deploy/backup.shsichert die (verschlüsselten) Daten des Sync-Servers nachbackups/,deploy/restore.sh <Datei>spielt sie zurück. Am besten regelmäßig per Cronjob auf dem Server ausführen undbackups/ins normale Backup aufnehmen. Ohne ein Gerät der Familie ist dieses Backup nicht lesbar. - Familien-Backup in der App: Unter Familie → Sicherung lädt man alle Familiendaten als Datei herunter, verschlüsselt mit einem eigenen Passwort. Diese Datei lässt sich auch in eine neu gegründete Familie einspielen, etwa wenn alle Geräte verloren sind. Beim Einspielen wird nur ergänzt, nichts überschrieben.
Handy verloren?
- Ein normales Gerät entfernt man von einem verwaltenden Gerät aus unter Familie → „Entfernen“.
- Ein Gerät, das die Familie verwaltet, kann Jazz nicht von außen entfernen. Dann unter Familie → „Handy verloren? Familie umziehen“ das verlorene Gerät abwählen. Alle Daten wandern in eine neue Familie, die anderen Geräte tippen beim nächsten Öffnen auf „Mitkommen“, das verlorene sieht nichts Neues mehr. Dafür braucht es ein zweites verwaltendes Gerät („Darf verwalten“), die App erinnert daran.
Android-App
Die App ist eine Hülle um die Live-Seite (ADR 0005). Ab Version 1.1.0 gleicht sie alle 2 Stunden im Hintergrund ab, damit Erinnerungen auch für Termine kommen, die andere Geräte angelegt haben (ADR 0006). Ab Version 1.2.0 sendet sie, wenn die Person ihren Standort teilt und „Immer erlauben“ gewährt hat, alle 15 Minuten den Standort für die Familienkarte (ADR 0008). Verbesserungen kommen deshalb meist ohne neue APK aufs Handy. Gebaut wird in Docker, auf dem Rechner muss nichts installiert werden.
Einmalig den Signaturschlüssel anlegen und den Ordner ~/.heyer-app
sichern (Passwortmanager oder Backup). Ohne ihn lassen sich keine
Updates mehr installieren:
npm run android:keystore
Neue Version bauen und verteilen:
npm run android:release # Version +1, bauen, signieren -> releases/
git add releases android && git commit && git push
# auf dem Server: git pull && docker compose up -d --build
Die Familie installiert die App über /installieren. Ab Version 1.1.0
meldet die App neue Versionen selbst (auf der Startseite und als
Benachrichtigung) und installiert sie mit einem Tipp auf „Jetzt
aktualisieren“ (ADR 0007). Alternativ geht Obtainium mit der Quelle
https://<domain>/download/. Die Adresse der App
und die Version stehen in android/release.properties.
Agent-Skills
Die Skills für KI-Coding-Agents liegen in skills/.