Saltar al contenido
Todas las entradas

Construyendo Hydrame: recordatorios inteligentes sin la insistencia

Una app de recordatorios vive o muere por sus notificaciones. Así diseñé las de Hydrame para animarte con suavidad — y adaptarse a tu día en lugar de pelearse con él.

MFKAPPS 4 min de lectura

La mayoría de las apps de recordatorios tienen el mismo defecto fatal: los recordatorios. Se disparan según un horario fijo, ignoran lo que estás haciendo y poco a poco te enseñan a descartarlos sin leerlos. En cuanto una notificación se convierte en ruido, toda la app se convierte en ruido.

Hydrame es una app para seguir tu hidratación, y el seguimiento del agua es enteramente un problema de recordatorios. Si los avisos son buenos, la app funciona. Si insisten demasiado, la desinstalas antes del jueves. Así que dediqué la mayor parte del tiempo de diseño a una sola pregunta: ¿cómo le recuerdas a alguien que beba agua sin convertirte en aquello que detesta?

Los horarios fijos son el enemigo

El enfoque ingenuo es una alarma cada dos horas. Es fácil de construir y miserable de soportar. Vibra durante las reuniones, mientras duermes una siesta y diez minutos después de que acabas de beber un vaso. Cada recordatorio a destiempo te cuesta un poco de confianza, y esa confianza no vuelve.

La idea que dio forma a Hydrame: un recordatorio solo es bueno si llega en un momento en el que realmente podrías actuar. Todo lo demás es ruido disfrazado de ayuda.

Adaptarse al día

En lugar de un temporizador fijo, Hydrame reparte un objetivo diario a lo largo de tus horas de vigilia y solo te anima cuando de verdad te has quedado atrás y ha pasado suficiente tiempo desde el último aviso. Registrar una bebida empuja el siguiente recordatorio más adelante. Bebe con constancia y puede que no sepas nada de él — que es justo el objetivo.

La lógica central de programación es deliberadamente pequeña:

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;
}

No hay nada ingenioso en las matemáticas, y es intencional. El umbral de 0.85 significa “atrasado, pero no de forma castigadora”. La protección de minGapMinutes es la diferencia entre un compañero y un pesado. La mayor parte del trabajo consistió en quitar razones para dispararse, no en añadirlas.

El texto de la notificación importa tanto como el momento

Un recordatorio perfectamente sincronizado puede sentar mal igual si las palabras son las equivocadas. “¡Estás fracasando en tu objetivo!” es técnicamente un aviso. También es un pequeño acto de hostilidad que has invitado a la pantalla de bloqueo de alguien.

Los recordatorios de Hydrame son cortos, cálidos y nunca hacen sentir culpa:

  • “Un buen momento para un vaso de agua.”
  • “Mitad del día — ¿nos ponemos un poco al día?”

Sin signos de exclamación peleando por tu atención. Sin una racha a punto de “romperse”. El tono es el de un amigo que lo menciona, no el de un entrenador que lo grita.

Tranquila por defecto, configurable por elección

Los valores por defecto son la decisión de diseño más importante de cualquier app, porque la mayoría de la gente nunca los cambia. Por eso Hydrame llega silenciosa: un número prudente de avisos, ninguno de noche, todos fáciles de reducir aún más.

Si quieres objetivos más exigentes o comprobaciones más frecuentes, ahí están. Pero optas por más, nunca sales de menos. Esa única inversión — la calma como suelo, no como techo — es la mayor parte de lo que hace que la app se sienta respetuosa.

El objetivo nunca fue maximizar las notificaciones. Fue ganarse cada una.

Lo que le diría a cualquiera que construya una app de recordatorios

  1. Vincula los recordatorios a momentos accionables, no al reloj. Un aviso sobre el que no puedes actuar es solo ruido.
  2. Deja siempre espacio para respirar. Un intervalo mínimo entre alertas no es negociable.
  3. Escribe el texto como una persona, no como una métrica. La calidez no cuesta nada y compra mucha confianza.
  4. Haz que la opción tranquila sea la predeterminada. La gente vive en tus valores por defecto.

Hydrame ya está disponible en Google Play, y las notificaciones siguen siendo la parte que no dejo de refinar. Si la pruebas, cuéntame cómo sientes los avisos — ese feedback da forma a lo que viene después. En silencio, por supuesto.