LX-Family-Planner

LX-Family-Planner

Docker app from UnraidUser-0436170630's Repository

Overview

Private self-hosted family planner with calendars, tasks, shopping, meals, chat, Android notifications, Family Cloud and dedicated child and pet profiles.

LX Family Planner – der selbst gehostete Familienplaner

Live-Demo öffnen Android-App herunterladen Installation starten

Qualitätsprüfung Version 1.13.1 Node.js 22+ Docker Android MIT-Lizenz

Ein privates Family OS für Kalender, Aufgaben, Essen, Einkauf, Chat, Cloud und Kinderabenteuer.
Läuft auf eurem Server. Gehört eurer Familie.

Ausprobieren – ohne Installation

[!TIP] Live-Demo öffnen
Familie: Demo · Passwort: demo
Wähle danach Doris für die Erwachsenenansicht oder Jeremy Pascal für die Kinderwelt. Die öffentliche Demo ist ein gemeinsamer, schreibgeschützter Schauraum – bitte keine persönlichen Daten eingeben.

Warum LX Family?

Alles an einem Ort Kinder machen wirklich mit Eure Daten bleiben eure
Kalender, Aufgaben, Einkauf, Essen, Chat, Dateien und Erinnerungen greifen ineinander. Eigene Welten, Missionen, Sterne, Routinen, Sparziele und ein Belohnungsshop statt Erwachsenen-UI in klein. Self-hosted mit SQLite, Docker, sicheren Backups und optionaler Nextcloud – ohne Werbetracking.

Ein Blick in die App

Erwachsenen-Dashboard der Demo-Familie

Profilauswahl für die ganze Familie Eigene Kinderwelt
Bubble-Profilauswahl der Demo-Familie Kinderprofil im Helden-Theme

Tablet Mode im Querformat

Jede Rolle bekommt ihren eigenen Raum

Kinderreise mit Routinen, Schule und Abzeichen Haustierprofil ohne unnötige Kontofunktionen
Kinderreise mit Wochenblick und Abzeichen Haustierprofil mit Versorgung und Pfotenkalender

Familienalltag, Dateien und Verwaltung

Gemeinsamer Kalender Family Cloud direkt in LX
Familienkalender mit Profilfiltern und Erinnerungen Integriertes Familienarchiv mit Ordnern und Upload
Aufgaben mit Freigabe und Sternen Elternzentrale
Aufgabenübersicht für die Familienprofile Elternzentrale für Profile, Aufgaben, Punkte und Dienste

Familienbriefkasten für verbundene Familien

Noch mehr ansehen: Mobile Ansicht, Chat und weitere Themenwelten
Mobiler Familienchat Raketenwelt
Familienchat auf einem Smartphone Kinderprofil im Raketen-Theme
Waldruhe Backstage
Erwachsenen-Dashboard im Theme Waldruhe Erwachsenen-Dashboard im Theme Backstage

In 5 Minuten startklar

git clone https://github.com/laxxx-lab/lx-family-planner.git
cd lx-family-planner
cp .env.example .env
sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 32)/" .env
docker compose up -d --build

Danach http://SERVER-IP:3001 öffnen, Familie anlegen und losplanen. Unter Windows erledigt Start-Familienplaner.cmd dieselben Schritte bequem per Doppelklick. Für Proxmox gibt es weiter unten einen eigenen LXC-Helper.

Das ist enthalten

  • Familienkonten mit Profilen für Mama, Papa, Kind, Oma, Opa und weitere Rollen
  • beliebig viele verwaltete Organisationsprofile ohne eigene Anmeldung, etwa für Oma, Opa oder betreute Personen; mit Kalender und Aufgaben, aber ohne Chat, Punkte oder Profilwechsel
  • kinderleichte Bubble-Profilauswahl und optionaler Profil-PIN
  • Kalender mit mehreren Erinnerungen pro Termin, Müllkalender, ICS-Dateiimport und automatisch aktualisierte Kalender-Abos
  • gemeinsamer Familienchat, geschützte Direktnachrichten, bewusst eingeladene Chatgäste und Cloud-Anhänge für Fotos, Videos, Audio, Dokumente, ZIP-Dateien und APKs bis 100 MB
  • Einkaufslisten mit großem, alltagstauglichem Produktkatalog und Bring!-Anbindung
  • Wochen-Speiseplan, Rezeptbuch, direkter Android-Teilen-Import, sicherer Web- und Pinterest-Import und Kochmodus
  • Aufgaben, Sterne und Belohnungsshop
  • Familienreise mit Morgen-/Abendroutinen, Wochenrückblick, Abzeichen, Mutmachern und gemeinsamen Missionen
  • geschütztes Taschengeldbuch mit Sparzielen und optionaler Sterne-zu-Taschengeld-Umwandlung
  • Schulbereich mit Stundenplan, Hausaufgaben, Klassenarbeiten und Schulranzen-Checkliste
  • Familien-Abstimmungen mit einer Stimme pro Profil
  • faire Aufgabenrotation: wiederkehrende Pflichten wechseln automatisch zwischen ausgewählten Familienmitgliedern
  • Vier-Augen-Prinzip: Kinder melden eine Aufgabe als erledigt, der Ersteller bestätigt sie und erst danach werden Sterne gutgeschrieben
  • Pinnwand, detailliertes Familiennetz und Stammbaum zwischen angemeldeten Familien
  • privater Familienbriefkasten für längere Absprachen zwischen bestätigten Familienverbindungen
  • einzeln bestätigte Familienfreigaben für gemeinsame Termine, Aufgaben, Sterne, Belohnungen und Taschengeld der Enkelkinder
  • native Home-Assistant-Kacheln mit Live-Status, sicheren Aktionen, Profilfreigaben und großer Tablet-Ansicht
  • optionale Family Cloud mit Nextcloud, gemeinsamen und persönlichen Profilordnern, Ordnerwahl vor Uploads, integrierter Dateiübersicht, Drag-and-drop-Upload, Zwei-Wege-Kalenderabgleich und verschlüsselten Sicherungen
  • Elternzentrale für Profile, Aufgaben, Punktestände und Geräte sowie freigegebene YouTube-/Spotify-Widgets mit echten Medien-Covern
  • eigene Kinderoberfläche mit Raketen-, Einhorn-, Feen-, Dino-, Sonnen- und Heldenwelt
  • Erwachsenen-Themes von Waldruhe und Küstenruhe bis Backstage und Neon Nacht
  • echte profilgebundene Android-App-Benachrichtigungen, Browser-Push und optionale Gotify-Anbindung
  • einstellbare Benachrichtigungsruhe und Medienzeiten für Kinderprofile
  • schnell erreichbare Notfallkarte mit elterngeschützter Bearbeitung
  • dauerhaftes, profilgetrenntes Meldungszentrum mit gelesen/ungelesen
  • Familien-Posteingang mit persönlichem Tagesüberblick für Termine, Aufgaben, Essen und Einkauf
  • wiederkehrende Aufgaben für täglich, werktags, wöchentlich und monatlich
  • frei anpassbare Dashboard-Kacheln pro Profil und Gerät mit eigener Tablet-Anordnung, Sichtbarkeit und kompakter Ansicht
  • eigenständiger Tablet Mode mit acht Kacheln für das Querformat
  • responsive Darstellung für PC, Tablet und Smartphone
  • globaler „Problem melden“-Knopf mit lokaler Verwaltung in der Elternzentrale
  • sichtbare Produktversion in den Familieneinstellungen und im Systemstatus

