Zurück zur Startseite
Self-Engine

Case Study · Eigenes ProduktLive seit Juli 2026

Arbeit, Zeit, Geld und Alltag. In einer App.

Self-Engine ist mein eigenes Produkt: eine Produktivitäts-App für Freelancer und Selbstständige, in der Zeiterfassung, Aufgaben, Kalender, Finanzen und Gewohnheiten ein gemeinsames Datenmodell teilen. Ich entwerfe, entwickle und betreibe sie allein — offline-first, im Web, auf dem Mac und bald auf dem Handy.

  • Web-App
  • macOS (Alpha)
  • iOS-Beta
  • Offline-first
Commits seit Dezember 2025
2.100+
Releases seit Juli 2026
79
automatisierte Tests
~5.900
Datenbank-Migrationen
137
synchronisierte Tabellen
37
Architektur-Entscheidungen (ADRs)
38
Die Idee

Getrennte Tools wissen nichts voneinander.

Zeiterfassungs-Tools wissen nicht, was eine Stunde wert ist. Finanz-Apps wissen nicht, welche Arbeit das Geld verdient hat. Und Kalender zeigen, was geplant war — nie, was wirklich passiert ist. Die Verbindungen dazwischen existierten nur in meinem Kopf.

In Self-Engine sind genau diese Verbindungen das Produkt: Aus einem Termin startet ein Timer, der Timer wird zum Zeiteintrag, und eine Auszahlung markiert die Einträge als bezahlt und bucht das Geld in den Finanzen.

  1. 01

    Termin

    geplant im Kalender

  2. 02

    Timer

    startet aus dem Termin

  3. 03

    Zeiteintrag

    mit Stundensatz und Rundung

  4. 04

    Auszahlung

    markiert Einträge als bezahlt

  5. 05

    Cashflow

    im richtigen Konto und in der richtigen Währung

Und Gewohnheiten füllen sich von selbst — aus der Zeit, die du auf einem verknüpften Projekt erfasst.

Module

Ein Datenmodell, fünf Module.

Jedes Modul funktioniert für sich — und kennt die anderen.

Aufgaben

Inbox, Heute, Demnächst und ein Kanban-Board — mit eigenen Status in festen Kategorien.

  • Geplanter Tag und Deadline getrennt
  • Unteraufgaben, Tags, Prioritäten, Erinnerungen
  • Unscharfe Suche über alles

Kalender

Termine und erfasste Zeit nebeneinander in Woche und Monat — Plan und Wirklichkeit auf einen Blick.

  • Zwei-Wege-Sync mit Google und Apple (iCloud)
  • Synchronisiert serverseitig, auch bei geschlossener App
  • Timer direkt aus dem Termin

Finanzen

Konten in je einer Währung, einmalige und wiederkehrende Zahlungen, Umbuchungen und Währungswechsel.

  • Auswertungen strikt pro Währung
  • Wiederkehrende Zahlungen pausieren und fortsetzen
  • Festpreis-Projekte und Kontaktprofile

Gewohnheiten

Täglich, an bestimmten Wochentagen oder als flexible Quote pro Woche oder Monat.

  • Streaks immer aus dem Verlauf berechnet
  • Pausieren, ohne den Verlauf zu verlieren
  • Fortschritt automatisch aus erfasster Zeit
KI & Agenten

Ein Assistent mit Leitplanken.

Der eingebaute Assistent kennt 39 typisierte Capabilities über alle Module. Er arbeitet pull-first: Das Modell bekommt Zähler und Hinweise statt Nutzerdaten und muss über typisierte Read-Tools nachfragen. Rate-Limits, Kosten-Tracking und Routing ausschließlich über Zero-Data-Retention-Endpunkte erzwingt der Server.

Wer lieber den eigenen Agenten nutzt, verbindet Claude, Claude Code oder Cursor per OAuth mit dem MCP-Server von Self-Engine. Berechtigungen gelten pro Datentyp, Agenten können höchstens in den Papierkorb verschieben, und jeder Aufruf landet im Agenten-Protokoll.

  1. VorbereitenVorschau aus Live-Daten
  2. Freigebeneinmalig, an die exakte Eingabe gebunden
  3. Ausführendieselbe Domain-Mutation wie ein Klick
