Most habit trackers are built to reward you for logging. This one is built to correlate. It records sleep, medication, supplements, liquid, food, fitness, focus, a CBT-style journal and a weekly task board — then hands the whole fortnight to Claude and asks which combinations line up with finishing things. La plupart des applications de suivi sont conçues pour vous récompenser d'avoir consigné. Celle-ci est conçue pour corréler. Elle enregistre le sommeil, les médicaments, les suppléments, les liquides, les repas, l'activité physique, la concentration, un journal d'inspiration TCC et un tableau de tâches hebdomadaire — puis remet la quinzaine complète à Claude en lui demandant quelles combinaisons coïncident avec le fait de terminer des choses.
The day at a glanceLa journée en un coup d'œil
The calendar is the only progress metric in the app. Each square counts how many of the nine trackers were touched that day: untouched stays white, all nine is solid blue, everything else lands somewhere between. It is deliberately not a streak. A streak punishes you for a bad week and then stops being useful the moment it breaks; a shaded month just shows you where the gaps are. Le calendrier est la seule mesure de progression de l'application. Chaque case compte combien des neuf suivis ont été touchés ce jour-là : une journée vide reste blanche, neuf sur neuf donne un bleu plein, le reste se situe entre les deux. Ce n'est volontairement pas une série. Une série vous punit pour une mauvaise semaine, puis cesse d'être utile dès qu'elle se brise ; un mois nuancé montre simplement où sont les trous.
The quote comes from a public API, fetched once a day by the backend rather than by the page. Going through the server means the page does not depend on the provider's CORS headers, the free rate limit is not hit on every visit, and a failed fetch falls back to yesterday's quote instead of an empty card. La citation provient d'une API publique, récupérée une fois par jour par le serveur plutôt que par la page. Ce détour évite de dépendre des en-têtes CORS du fournisseur, épargne la limite gratuite à chaque visite, et permet, en cas d'échec, d'afficher la citation de la veille au lieu d'une carte vide.
Logging that survives a real dayUn enregistrement qui survit à une vraie journée
Two decisions here matter more than they look. First, names come from a dropdown built out of saved parameters, because Adderall, adderall and adderal typed on three different days would become three different medications in the index and quietly ruin every later comparison. Anything new is typed once, then joins the list with its milligrams attached.
Deux décisions comptent ici plus qu'il n'y paraît. D'abord, les noms viennent d'un menu déroulant bâti à partir des paramètres enregistrés, parce que Adderall, adderall et adderal saisis trois jours différents deviendraient trois médicaments distincts dans l'index et ruineraient discrètement toute comparaison ultérieure. Une nouveauté se tape une seule fois, puis rejoint la liste avec sa posologie.
Second, every form has an optional time. Leave it empty and the entry is stamped now; fill it in and last night's sleep lands on last night. That sounds obvious and it was the single most important fix in the project, because a tracker used by someone with ADHD is a tracker used retroactively. The first version stamped server time and ignored anything sent — which meant a night logged the next morning was recorded as having happened at breakfast. Ensuite, chaque formulaire propose une heure facultative. Laissez-la vide et l'entrée est horodatée maintenant ; remplissez-la et le sommeil de la nuit dernière se range à la nuit dernière. Cela paraît évident et ce fut la correction la plus importante du projet, car un suivi utilisé par une personne TDAH est un suivi rempli après coup. La première version horodatait côté serveur en ignorant ce qu'on lui envoyait — une nuit consignée le lendemain matin était donc enregistrée comme s'étant produite au déjeuner.
A week, not a backlogUne semaine, pas un arriéré
Tasks are scoped to a week on purpose. Anything with a day sits in its column; anything without one waits in Anytime this week. Drag them around on a desktop, or use the day dropdown on a phone, where dragging is unreliable enough not to bother with. Les tâches sont volontairement limitées à la semaine. Ce qui a un jour occupe sa colonne ; le reste attend dans « n'importe quand cette semaine ». On les déplace par glisser sur ordinateur, ou par menu déroulant sur téléphone, où le glisser reste trop peu fiable pour qu'on s'y fie.
Whatever is unfinished when a new week is first opened carries forward automatically, with a stale due date cleared — the reason it carried is that it needs a new slot. Repeating a task across several days creates one task per day rather than a rule, so each can be ticked off on its own and the board never has to be interpreted. Ce qui reste inachevé lors de la première ouverture d'une nouvelle semaine est reporté automatiquement, l'échéance périmée étant effacée — si la tâche est reportée, c'est précisément qu'il lui faut une nouvelle place. Répéter une tâche sur plusieurs jours crée une tâche par jour plutôt qu'une règle : chacune se coche séparément et le tableau n'a jamais besoin d'être interprété.
The part that earns its keepLa partie qui justifie le reste
The backend does not hand the model raw rows. It builds a day-by-day digest — every entry timestamped and sorted, each day ending with how many tasks were written and how many finished — and asks which combinations of sleep, medication timing, caffeine, meals, exercise and mood line up with getting things done. Tasks finished is the outcome variable; everything else is a candidate cause. Le serveur ne remet pas les enregistrements bruts au modèle. Il construit un résumé jour par jour — chaque entrée horodatée et triée, chaque journée se terminant par le nombre de tâches écrites et terminées — puis demande quelles combinaisons de sommeil, d'horaire de médication, de caféine, de repas, d'activité physique et d'humeur coïncident avec le fait d'accomplir des choses. Les tâches terminées sont la variable de résultat ; tout le reste est une cause candidate.
Two things made that output trustworthy rather than merely fluent. The digest always states the task counts, including zeros — an earlier version left the line out on quiet days, and the model filled the silence by inventing numbers that were nowhere in the data. And the prompt now asks for the conclusion first, because left to itself the model spent its entire token budget listing every day back before reaching a finding, and got cut off before it arrived. Deux choses ont rendu cette sortie fiable plutôt que simplement fluide. Le résumé indique toujours le décompte des tâches, zéros compris — une version antérieure omettait la ligne les journées creuses, et le modèle comblait le silence en inventant des chiffres absents des données. Et le prompt demande maintenant la conclusion d'abord, car laissé à lui-même, le modèle dépensait tout son budget de jetons à énumérer les journées avant d'arriver à un constat, et se faisait couper avant de l'atteindre.
Where it livesOù ça vit
A DynamoDB table partitioned by user, three Lambdas behind an HTTP API, a Cognito user pool with self-registration switched off, and Claude Haiku on Bedrock for the analysis. Sign-in is a single account — mine — and every read and write is keyed to the subject in the signed token rather than anything the request can claim, so a second account would see an empty tracker rather than this one. Une table DynamoDB partitionnée par utilisateur, trois Lambdas derrière une API HTTP, un groupe d'utilisateurs Cognito dont l'inscription libre est désactivée, et Claude Haiku sur Bedrock pour l'analyse. La connexion se limite à un seul compte — le mien — et chaque lecture ou écriture est liée au sujet inscrit dans le jeton signé plutôt qu'à quoi que ce soit que la requête pourrait affirmer : un second compte verrait donc un suivi vide, pas celui-ci.
It has been running for a few days, which is nowhere near enough data to say anything. The model is currently right to refuse: ask it for patterns after two days and it tells you, correctly, to come back with two weeks. That refusal is the feature I am most pleased with. L'outil tourne depuis quelques jours, ce qui est très loin de suffire pour affirmer quoi que ce soit. Le modèle a raison de refuser : demandez-lui des tendances après deux jours et il vous répond, à juste titre, de revenir dans deux semaines. Ce refus est la fonctionnalité dont je suis le plus satisfait.