Profile ohne eigenen Zugang

Erwachsene können in der Profilverwaltung bei einem neuen Profil Nur von uns verwaltet auswählen. Das Profil bleibt anschließend aus der Anmeldung und dem Profilwechsel ausgeblendet. Im Kalender, in der Aufgabenplanung und in der Elternzentrale kann es trotzdem wie jede andere Person ausgewählt werden.

Diese Profile sind für reine Organisation gedacht. Sie erhalten keinen Chat, keine eigenen Push-Geräte, keine Kinderpunkte und keinen eigenen Zugang zum Familienplaner. Terminerinnerungen für ein verwaltetes Profil gehen automatisch an die zuständigen Erwachsenen.

Familienkonten sicher miteinander verbinden

Großeltern mit einem eigenen Familienkonto werden über Euer Familiennetz eingeladen. Nach der gegenseitigen Bestätigung legt jede Familie selbst fest, was die andere Seite darf:

  • Einladungen zu gemeinsam sichtbaren Terminen
  • Aufgaben für Kinder und Teenager
  • Sternpunkte und eigene Belohnungen
  • Taschengeldbuchungen

Private Kalendertermine, Direktnachrichten, Pinnwandbilder und Zugangsdaten werden dabei nicht geteilt. Aufgaben eines verbundenen Großelternkontos müssen weiterhin von einem Erwachsenen im Familienkonto des Kindes bestätigt werden.

Bestätigte Familien können sich außerdem unter Familienpost private Briefe senden und beantworten. Ein Brief ist nur für die Erwachsenenprofile der beiden beteiligten Familien sichtbar.

Für den Gruppenchat lässt sich ein einzelnes Erwachsenenprofil gezielt einladen, zum Beispiel Oma oder Opa. Das Zielprofil muss die Einladung selbst annehmen. Es sieht erst danach neue Gruppennachrichten der einladenden Familie; frühere Verläufe und sämtliche Direktnachrichten bleiben verborgen. Die einladende Familie kann den Zugang jederzeit wieder beenden.

Home Assistant

Home Assistant wird in der Elternzentrale verbunden. Benötigt werden die interne Adresse der Home-Assistant-Instanz und ein langlebiger Zugriffsschlüssel aus dem Home-Assistant-Profil. Danach werden nur die ausdrücklich ausgewählten Geräte und Sensoren als Dashboard-Kacheln angezeigt.

Eltern können pro Entität festlegen:

  • nur anzeigen oder auch bedienen,
  • welche Kinderprofile die Kachel sehen dürfen,
  • ob die Integration vorübergehend aktiv ist.

Türschlösser und Alarmanlagen werden nicht freigegeben. Garagentore und Einfahrten bleiben Erwachsenen vorbehalten und verlangen eine zusätzliche Bestätigung. Der Zugriffsschlüssel wird verschlüsselt im Backend gespeichert und niemals an den Browser ausgeliefert.

Bei Docker sollte als Adresse vorzugsweise die feste Heimnetz-IP verwendet werden, zum Beispiel:

http://192.168.178.50:8123

Eine .local-Adresse funktioniert abhängig vom Docker- und Netzwerksystem nicht immer zuverlässig.

Family Cloud mit Nextcloud

Nextcloud wird über den eigenen Hauptmenüpunkt Family Cloud verbunden. Dieser Bereich ist ausschließlich für Erwachsenenprofile sichtbar. LX Family bleibt dabei die führende Stelle für Profile, Kinderfreigaben, Aufgabenpunkte und Belohnungen. Nextcloud übernimmt:

  • einen frei wählbaren Kalender mit automatischem Abgleich in beide Richtungen,
  • einen gemeinsamen Ordner für die Familie,
  • tägliche und manuelle, verschlüsselte Familien-Backups.

Termine werden nicht nur kopiert. Änderungen und Löschungen werden dauerhaft zugeordnet. Wenn derselbe Termin zwischen zwei Abgleichen in beiden Systemen geändert wurde, gewinnt die lokale Fassung und LX legt zusätzlich eine klar markierte Nextcloud-Konfliktkopie ab. Dadurch geht keine Fassung unbemerkt verloren.

Aufgaben und Kinderpunkte bleiben bewusst in LX Family: Ein in Nextcloud abgehakter Task darf das Vier-Augen-Prinzip für Kinder nicht umgehen.

Nextcloud zusammen mit Docker starten

Unter Windows genügt nach dem normalen LX-Start ein Doppelklick auf:

Nextcloud-Aktivieren.cmd

Unter Linux:

./scripts/nextcloud-enable.sh

In einer Installation über den Proxmox-Helper:

lx-family nextcloud

Mit bereits eingerichteter Cloudflare- oder Reverse-Proxy-Adresse kann die öffentliche Domain direkt mitgegeben werden:

lx-family nextcloud https://cloud.example.de

