Aller au contenu
Tous les articles

Construire Hydrame : des rappels intelligents, sans harcèlement

Une application de rappels vit ou meurt par ses notifications. Voici comment j'ai conçu celles d'Hydrame pour vous encourager en douceur — et s'adapter à votre journée au lieu de la contrarier.

MFKAPPS 4 min de lecture

La plupart des applications de rappels partagent le même défaut fatal : les rappels eux-mêmes. Ils se déclenchent selon un horaire fixe, ignorent ce que vous faites et vous apprennent peu à peu à les balayer sans les lire. Dès qu’une notification devient du bruit, toute l’application devient du bruit.

Hydrame est une application de suivi de l’hydratation, et le suivi de l’hydratation est entièrement un problème de rappels. Si les incitations sont bonnes, l’application fonctionne. Si elles harcèlent, vous la désinstallez avant jeudi. J’ai donc consacré l’essentiel du temps de conception à une seule question : comment rappeler à quelqu’un de boire de l’eau sans devenir la chose qu’il déteste ?

Les horaires fixes sont l’ennemi

L’approche naïve, c’est une alarme toutes les deux heures. Facile à construire, pénible à vivre. Elle vibre pendant les réunions, pendant une sieste, et dix minutes après que vous venez de boire un verre. Chaque rappel mal synchronisé vous coûte un peu de confiance, et cette confiance ne revient pas.

L’idée qui a façonné Hydrame : un rappel n’est bon que s’il arrive à un moment où vous pouvez réellement agir. Tout le reste n’est que du bruit déguisé en aide.

S’adapter à la journée

Au lieu d’un minuteur fixe, Hydrame répartit un objectif quotidien sur vos heures de veille et n’encourage que lorsque vous êtes vraiment en retard et qu’assez de temps s’est écoulé depuis la dernière incitation. Enregistrer une boisson repousse le prochain rappel. Buvez régulièrement et vous n’en entendrez peut-être jamais parler — et c’est tout l’intérêt.

La logique de planification centrale est délibérément petite :

interface ReminderContext {
  now: Date;
  wakeHour: number;       // e.g. 8
  sleepHour: number;      // e.g. 23
  goalMl: number;         // daily target
  consumedMl: number;     // logged so far today
  lastNudge: Date | null;
  minGapMinutes: number;  // breathing room between nudges
}

function shouldNudge(ctx: ReminderContext): boolean {
  const hour = ctx.now.getHours();

  // Never during sleeping hours.
  if (hour < ctx.wakeHour || hour >= ctx.sleepHour) return false;

  // Respect a minimum gap so we never feel pushy.
  if (ctx.lastNudge) {
    const gapMin = (ctx.now.getTime() - ctx.lastNudge.getTime()) / 60000;
    if (gapMin < ctx.minGapMinutes) return false;
  }

  // How much *should* you have had by now, given the day's progress?
  const dayLength = ctx.sleepHour - ctx.wakeHour;
  const elapsed = Math.max(0, hour - ctx.wakeHour);
  const expectedMl = ctx.goalMl * (elapsed / dayLength);

  // Only nudge if you're meaningfully behind the curve.
  return ctx.consumedMl < expectedMl * 0.85;
}

Il n’y a rien d’astucieux dans le calcul, et c’est intentionnel. Le seuil de 0.85 signifie « en retard, mais pas au point d’être puni ». Le garde-fou minGapMinutes est la différence entre un compagnon et un harceleur. L’essentiel du travail consistait à retirer des raisons de se déclencher, pas à en ajouter.

Le texte de la notification compte autant que le timing

Un rappel parfaitement synchronisé peut quand même faire mauvaise impression si les mots sont mal choisis. « Vous êtes en train d’échouer votre objectif ! » est techniquement une incitation. C’est aussi un petit acte d’hostilité que vous avez invité sur l’écran verrouillé de quelqu’un.

Les rappels d’Hydrame sont courts, chaleureux et jamais culpabilisants :

  • « Un bon moment pour un verre d’eau. »
  • « À mi-journée — un petit rattrapage ? »

Aucun point d’exclamation qui se dispute votre attention. Aucune série sur le point de « se briser ». Le ton est celui d’un ami qui le mentionne, pas d’un coach qui le hurle.

Calme par défaut, configurable par choix

Les réglages par défaut sont la décision de conception la plus importante de toute application, car la plupart des gens ne les changent jamais. Hydrame arrive donc silencieux : un nombre prudent d’incitations, aucune la nuit, toutes faciles à réduire encore davantage.

Si vous voulez des objectifs plus serrés ou des vérifications plus fréquentes, c’est disponible. Mais vous optez pour plus, jamais contre moins. Cette seule inversion — le calme comme plancher, pas comme plafond — représente l’essentiel de ce qui rend l’application respectueuse.

L’objectif n’a jamais été de maximiser les notifications. C’était de mériter chacune d’elles.

Ce que je dirais à quiconque construit une application de rappels

  1. Reliez les rappels à des moments où l’on peut agir, pas à l’horloge. Une incitation sur laquelle vous ne pouvez pas agir n’est que du bruit.
  2. Laissez toujours de l’espace pour respirer. Un intervalle minimum entre les alertes n’est pas négociable.
  3. Rédigez le texte comme une personne, pas comme une métrique. La chaleur ne coûte rien et achète beaucoup de confiance.
  4. Faites de l’option calme le réglage par défaut. Les gens vivent dans vos réglages par défaut.

Hydrame est désormais disponible sur Google Play, et les notifications restent la partie que je continue de peaufiner. Si vous l’essayez, dites-moi comment vous ressentez les incitations — ce retour façonne la suite. En silence, bien sûr.