Life OS

Zwei Menschen, ein Alltag – aber Aufgaben, Notizen, Termine und Einkaufsliste verteilt über ein halbes Dutzend Einzel-Apps: Life OS bündelt das in einem gemeinsamen Datenraum. Unter der Haube steckt eine SvelteKit-PWA mit Offline-Warteschlange und Supabase-Realtime-Sync, damit beide auch ohne Netz weiterarbeiten und sofort sehen, was die andere Person gerade geändert hat.

Rolle
Alleinentwickler
Zeitraum
seit Juni 2026
Stack
SvelteKit, Supabase, PostgreSQL, PWA
Status
Im Einsatz, Überarbeitung „Life OS 2027“ läuft

Zum Ausprobieren: Handy A auf „Offline“ stellen, bei „Jetzt“ auf „Erledigt“ tippen oder im Einkauf etwas ergänzen – dann wieder online gehen. Handy B bekommt die Änderungen erst jetzt.

Mockup der überarbeiteten Oberfläche „Life OS 2027“, Stand 11.10.2026. Erfundene Beispieldaten, der Abgleich zwischen den beiden Handys ist nur nachgespielt. Die echte App ist privat.

Das Problem

Für zwei Menschen im selben Haushalt verteilt sich der Alltag auf ein halbes Dutzend Einzel-Apps – To-Do hier, Notizen dort, Einkaufsliste im Chat, Termine im Kalender. Das erzeugt Reibung und Doppelpflege. Life OS bündelt Aufgaben, Notizen, Gewohnheiten, Kalender sowie Einkauf in einem gemeinsamen, synchronisierten Datenraum – gebaut für genau zwei Personen.

Der Aufbau

Der Client ist eine SvelteKit-PWA mit Svelte 5 (Runes) und TypeScript, installierbar mit Service Worker und Offline-Shell. UI-Komponenten sprechen nie direkt mit der Datenbank, sondern nur über ein API-Modul pro Funktionsbereich. Jede Änderung landet zuerst optimistisch im UI-Zustand und zusätzlich in einer IndexedDB-Warteschlange; kommt das Gerät wieder online, spielt sie sich automatisch ab, der Sync-Status bleibt sichtbar. Live-Updates zwischen beiden Personen laufen über Supabase Realtime direkt auf Postgres-Ebene, nicht über eine eigene Server-Push-Verbindung. Backend ist eine selbst gehostete Supabase-Instanz (Postgres, Auth, Row-Level-Security, Realtime, Storage, Edge Functions) als einziges Managed-Backend; Edge Functions übernehmen nur serverseitige Regeln wie wiederkehrende Termine oder Erinnerungen.

Realtime-Sync, beide Geräte live PWA SvelteKit · Offline-Shell Warteschlange IndexedDB, bei Reconnect abgespielt Supabase Postgres · RLS · Realtime Edge Functions Wiederkehrende Regeln

Die harte Nuss

Bei Aufräumarbeiten am 27.07.2026 fiel auf, dass zwei Tabellen (Stimmung, Gesundheit) seit ihrer Migration nie in die Supabase-Realtime-Publication aufgenommen worden waren – Einträge synchronisierten sich zwischen den beiden Nutzern nicht live, und ohne eigene Offline-Warteschlange gingen Einträge beim erneuten Verbinden sogar verloren. Behoben mit einer Migration, die beide Tabellen in die Publication aufnimmt, plus der nachgerüsteten Warteschlange. Daraus wurde eine feste Regel fürs ganze Projekt: Jede neue Tabelle braucht von Anfang an volle Replikat-Identität und einen Eintrag in der Realtime-Publication, sonst kommen vor allem Lösch-Ereignisse nie an. Die Regel hält: Die im Oktober dazugekommene Tabelle für Tagesrituale bringt Row-Level-Security, Policy, volle Replikat-Identität und den Publication-Eintrag in derselben Migration mit.

Verworfen

  • Directus als Backend: zu CMS-orientiert, hätte einen eigenen Docker-Host gebraucht (den es nicht gab), und ein schwächeres Rechte-Modell für den Mehrpersonen-Zugriff als Supabase mit Row-Level-Security.
  • Server-Sent Events für Live-Updates, zugunsten von Supabase Realtime direkt auf Postgres-Ebene.

Qualität

  • 1.165 automatisierte Tests in 130 Dateien laufen grün (Stand 13.10.2026).
  • Die Typprüfung (svelte-check über 5.210 Dateien) meldet 0 Fehler und 0 Warnungen (Stand 13.10.2026).
  • Das Start-Bundle der App ist in der CI auf 242 KB (gzip) begrenzt – wächst es darüber, schlägt der Build fehl.
  • Beim Sicherheitscheck am 30.07.2026 hatten alle 31 Tabellen aktive Row-Level-Security mit mindestens einer Policy: geteilte Daten nur für Mitglieder desselben Haushalts, persönliche Einträge wie das Tagebuch ausschließlich für den eigenen Account. Die danach angelegte Tabelle für Tagesrituale ist ebenfalls nur für die eigene Person lesbar.
  • Keine öffentlich lesbaren Tabellen, serverseitig rotierte Service-Tokens, HTTPS mit Rate-Limits und Audit-Log, verschlüsselte Backups mit geprüftem Restore.

Ergebnis und Gelerntes

Stand 13.10.2026 hat Life OS 15 Module – Heute, Aufgaben, Notizen, Routinen, Kalender, Einkauf, Ziele, Tagebuch, Fokus, Wochenrückblick, Stimmung, Gesundheit, Training, Einblicke und Verlauf –, läuft produktiv auf einer eigenen Supabase-Instanz und meldet sich per Passkey an.

Seit Oktober baue ich die Oberfläche unter dem Namen „Life OS 2027“ um: Heute zeigt eine Jetzt-Karte, den Tagesplan und die freie Zeit; Tag planen und Tag abschließen sind kurz und freiwillig; Regeln verbinden Module sichtbar, mit Verlauf und Rückgängig; dazu kommen eine Hilfe, die überall über das Fragezeichen erreichbar ist, und ein neues Erscheinungsbild mit harten Kanten. Sieben Module sind umgestellt (Aufgaben, Notizen, Routinen, Kalender, Einkauf, Ziele, Tagebuch), der Rest folgt. Die Überarbeitung liegt auf einem eigenen Branch und ist noch nicht ausgerollt.

Gelernt: Migrationen mussten nach fast jeder Ausbaustufe von Hand im Supabase-SQL-Editor nachgezogen werden, weil das Projekt nie per Supabase-CLI mit der Datenbank verlinkt war – das nächste Mal wird das von Anfang an eingerichtet.

KI Assistent

Frag mich, was du wissen willst

Hier antwortet eine KI (gpt-oss-120b, betrieben bei Groq), nicht ich persönlich. Sie kennt nur die Inhalte dieser Seite und kann sich irren – verbindlich ist, was auf der Seite steht. Deine Frage wird zur Beantwortung an Groq übertragen. Mehr dazu