Das Hilfsskript:

  1. aktiviert das optionale Docker-Profil nextcloud,
  2. erzeugt getrennte, zufällige Kennwörter für Nextcloud, MariaDB und Redis,
  3. ergänzt Servername und Heimnetz-IP als vertrauenswürdige Adressen,
  4. startet Nextcloud samt Datenbank, Redis und Cron-Dienst,
  5. wartet auf die vollständige Einrichtung und ergänzt nach Möglichkeit die offizielle Nextcloud-Kalenderoberfläche.

Der erste Start kann zwei bis fünf Minuten dauern. Standardmäßig ist Nextcloud anschließend unter http://IP-DES-SERVERS:8080 erreichbar. Benutzer und einmaliges Startpasswort zeigt das Hilfsskript an; beides steht zusätzlich in der lokalen, von Git ausgeschlossenen .env.

Danach richtet LX alle bereits vorhandenen Familien automatisch ein. Neue Familien erhalten ihren Cloud-Bereich direkt nach der Registrierung. Der Knopf Family Cloud automatisch einrichten bleibt als manuelle Reparatur- und Neueinrichtungsoption sichtbar. LX erstellt serverseitig:

  • einen eigenen, getrennten Nextcloud-Benutzer für diese Familie,
  • ein zufälliges Kennwort und ein widerrufbares App-Passwort,
  • standardmäßig 10 GB Speicherplatz,
  • einen Familienkalender sowie die Bereiche Familie, Familie/Uploads, Familie/Chat und einen persönlichen Ordner unter Profile für jedes echte Nutzerprofil,
  • den ersten sicheren Zwei-Wege-Abgleich.

Die Trennung erfolgt absichtlich pro Familie und nicht pro Profil: Mama, Papa und freigegebene Familienprofile arbeiten in LX mit demselben Familienarchiv. Kinder oder verwaltete Organisationsprofile benötigen deshalb kein eigenes Nextcloud-Passwort. Eine in LX ausdrücklich getrennte Cloud wird bei späteren Neustarts nicht automatisch wieder verbunden.

Sobald die Verbindung steht, erscheint im selben Bereich das Familienarchiv. Erwachsene können dort direkt in LX:

  • Ordner öffnen und neu anlegen,
  • Bilder, PDF- und Textdateien ansehen,
  • mehrere Dateien auswählen oder vom PC in die Fläche ziehen; vor einem Dashboard-Upload wird der Zielordner gewählt und kann direkt neu angelegt werden,
  • Dateien herunterladen oder nach einer zweiten Bestätigung löschen.

Uploads sind auf 100 MB pro Datei und 20 Dateien je Durchlauf begrenzt. Im Stammverzeichnis legt LX bewusst keine losen Dateien ab. Neue Chat-Anhänge landen automatisch unter Familie/Chat/Jahr-Monat; Bilder, Videos, Audio, PDF-/Office-Dokumente, Archive und APKs bleiben dort als Originaldateien erhalten, während der Chat nur den geschützten Verweis speichert. Der Inhalt von Direktnachrichten wird zusätzlich vor dem Cloud-Upload verschlüsselt und ist ausschließlich für die beiden Chatprofile über LX lesbar. Der Browser erhält kein Nextcloud-App-Passwort: Alle Dateizugriffe laufen durch die angemeldete LX-Sitzung und das Backend. Belegter und verfügbarer Speicher werden direkt im Familienarchiv angezeigt.

Das Administratorkonto wird nicht als Familienkonto verwendet. Auch mehrere Familien auf demselben Portal erhalten dadurch getrennte Cloud-Bereiche. Das zufällige Web-Kennwort und das App-Passwort liegen mit APP_SECRET verschlüsselt in SQLite. Erwachsene können den Web-Zugang bei Bedarf unter Verbindung verwalten → Cloud-Zugang anzeigen gezielt laden und kopieren; die Antwort wird nicht im Browser-Cache gespeichert.

Für eine bereits vorhandene Nextcloud bleibt die manuelle Verbindung erhalten. Im Nextcloud-Profil unter Persönliche Einstellungen → Sicherheit dafür ein neues App-Passwort nur für LX Family erzeugen:

Feld Mitgelieferte Docker-Cloud Vorhandene Nextcloud
Adresse für LX Family automatisch http://nextcloud vom LX-Server erreichbare URL
Adresse für Browser http://SERVER-IP:8080 öffentliche oder Heimnetz-URL
Benutzer automatisch pro Familie Nextcloud-Benutzer
App-Passwort automatisch erzeugt neu erzeugtes App-Passwort

Die interne Adresse wird nur vom Backend verwendet. Zugangsdaten gelangen nicht an den Browser und werden mit APP_SECRET verschlüsselt in SQLite gespeichert.

Die Browser-Adresse wird bei öffentlichen Planer-Domains nicht durch Anhängen von :8080 erraten. familie.example.de:8080 wäre nur dann gültig, wenn genau dieser Port öffentlich weitergeleitet wurde. Maßgeblich ist NEXTCLOUD_PUBLIC_URL:

# nur im Heimnetz
NEXTCLOUD_PUBLIC_URL=http://192.168.178.50:8080

# nach Einrichtung einer eigenen HTTPS-Proxy-Route
NEXTCLOUD_PUBLIC_URL=https://cloud.example.de

Für öffentlichen Zugriff empfiehlt sich eine eigene Subdomain, die im Reverse-Proxy oder Cloudflare Tunnel auf den internen Nextcloud-Dienst http://SERVER-IP:8080 zeigt. Erst nachdem diese Route wirklich antwortet, wird NEXTCLOUD_PUBLIC_URL auf die HTTPS-Adresse umgestellt.

Für eine bereits laufende Docker-/PVE-Installation übernimmt das folgende Kommando alle erforderlichen Nextcloud-Einstellungen:

cd /opt/docker/lx-family-planner
bash scripts/nextcloud-public-url.sh https://cloud.example.de

Es ergänzt die Domain dauerhaft in .env und Nextclouds trusted_domains, setzt die öffentliche Link-Adresse sowie HTTPS und lädt LX Family mit der neuen Browser-Adresse neu. Der Befehl ist wiederholbar und entfernt keine bestehenden Vertrauensadressen.

Daten und Updates

Die Nextcloud-Daten liegen in den drei unabhängigen Docker-Volumes nextcloud-html, nextcloud-db und nextcloud-redis. Normale LX-Updates erstellen oder entfernen diese Volumes nicht. Auch docker compose down behält sie. Nicht docker compose down -v verwenden, weil -v die Nextcloud-Volumes ausdrücklich löscht.