Architektur

Offline-first — wirklich.

Jede App schreibt zuerst in eine lokale SQLite-Datenbank; ein Schreibvorgang wartet nie auf die Cloud. PowerSync stellt die Änderung in eine Warteschlange und lädt sie geordnet zu Supabase hoch, wo Postgres mit Row-Level-Security auf jeder Tabelle die Quelle der Wahrheit bleibt. Änderungen anderer Geräte fließen zurück in die lokale Datenbank, und die UI aktualisiert sich über Live-Queries — ohne manuelle Cache-Invalidierung.

Die Domäne lebt in geteilten Packages: 37 synchronisierte Tabellen, Zod-Schemas und typisierte Collections, die Web und Mobile identisch nutzen. Geschäftsregeln sind pure Funktionen hinter einem Persistence-Port — dieselbe Regel schützt einen Tap in der Mobile-App, einen Klick im Web und den Tool-Aufruf eines KI-Agenten auf dem Server.

Identität ist ein einzelnes Clerk-JWT für beide Datenpfade: PowerSync prüft es für die Replikation, Postgres erzwingt es per Row-Level-Security bei jeder Query. Die Desktop-App ist eine Electron-Shell um die Web-App — mit Menüleisten-Timer, Quick Capture und signierten Auto-Updates.

App-UIReact · React Native · Electron
Lokales SQLitejeder Write landet zuerst hier
PowerSyncgeordneter Upload · Live-Queries
Supabase PostgresQuelle der Wahrheit · Row-Level-Security
Persistence-Port: dieselben Geschäftsregeln auf dem Gerät, auf dem Server und im Test
Learnings

Teuer bezahlte Erkenntnisse.

01

Eine Domäne, drei Laufzeiten

Damit KI-Agenten auf dem Server dieselben Regeln treffen wie die App auf dem Gerät, habe ich die Domain-Logik von PowerSync gelöst und hinter einen Persistence-Port gelegt — mit drei Adaptern (PowerSync, In-Memory, Postgres) und einem Test, der den Import-Graphen jeder Regel prüft.

02

Ein kaputter Write darf nicht alle blockieren

Offline-Warteschlangen laden streng geordnet hoch — ein einziger ungültiger Write hielte alle späteren auf. Darum werden fatale Postgres-Fehler klassifiziert und verworfen, zusammengehörige Writes atomar übertragen, und du erfährst, in welchem Bereich eine Änderung verloren ging.

03

Kalender-Sync auf Offline-Basis

Das Schwierige am Sync mit Google und iCloud ist nicht die API, sondern Identität: Deterministische IDs machen Creates idempotent, ETags fangen parallele Änderungen ab, abgelaufene Sync-Tokens lösen einen vollständigen Resync aus, und der serverseitige Abgleich teilt sich einen Lock mit dem Sync aus der App.

04

Den Identity-Provider im laufenden Betrieb tauschen

Jede User-ID von Supabase Auth zu Clerk zu migrieren hieß: alle Row-Level-Security-Policies in einer einzigen Migration neu schreiben und zwei unabhängige Datenpfade auf ein JWT umstellen — ohne eine einzige Offline-Warteschlange zu verlieren.

Stack

Gebaut mit

Web

  • TanStack Start
  • TanStack Router
  • TanStack DB
  • TanStack Query
  • Mantine
  • Paraglide

Mobile

  • Expo
  • React Native
  • Expo Router
  • HeroUI Native
  • EAS Updates

Desktop

  • Electron
  • electron-builder
  • electron-updater

Daten & Sync

  • SQLite
  • PowerSync
  • Supabase
  • Postgres
  • Clerk
  • Zod

KI

  • TanStack AI
  • OpenRouter
  • Model Context Protocol

Qualität & Tooling

  • TypeScript
  • Bun
  • Turborepo
  • Vitest
  • pgTAP
  • Oxlint
  • Knip
  • Sentry

Probier es selbst aus.

Self-Engine läuft im Browser und auf dem Mac — 30 Tage kostenlos.

Self-Engine ist ein kommerzielles Produkt; der Quellcode ist nicht öffentlich.