Passer au contenu principal
Publié le
Kategorie
Développement
Autor
Alain Ritter
Lesezeit
2 min de lecture
Dernière modification :
Dernière modification :

pxlngnblogfallstudie-zeitgeber

Zeitgeber – 12 h n’est presque jamais midi

Une horloge solaire astronomiquement exacte en PWA hors ligne : elle montre l’écart entre l’heure légale et la position réelle du soleil – entièrement en local, sans backend, avec une couche de calcul sans UI.

Zeitgeber – 12 h n’est presque jamais midi
Image de couverture : générée par IA

Presque toute horloge connaît votre fuseau horaire, mais pas votre lieu. Or le midi légal s’écarte nettement du vrai midi solaire selon l’endroit et la saison. Zeitgeber montre les deux côtés : l’heure sociale et la position réelle du soleil – et l’écart entre les deux. Conception, architecture et réalisation sont entièrement de moi.

Stack technique : TypeScript (strict) · Vite · PWA · satellite.js · React Native/Expo · Vitest

L’idée : le décalage

Deux grandeurs se rejoignent sur un seul cadran : le décalage de l’heure solaire (midi légal contre culmination réelle – de la pure physique) et le jetlag social d’après le Munich Chronotype Questionnaire (quatre horaires suffisent). Les chronotypes tardifs vivant en bordure ouest d’un fuseau cumulent les deux effets. Zeitgeber l’affiche comme décalage total combiné – sur un unique cadran de 24 heures avec zones crépusculaires continues.

Architecture : trois axes, un bus

Le cœur est une couche de calcul sans UI, faite de fonctions pures : soleil (algorithme NOAA), lune (Schlyter), planètes (éléments képlériens), étoiles et satellites (SGP4). Au-dessus, trois axes distincts – fournisseurs (ce qui est dans le ciel), vues (l’affichage) et capacités (modules comme le rendement solaire ou l’outdoor). Un object-bus agrège les fournisseurs actifs et isole les erreurs par module. Un nouveau fournisseur apparaît automatiquement dans toutes les vues.

Effet secondaire : la PWA web et l’app native (iOS/Android) partagent le même moteur – aucune copie de la logique astronomique.

L’exactitude avant les fonctionnalités

Les calculs sont testés contre des valeurs de référence et des invariants physiques, par exemple hauteur de Polaris ≈ latitude ou élongation maximale des planètes intérieures. Un bug réel : les affichages d’heure doivent suivre le fuseau du lieu choisi, pas celui de l’appareil – sinon le « voyage dans le temps » est faux. Pas d’astrologie ni de folklore solunaire, volontairement.

Hors ligne et sans backend

Pas de compte, pas de serveur, pas de traceurs. Position et saisies restent sur l’appareil, un service worker rend l’app utilisable hors ligne. Les modules optionnels sont désactivés par défaut – sans configuration, on voit un cadran calme. Le code est open source (AGPL-3.0) : github.com/darkjive/Zeitgeber.

Ce que j’en retiens

Séparer proprement calcul et présentation paie deux fois : les tests deviennent simples et de nouvelles plateformes s’ajoutent sans réécriture. Et la retenue est une fonctionnalité – la richesse doit se révéler quand on la cherche, pas avant.