Die .env und insbesondere APP_SECRET müssen zusammen mit den normalen Serversicherungen aufbewahrt werden. Ohne denselben APP_SECRET können die verschlüsselten LX-Family-Archive und Integrationstokens nach einer Neuinstallation nicht entschlüsselt werden.

Eine bereits vorhandene Nextcloud muss nicht im LX-Docker-Stack laufen. Lokale Heimnetz-Adressen sind für diese ausdrücklich eingerichtete Integration erlaubt; Link-Local-, Multicast- und Geräte-Metadaten-Adressen bleiben serverseitig gesperrt. Für Zugriff außerhalb des Heimnetzes werden HTTPS und ein sauber konfigurierter Reverse Proxy empfohlen.

Weg 1: Mit Docker starten (empfohlen)

Einfach unter Windows

Voraussetzung ist eine laufende Installation von Docker Desktop. Danach genügt ein Doppelklick auf:

Start-Familienplaner.cmd

Das Startskript:

  1. erzeugt beim ersten Start eine lokale .env mit sicherem Anwendungsschlüssel,
  2. übernimmt einen vorhandenen Altbestand nach data/,
  3. baut den Produktions-Container,
  4. startet ihn auf Port 3001.

Auf dem Server-PC ist die App anschließend unter http://localhost:3001 erreichbar. Andere Geräte im selben Heimnetz öffnen:

http://IP-DES-SERVERS:3001

Beispiel:

http://192.168.178.40:3001

Falls Windows Verbindungen aus dem Heimnetz blockiert, kann Heimnetz-Freigabe.cmd einmal als Administrator ausgeführt werden. Das Skript erlaubt Port 3001 nur in privaten Netzwerken. Eine Portfreigabe am Router ist für den reinen Heimnetzbetrieb nicht nötig und wird nicht empfohlen.

Weitere Helfer:

  • Update-Familienplaner.cmd lädt Updates, prüft sie auf einer Kopie der Datenbank und spielt sie mit automatischer Rückfallmöglichkeit ein.
  • Stop-Familienplaner.cmd beendet die App, ohne Daten zu löschen.
  • Backup-Familienplaner.cmd erzeugt eine konsistente SQLite-Sicherung.
  • Ein erneuter Start baut geänderten Programmcode automatisch neu.

Docker manuell

Copy-Item .env.example .env

Danach in .env mindestens APP_SECRET durch einen langen, zufälligen Wert ersetzen und starten:

docker compose up -d --build

Status und Protokoll:

docker compose ps
docker compose logs -f family-planner

Stoppen:

docker compose down

Die aktiven Daten liegen in data/, Sicherungen in backups/. Beide Ordner werden absichtlich nicht in Git aufgenommen.

Fertiges Docker-Image verwenden

Für Server, NAS-Systeme und App-Stores wird jede veröffentlichte Version zusätzlich als fertiges Image für AMD64 und ARM64 bereitgestellt:

ghcr.io/laxxx-lab/lx-family-planner:latest

Damit muss LX auf dem Zielserver nicht mehr aus dem Quellcode gebaut werden:

mkdir -p lx-family-planner && cd lx-family-planner
curl -fsSLo compose.yaml https://github.com/laxxx-lab/lx-family-planner/releases/latest/download/compose.yaml
curl -fsSLo .env https://github.com/laxxx-lab/lx-family-planner/releases/latest/download/env.example
sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 32)/" .env
docker compose up -d

Die Daten bleiben in data/, Sicherungen in backups/. Eine bestimmte Programmversion lässt sich mit LX_FAMILY_VERSION=1.13.1 fest anheften.

Proxmox VE Helper-Script

Für Proxmox VE gibt es einen eigenen One-Liner. Er wird in der Proxmox-Host-Shell als root ausgeführt und erstellt einen neuen, unprivilegierten Debian-LXC:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/laxxx-lab/lx-family-planner/main/scripts/pve-helper.sh)"

Vor dem Ausführen kann das Skript vollständig angesehen werden:

curl -fsSL https://raw.githubusercontent.com/laxxx-lab/lx-family-planner/main/scripts/pve-helper.sh | less

Ein Trockenlauf prüft PVE, Speicher, Netzwerk und alle gewählten Werte, erstellt aber noch keinen Container:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/laxxx-lab/lx-family-planner/main/scripts/pve-helper.sh)" -- --dry-run

Die Standardinstallation verwendet:

  • Proxmox VE 8.4 oder neuer
  • Debian 13, mit automatischem Rückfall auf Debian 12
  • unprivilegierten LXC mit nesting und keyctl
  • 2 CPU-Kerne, 2 GB RAM, 512 MB Swap und 8 GB Speicher
  • DHCP an vmbr0 und Port 3001
  • Docker Engine aus dem offiziellen Docker-Repository
  • zufällig erzeugtes App-Geheimnis und persistente Daten im LXC

Im erweiterten Modus lassen sich Container-ID, Speicher, Netzwerk, Ressourcen, Port und öffentliche LX-Adresse anpassen. Eine bereits vergebene Container-ID wird niemals überschrieben. Bei einem Installationsfehler bleibt der neue Container zur Diagnose erhalten.

Nach der Installation:

pct enter CONTAINER_ID
lx-family status
lx-family update
lx-family backup
lx-family logs
lx-family restart
lx-family domain https://familie.example.de
lx-family doctor

Der Helper ist für eine neue Installation gedacht. Für den Umzug einer bestehenden Familie zuerst ein Datenbank-Backup erstellen und dieses anschließend bewusst in die neue Instanz übernehmen.

Installation aus einem App-Store

LX Family Planner ist für Unraid Community Applications und den Umbrel App Store vorbereitet. Nach der Prüfung durch die jeweiligen Store-Teams erscheint LX dort als normale App: Installieren anklicken, Speicherort und Zugang festlegen, fertig.

Bis zur Freischaltung funktionieren Docker, das fertige GHCR-Image und der Proxmox-Helper unverändert weiter. Die Store-Pakete und ihre Prüfschritte sind unter Store-Veröffentlichungen dokumentiert.

Bequem und sicher aktualisieren

Docker unter Windows

