Zeitgeber – 12 Uhr ist fast nie Mittag
Eine astronomisch korrekte Sonnenuhr als Offline-PWA: Sie zeigt den Abstand zwischen gesetzlicher Zeit und echtem Sonnenstand – komplett lokal, ohne Backend, mit UI-freier Berechnungsebene.

Fast jede Uhr kennt nur deine Zeitzone, nicht deinen Ort. Dabei liegt der gesetzliche Mittag je nach Standort und Jahreszeit deutlich neben dem echten Sonnenhöchststand. Zeitgeber zeigt beide Seiten: die soziale Zeit und den tatsächlichen Sonnenstand – und den Abstand dazwischen. Konzeption, Architektur und Umsetzung liegen komplett bei mir.
Tech-Stack: TypeScript (strict) · Vite · PWA · satellite.js · React Native/Expo · Vitest
Die Idee: der Versatz
Zwei Größen lassen sich auf einem Zifferblatt zusammenführen: der Sonnenzeit-Versatz (gesetzlicher Mittag gegen echten Höchststand – reine Physik) und der soziale Jetlag nach dem Munich Chronotype Questionnaire (vier Zeitangaben genügen). Wer spät tickt und am Westrand einer Zeitzone wohnt, erlebt beides additiv. Das zeigt Zeitgeber als kombinierten Gesamtversatz – auf einem einzigen 24-Stunden-Zifferblatt mit kontinuierlichen Dämmerungszonen.
Architektur: drei Achsen, ein Bus
Der Kern ist eine UI-freie Berechnungsebene aus reinen Funktionen: Sonne (NOAA-Algorithmus), Mond (Schlyter), Planeten (Keplerelemente), Fixsterne und Satelliten (SGP4). Darüber liegen drei getrennte Achsen – Provider (was am Himmel ist), Ansichten (wie es aussieht) und Fähigkeiten (Module wie Solarertrag oder Outdoor). Ein object-bus aggregiert die aktiven Provider und isoliert Fehler pro Modul. Ein neuer Provider erscheint dadurch automatisch in allen Ansichten.
Der Nebeneffekt: Web-PWA und native App (iOS/Android) teilen sich dieselbe Engine – keine Kopie der Astronomie-Logik.
Korrektheit vor Features
Berechnungen werden gegen Referenzwerte und physikalische Invarianten getestet, etwa Polaris-Höhe ≈ geografische Breite oder die maximale Elongation der inneren Planeten. Ein Bug aus der Praxis: Zeit-Readouts müssen der Zeitzone des gewählten Ortes folgen, nicht der des Geräts – sonst stimmt die „Zeitreise” nicht. Astrologie und Solunar-Folklore gibt es bewusst nicht.
Offline und ohne Backend
Kein Konto, kein Server, keine Tracker. Standort und Eingaben bleiben auf dem Gerät, der Service Worker macht die App offline-fähig. Optionale Module sind standardmäßig aus – wer nichts konfiguriert, sieht ein ruhiges Zifferblatt. Der Code ist Open Source (AGPL-3.0): github.com/darkjive/Zeitgeber.
Was ich daraus mitnehme
Eine saubere Trennung zwischen Berechnung und Darstellung zahlt sich doppelt aus: Sie macht Tests einfach und erlaubt neue Plattformen ohne Neuschreiben. Und Zurückhaltung ist ein Feature – die Breite soll sichtbar werden, wenn jemand danach sucht, nicht vorher.