Ein Doppelklick genügt:

Update-Familienplaner.cmd

Das Update läuft bewusst in dieser Reihenfolge:

  1. Nur bei einem sauberen Programmordner wird die neue Git-Version geladen.
  2. Das bisherige Docker-Abbild wird als Rückfallversion vorgemerkt.
  3. Die neue Version wird gebaut, während der Planer noch erreichbar bleibt.
  4. Danach wird die App kurz angehalten und eine konsistente SQLite-Sicherung samt Prüfmanifest erstellt.
  5. Alle Datenbankmigrationen laufen zuerst auf einer temporären Kopie dieser Sicherung.
  6. Erst nach erfolgreicher Simulation startet die neue Version.
  7. Abschließend werden alle bereits vorhandenen Datensätze und gespeicherten Einstellungen mit dem Stand vor dem Update verglichen.

Schlägt Start, Migration, Gesundheitscheck oder Datenvergleich fehl, stellt das Skript automatisch die vorherige Docker-Version und die Sicherung wieder her.

Lokale Änderungen an Programmdateien werden nicht überschrieben. In diesem Fall bricht das Update mit einer Erklärung ab. Absichtlich lokal bereitgestellter Quellcode kann ohne Git-Abruf aktualisiert werden:

powershell -File scripts/docker-update.ps1 -SkipPull

Docker unter Linux

Im Projektordner:

bash scripts/docker-update.sh

Ohne Git-Abruf:

bash scripts/docker-update.sh --skip-pull

Stabile Releases automatisch einspielen

Auf einem Linux-Docker-Server kann LX einmalig für kontrollierte automatische Updates eingerichtet werden:

sudo bash scripts/install-auto-update.sh

Der Server prüft täglich nachts das neueste veröffentlichte stabile GitHub-Release. Einzelne Entwicklungs-Commits werden nicht installiert. Vor jedem echten Update verwendet LX denselben geschützten Ablauf wie beim manuellen Docker-Update:

  • bisheriges Docker-Abbild als Rückfallversion vormerken
  • konsistente Datenbanksicherung mit Prüfmanifest erstellen
  • Migration zuerst auf einer Sicherungskopie simulieren
  • neue Version starten und Gesundheitscheck ausführen
  • Familieninhalte und Einstellungen mit dem vorherigen Stand vergleichen
  • bei einem Fehler automatisch zur vorherigen Version zurückkehren

Nur prüfen, ohne etwas zu verändern:

bash scripts/docker-auto-update.sh --check

Zeitplan und letzter Lauf:

systemctl list-timers lx-family-planner-auto-update.timer
systemctl status lx-family-planner-auto-update.service

Ohne Docker

Vor dem Austausch des Programmcodes:

npm run backup
git pull --ff-only
npm ci
npm run check

Danach den laufenden Node-Prozess beziehungsweise den verwendeten Systemdienst neu starten und prüfen:

npm run audit

Die .env darf bei einem Update nicht ersetzt werden. Insbesondere APP_SECRET muss gleich bleiben, weil damit Bring!, Gotify, Home Assistant, private Kalenderlinks und Push-Schlüssel verschlüsselt werden.

Was erhalten bleibt

Der Docker-Updater behält den Ordner data/ als unabhängiges Volume. Das Prüfmanifest kontrolliert unter anderem:

  • Familienkonten, Profile, Rollen, PINs, Sterne und Profil-Themes
  • Routinen, Taschengeldbuchungen, Sparziele, Schuleinträge und Abstimmungen
  • Familien-Missionen, Mutmacher, Abzeichenfortschritt und Kinder-Begleiter
  • Ruhezeiten, Medienzeitfenster und Notfallkontakte
  • Kalendertermine, Aufgaben, Einkauf, Speisepläne und Mülltermine
  • importierte Rezepte einschließlich Zutaten, Zubereitung und Bildern
  • Pinnwandnotizen und Pinnwandbilder
  • Chat, Familiennetz, Familienfreigaben, gemeinsame Termine, Medienlinks und Dashboard-Inhalte
  • Kalender-Abos, Bring!, Gotify, Home Assistant und deren verschlüsselte Konfiguration
  • lokal gespeicherte Problemmeldungen und ihr Bearbeitungsstatus
  • Push-Geräte, Benachrichtigungseinstellungen und Familien-Posteingang

Gerätespezifische Komfortwerte wie das zuletzt aktive Profil, der ausgewählte Haushalt, die Reihenfolge der Dashboard-Kacheln und ein zurückgestellter Benachrichtigungshinweis liegen im Browser. Ein Update löscht diesen Speicher nicht. Dafür müssen Adresse und Port der App gleich bleiben.

Weg 2: Ohne Docker starten

Voraussetzungen:

  • Node.js 22.13 oder neuer
  • npm

Einmalig vorbereiten:

Copy-Item .env.example .env
npm ci
npm run build

APP_SECRET in .env vor dem ersten produktiven Start durch einen langen, zufälligen Wert ersetzen. Danach:

npm start

Die App läuft unter http://localhost:3001.

Für die Entwicklung werden zwei Terminals verwendet:

npm run server
npm run dev

Vite läuft dann unter http://localhost:3000 und leitet API-Anfragen an den Server auf Port 3001 weiter.

Externe Kalender verbinden

Eltern und Großeltern können im Familienkalender unter Kalenderquellen veröffentlichte ICS-Links aus Google Kalender, Outlook, Nextcloud und anderen Kalenderdiensten hinterlegen. Die Verbindung ist bewusst nur lesend:

  • der geheime Kalenderlink wird verschlüsselt in SQLite gespeichert,
  • Termine werden standardmäßig einmal pro Stunde aktualisiert,
  • wiederkehrende Termine, Ausnahmen, Ganztagstermine und Zeitzonen werden berücksichtigt,
  • abonnierte Termine sind im Familienplaner als schreibgeschützt markiert,
  • bei einem Verbindungsfehler bleiben die zuletzt erfolgreich gelesenen Termine erhalten.

Kalender auf privaten Heimnetz-Adressen sind aus Sicherheitsgründen zunächst gesperrt. Für einen lokalen Nextcloud- oder CalDAV-Server kann in .env bewusst freigeschaltet werden:

CALENDAR_ALLOW_PRIVATE_HOSTS=true

Link-Local- und Loopback-Adressen bleiben trotzdem gesperrt. Das Aktualisierungsintervall lässt sich mit CALENDAR_SYNC_INTERVAL_MINUTES=60 anpassen.

Terminerinnerungen

Beim Anlegen eines Termins lassen sich mehrere Erinnerungen kombinieren, zum Beispiel 1 Tag, 10 Stunden, 1 Stunde und 10 Minuten vorher. Eigene Termine können später über das Glockensymbol im Kalender angepasst werden.

Die Prüfung läuft auf dem Server und nicht nur im geöffneten Browser:

  • der Hinweis erscheint im Familien-Posteingang,
  • Geräte mit aktiviertem Web-Push erhalten eine Systemmeldung,
  • ein verbundener Gotify-Server kann die Erinnerung ebenfalls zustellen,
  • bereits verschickte Erinnerungen werden in SQLite vermerkt und nicht doppelt gesendet,
  • nach einer kurzen Serverpause wird nur der sinnvollste noch offene Hinweis nachgeholt.

Docker verwendet standardmäßig Europe/Berlin. Eine andere Zeitzone kann über TZ in der .env gesetzt werden.

Rezepte aus dem Web importieren

Der Rezept-Finder liest öffentliche HTTPS-Seiten mit Schema.org- oder h-recipe-Daten. Dadurch funktionieren neben Chefkoch, Lecker und vielen weiteren Rezeptportalen auch Pinterest-Pins, die auf eine öffentliche Original-Rezeptseite verweisen. Bei Pins mit direkt hinterlegten Zutaten wird der lesbare Inhalt übernommen und gegebenenfalls mit einem Prüfhinweis gekennzeichnet.

Zum Schutz des Heimnetzes öffnet der Import keine privaten oder lokalen Netzwerkadressen, keine Links mit eingebetteten Zugangsdaten und keine Seiten hinter einem Login. Portale, die automatisierte Aufrufe vollständig blockieren, müssen weiterhin manuell ins Kochbuch übertragen werden.

Rezept direkt aus Chefkoch oder Pinterest teilen

Sowohl die installierte LX-PWA als auch die Android-App registrieren sich auf unterstützten Android-Geräten als Teilen-Ziel. Danach funktioniert der Ablauf ohne Kopieren:

  1. LX Family Planner über die HTTPS-Adresse öffnen.
  2. Im Browser Zum Startbildschirm hinzufügen beziehungsweise App installieren wählen.
  3. In Chefkoch, Pinterest oder einer anderen Rezept-App Teilen öffnen.
  4. LX Familie auswählen.

LX öffnet das Kochbuch, liest den geteilten Link und startet den sicheren Rezeptimport. Die Funktion ist von der Web-Share-Target-Unterstützung des Geräts abhängig; auf Android mit der LX-App oder einer installierten Chromium-PWA ist sie am zuverlässigsten. Ohne Installation bleibt das Einfügen eines Links im Rezept-Finder weiterhin möglich.

Android-App herunterladen und bauen

Auf der öffentlichen Anmeldeseite zeigt LX automatisch die aktuelle Android-App mit Versionsnummer, Dateigröße, Download-Knopf und QR-Code an. Der QR-Code verweist immer auf die eigene Planer-Adresse, zum Beispiel https://familie.example.de/apk/latest.apk.

Bei einem Aufruf über localhost wird bewusst kein QR-Code angezeigt, weil localhost auf dem Handy das Handy selbst bezeichnet. Für lokale Tests die Heimnetz-IP des Servers verwenden oder PUBLIC_APP_URL in .env auf die öffentliche HTTPS-Adresse setzen.

Für einen neuen App-Build genügt unter Windows:

npm run build:apk

Damit die APK echte Android-Benachrichtigungen empfangen kann, muss vorher einmal Firebase Cloud Messaging eingerichtet werden:

  1. In der Firebase Console ein Projekt anlegen.
  2. Im Projekt eine Android-App mit dem Paketnamen com.lxfamily.planner registrieren.
  3. Die heruntergeladene google-services.json unter android/app/google-services.json ablegen.
  4. Unter Projekteinstellungen → Dienstkonten einen privaten Dienstkontoschlüssel erzeugen und als data/firebase-service-account.json auf dem LX-Server ablegen.
  5. Den Server neu starten und danach npm run build:apk ausführen.

Beide Dateien müssen aus demselben Firebase-Projekt stammen. Das Build-Skript bricht bewusst ab, wenn die Android-Datei fehlt oder den falschen Paketnamen enthält; dadurch wird keine scheinbar fertige APK ohne funktionierenden Android-Push verteilt.

firebase-service-account.json ist geheim und bleibt ausschließlich im persistenten data/-Ordner. google-services.json enthält nur die App-Projektzuordnung, bleibt in diesem Projekt aber ebenfalls lokal. Beide Pfade stehen in .gitignore.

Das fertige Paket liegt anschließend als LX-Family-Planner.apk im Projektordner. Beim ersten Durchlauf erzeugt das Skript automatisch einen privaten Release-Schlüssel unter data/android-signing/. Danach verwendet jeder Build denselben Schlüssel, damit Android spätere Versionen als Update akzeptiert.

Wichtig: data/android-signing/ einmal sicher außerhalb des Servers sichern. Geht dieser Schlüssel verloren, können bestehende App-Installationen nicht mehr mit einer neu signierten APK aktualisiert werden.

Eine vorhandene professionelle Signatur kann stattdessen über diese lokalen Variablen vorgegeben werden:

LX_ANDROID_KEYSTORE
LX_ANDROID_STORE_PASSWORD
LX_ANDROID_KEY_ALIAS
LX_ANDROID_KEY_PASSWORD

Keystore und Passwörter werden nicht in Git aufgenommen. Die fertige, signierte APK wird zusätzlich unter public/apk/latest.apk bereitgestellt und ist damit Bestandteil des nächsten Docker- beziehungsweise Server-Updates. In der App kann über das Server-Symbol eine andere HTTPS-Domain oder eine Heimnetz-IP ausgewählt werden.

Der Build wird außerdem nach data/apk/latest.apk kopiert. Läuft der Familienplaner aus demselben Projektordner beziehungsweise mit dem Docker-Volume data/, weist eine ältere Android-App automatisch auf die neue Version hin. Produktionsserver bieten ausschließlich signierte Release-Pakete an.

Benachrichtigungen

Native Android-App-Benachrichtigungen

Die herunterladbare LX Android-App verwendet Firebase Cloud Messaging. Das ist ein eigener nativer Kanal und kein Browser-Push in einer WebView. Meldungen erscheinen deshalb im Android-Benachrichtigungsbereich, wenn die App im Hintergrund liegt oder geschlossen ist.

Beim ersten Einschalten erklärt LX die Funktion und öffnet anschließend die Android-Systemabfrage. Diese Abfrage erscheint pro App-Installation nur einmal. Die eigentliche Auswahl wird getrennt pro Familienprofil und Gerät auf dem LX-Server gespeichert und kann in den Profileinstellungen oder der Elternzentrale jederzeit geändert werden.

Native Meldungen verwenden dieselben Regeln wie der Familien-Posteingang: Chat, Direktnachrichten, Termine und Erinnerungen, Aufgaben, Elternbestätigungen, Stimmungen und Hilfe-Anfragen, Problemmeldungen, Belohnungen, Taschengeld, Schule, Abstimmungen, Missionen und Familiennetz. Familienruhe und die private Sperrbildschirm-Vorschau gelten ebenfalls. Beim Antippen öffnet die App direkt die passende Ansicht.

Für Docker ist keine zusätzliche Freigabe nötig: ./data ist bereits als persistentes Volume eingebunden. Nach dem Ablegen von data/firebase-service-account.json genügt:

docker compose up -d --build family-planner

Ohne Docker wird derselbe Standardpfad verwendet. Alternativ kann FIREBASE_SERVICE_ACCOUNT_FILE in .env auf einen anderen lokalen Pfad zeigen. Der private Schlüssel wird nie an die Android-App oder einen Browser ausgeliefert.

Voraussetzung auf dem Handy sind Google Play-Dienste. Wenn eine App in Android manuell Beenden erzwingen gesetzt wird, stellt Android Benachrichtigungen erst nach dem nächsten Öffnen wieder zu. Normales Wegwischen aus der App-Übersicht ist kein Problem.

Browser-Push

Browser-Benachrichtigungen werden pro Familienprofil und Gerät gespeichert. Ein Gerät kann mehreren Profilen zugeordnet sein; in den Profileinstellungen lassen sich einzelne Meldungsarten an- und ausschalten.

Unabhängig davon landen wichtige Ereignisse zusätzlich im profilgetrennten Familien-Posteingang der App. Der Reiter Heute bündelt Termine, fällige Aufgaben, Elternfreigaben, Speiseplan und Einkauf passend zum aktiven Profil. Im Reiter Meldungen bleiben Aufgabenfreigaben, Termine und Chatnachrichten nachvollziehbar, auch wenn ein Browser-Push nicht zugestellt wurde. Gelesen/ungelesen wird zwischen den Geräten synchronisiert; alte Meldungen werden nach 90 Tagen automatisch entfernt.

Echte Benachrichtigungen im Hintergrund benötigen eine vertrauenswürdige HTTPS-Adresse. Eine reine Heimnetz-Adresse wie http://192.168.x.x:3001 genügt den Browsern dafür nicht. Empfohlen ist ein Reverse Proxy wie Caddy, Traefik oder nginx vor Port 3001. Die Adresse kann über internes DNS trotzdem auf das Heimnetz beschränkt bleiben.

Als Alternative zur APK können Chrome und andere kompatible Browser Web Push über den Service Worker empfangen. Dafür den Planer über die HTTPS-Adresse öffnen, über Zum Startbildschirm hinzufügen installieren und anschließend in der Elternzentrale das aktuelle Gerät für das gewünschte Profil anmelden. Dieser Browserweg bleibt verfügbar, ist aber von Browser und Energiespareinstellungen abhängiger als der native App-Kanal.

Auf iPhone und iPad muss die App zuerst zum Home-Bildschirm hinzugefügt und von dort geöffnet werden.

Gotify, Telegram und WhatsApp

  • Gotify: bereits als unabhängiger Elternkanal integriert.
  • Telegram: sinnvollster nächster Kanal. Geplant ist eine einmalige Profilkopplung über QR-/Start-Link zu einem Familien-Bot, ohne dass Kinder Tokens eingeben müssen.
  • WhatsApp: technisch nur über die offizielle WhatsApp Business Platform vorgesehen. Eine Kopplung eines privaten WhatsApp-Kontos über inoffizielle Web-Sitzungen gehört bewusst nicht zum Produktionskonzept.

Sicherheit und Daten

  • Passwörter und Profil-PINs werden nicht im Klartext gespeichert.
  • Sitzungen verwenden ein HttpOnly-Cookie.
  • Familien und Direktnachrichten werden serverseitig voneinander isoliert.
  • Bring!- und Nextcloud-Zugangsdaten, private Kalenderlinks und Push-Schlüssel werden mit APP_SECRET verschlüsselt.
  • Der Docker-Container läuft ohne Root-Rechte, mit schreibgeschütztem Dateisystem, ohne Linux-Capabilities und mit no-new-privileges.
  • Ohne AGENT_API_KEY bleibt die optionale Agent-Schnittstelle deaktiviert.
  • SQLite läuft im WAL-Modus und kritische Punktebuchungen sind transaktional.

Wichtig: Wer APP_SECRET später ändert, muss verschlüsselte Integrationen wie Bring! und Nextcloud erneut verbinden. Vorhandene .lxbackup-Archive benötigen ebenfalls den ursprünglichen Schlüssel.

Backups

Mit Docker:

Backup-Familienplaner.cmd

Ohne Docker:

npm run backup

Zu jeder neuen .sqlite-Sicherung wird eine Datei .sqlite.manifest.json angelegt. Sie enthält keine Passwörter oder Integrationstokens, sondern Prüfsummen, Datensatzkennungen und Integritätsergebnisse. Damit kann nach einem Update erkannt werden, ob ein bestehender Eintrag oder ein gespeichertes Einstellungsfeld fehlt oder verändert wurde.

Sicherungen sollten regelmäßig zusätzlich auf ein anderes Gerät oder Medium kopiert werden. Ein Backup ist erst dann ein gutes Backup, wenn die Wiederherstellung einmal getestet wurde.

Mit verbundener Family Cloud legt LX zusätzlich ein verschlüsseltes, familiengetrenntes .lxbackup samt Prüfsummenmanifest unter LX Family/Backups in Nextcloud ab. Dieses Archiv ersetzt nicht die lokale Komplettsicherung des Servers, sorgt aber dafür, dass die Inhalte einer Familie außerhalb des LX-Datenvolumes liegen.

Konfiguration

Die Vorlage liegt in .env.example.

Variable Bedeutung
APP_SECRET Pflicht in Produktion; verschlüsselt sensible lokale Daten
PORT interner Server-Port, Standard 3001
HOST_PORT Port des Docker-Hosts, Standard 3001
PUBLIC_APP_URL öffentliche HTTPS-Adresse für App-Download und QR-Code
DEMO_FAMILY_ID optional; schützt genau dieses Familienkonto als öffentliche Nur-Lese-Demo
DATABASE_FILE abweichender Pfad zur SQLite-Datenbank
LEGACY_DATABASE_FILE optionaler JSON-Altbestand für die erste Migration
EVENT_REMINDER_INTERVAL_SECONDS Prüfintervall für fällige Terminerinnerungen
FIREBASE_SERVICE_ACCOUNT_FILE optionaler Pfad zum privaten FCM-Dienstschlüssel; Standard data/firebase-service-account.json
FIREBASE_PROJECT_ID optional; Firebase-Projektkennung, normalerweise aus dem Dienstschlüssel gelesen
NEXTCLOUD_SYNC_INTERVAL_MINUTES regelmäßiger DAV-Abgleich, Standard 15
COMPOSE_PROFILES mit Wert nextcloud die mitgelieferte Family Cloud starten
NEXTCLOUD_PORT Port der mitgelieferten Nextcloud, Standard 8080
NEXTCLOUD_PUBLIC_URL tatsächlich vom Familiengerät erreichbare Cloud-Adresse
NEXTCLOUD_INTERNAL_URL interne Docker-Adresse; normalerweise http://nextcloud
NEXTCLOUD_AUTO_PROVISION fehlende Familienkonten automatisch anlegen; Standard true
NEXTCLOUD_FAMILY_QUOTA Speicherkontingent pro Familie; Standard 10GB
NEXTCLOUD_*_PASSWORD vom Aktivierungsskript zufällig erzeugte Cloud-, Datenbank- und Redis-Schlüssel
NEXTCLOUD_TRUSTED_DOMAINS erlaubte Browsernamen und Heimnetz-Adressen für Nextcloud
CORS_ALLOWED_ORIGINS zusätzliche, vertrauenswürdige Ursprünge für eine getrennt gehostete oder native Oberfläche
AGENT_API_KEY aktiviert optional die geschützte Agent-API
VAPID_* optionale feste Web-Push-Schlüssel

Qualität prüfen

npm run check

Der Befehl prüft die Serverdateien, führt den isolierten API-Smoke-Test aus und erstellt einen vollständigen Produktions-Build.

Nur die aktive Datenbank kontrollieren:

npm run audit

Architektur

Browser / PWA
    │
    ├── React-Oberfläche und rollenabhängige Themes
    ├── Service Worker für Web Push
    │
    ▼
Express API
    ├── Sitzungen und Berechtigungen
    ├── Familien-, Profil- und Integrationslogik
    ├── geschützter Echtzeit-Ereigniskanal
    │
    ▼
SQLite
    ├── Familienisolierte Daten
    ├── verschlüsselte Integrationswerte
    └── transaktionale Aufgaben- und Punktebuchungen

Wichtige Bereiche:

  • server/app.js – HTTP-API, Sitzungen, Berechtigungen und Integrationen
  • server/database.js – Schema, Migrationen und Transaktionen
  • src/context/FamilyContext.jsx – zentraler Client-Datenzugriff
  • src/components/Auth – Anmeldung und Familienkonto
  • src/components/Dashboard – Erwachsenen-, Kinder- und Tablet-Dashboard
  • src/index.css – Theme-System und responsive Produktoberfläche

Projektstatus

Der Planer ist für den privaten, selbst gehosteten Familienbetrieb ausgelegt. Vor Aktualisierungen sollte immer ein Backup erstellt werden. Zugang aus dem öffentlichen Internet sollte nur über HTTPS, einen Reverse Proxy und eine bewusst konfigurierte Zugriffsschicht erfolgen.

Mitmachen

Ideen und Fehlermeldungen sind willkommen. GitHub bietet dafür vorbereitete Formulare, die keine technischen Vorkenntnisse voraussetzen.

Gebaut für echte Familien – nicht für Werbeprofile.

Media gallery

1 / 3

Install LX-Family-Planner on Unraid in a few clicks.

Find LX-Family-Planner in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for LX-Family-Planner Review the template variables and paths Click Install

Requirements

A 32-character or longer random APP_SECRET. Keep the same value for every update.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/laxxx-lab/lx-family-planner:latest
Last Updated2026-07-30
First Seen2026-07-30

Runtime arguments

Web UI
http://[IP]:[PORT:3001]
Network
bridge
Shell
bash
Privileged
false

Template configuration

WebUIPorttcp

Port used to open LX Family Planner.

Target
3001
Default
3001
Family dataPathrw

Persistent database, integration secrets and Firebase configuration.

Target
/app/data
Default
/mnt/user/appdata/lx-family-planner/data
BackupsPathrw

Persistent LX Family Planner backups.

Target
/app/backups
Default
/mnt/user/appdata/lx-family-planner/backups
App secretVariable

Random secret with at least 32 characters. Never change it after the first start.

Target
APP_SECRET
TimezoneVariable

Timezone used for calendar reminders and scheduled tasks.

Target
TZ
Default
Europe/Berlin
Secure session cookieVariable

Automatically uses secure cookies when accessed through HTTPS.

Target
SESSION_COOKIE_SECURE
Default
auto
Database fileVariable

Persistent SQLite database location.

Target
DATABASE_FILE
Default
/app/data/family_planner.sqlite
Legacy database fileVariable

Optional path used for a one-time migration from older LX versions.

Target
LEGACY_DATABASE_FILE
Default
/app/data/family_db.json