NUTRISYNCBuilders Hub
🏠 🛠

🧠 Propuesta 31 · Cycle Intelligence

Duración del ciclo · gestión de inputs · inteligencia en app y web — con wireframes y customer journey para trabajar en Design · basada en el intercambio de founders del 31-jul · Epic M

1 · Lo que descubrió el intercambio

Lucía reportó "first bug": su Home marcaba Luteal · Día 37 con un baseline de onboarding de 28 días (último período 26-jun). La app sigue contando sin decir nada.

Pilar lo defendió como diseño, no bug: hay mujeres que llegan a día 37 y más; el ciclo no se cierra artificialmente — lo cierra la usuaria con "Start my cycle" o registrando su período. Lo dejó así a propósito.

Lucía aceptó, con matiz clave: no es intuitivo — la app debe avisar al final esperado para pedir el nuevo registro.

Juanjo elevó la apuesta: rebaseline automático con datos reales ("the users should not think"), detección de datos fuera de patrón (ej. 57 días), notificaciones, y una pantalla de tendencias en la zona del Calendario.

Pilar: existe un doc de notificaciones preparado con Lucía → semilla del sistema. (Pendiente: compartirlo.)

⚠ Dos bugs colaterales reales detectados en la misma conversación:
1 · El sábado desaparecido (Lucía): columna S de sábado vacía y sábados saltando al domingo siguiente. A Pilar le va bien → desfase de primer-día-de-semana según locale. Fix inmediato (M-0).
2 · El anillo sin señal: en día 37 de 28 el anillo pinta como si nada — debe pasar a estado "esperando tu nuevo ciclo".

2 · Los tres principios (cada founder puso uno)

1 · El ciclo lo cierra la usuaria, nunca el algoritmo (Pilar) — la variabilidad es información fisiológica, no un error a corregir.

2 · El silencio no es neutral (Lucía) — en día 37/28 sin mensaje, la usuaria concluye "esto está roto". Cuando el dato se sale del patrón, la app habla.

3 · La inteligencia trabaja para que la usuaria no piense (Juanjo) — el baseline se recalibra solo; la usuaria registra hechos, no mantiene parámetros.

3 · Customer journey — "el viaje de María" (baseline 28 días)

Cada tarjeta: qué ve → qué hace → qué hace la app por detrás → el copy propuesto (Lucía/Pilar: vuestro terreno — ajustad tono y palabras).
0
Onboarding

Ve: las preguntas de siempre (último período, 28 días, 5 días).
Hace: responde y entra.

🔧 Se crea el ciclo 0 en cycle_records (origen: onboarding). Baseline efectivo = 28.
1
Días 1–28 · en rango

Ve: Home y Calendario como hoy: fase, día, recomendaciones.
Hace: registra comidas, ánimo, síntomas.

🔧 Nada nuevo. El día se clasifica "en rango".
1b
Cambio de fase

Ve: al entrar en cada fase (menstrual → folicular → ovulatoria → luteal), un aviso que celebra el cambio y explica qué se ajusta.
Hace: nada — o abre las recomendaciones del día.

🔧 4 momentos por ciclo, calculados del modelo de fases. In-app siempre; push opcional (M-3). Añadido por comentarios founders 1-ago.
"🌱 Hoy empiezas la fase folicular — tu energía tiende a subir. He ajustado tu nutrición y movimiento a esta fase."
2
Día 29–31 · gracia

Ve: el anillo se congela lleno y cambia de copy; banda ámbar en Home y Calendario; badges del mes en hueco discontinuo.
Hace: nada, o registra su período si le vino.

🔧 Estado "gracia" (baseline+1…+7). Fase mostrada: "Luteal (extendida)". Predicciones no se rompen.
"Día 30 · tu media es 28. ¿Te ha venido? Los ciclos varían — es normal. → Registrar período"
3
Día 31 noche · aviso

Ve: primera notificación (push + Notification Center).
Hace: la abre → aterriza en Registrar período.

🔧 Regla T+3 del registro de notificaciones (D9). Solo una, no insistimos a diario.
"🌙 ¿Cómo vas? Si tu período llegó, cuéntamelo y ajusto tus recomendaciones. Si no, tranquila — te acompaño."
4
Día 32 · registra

Ve: confirmación cálida; Home renace en fase Menstrual día 1.
Hace: pulsa "Empezó mi período" (botón de Pilar).

🔧 Ciclo anterior se cierra en 31 días y se guarda; se abre ciclo nuevo. El dato entra en la media móvil.
"Ciclo de 31 días guardado 💾 Ya son 2 ciclos reales — uno más y tu ciclo personal sustituye al inicial."
5
3 ciclos · rebaseline

Ve: aviso informativo, no una pregunta (D10).
Hace: nada. Cero mantenimiento.

🔧 Ciclo personal = media móvil de 3 (29·33·31 → 31). Sustituye al onboarding en anillo, calendario, predicciones.
"✨ Tu ciclo personal es de 31 días (media de tus 3 últimos). Tus predicciones ya lo usan. Puedes verlo en Trends."
6
Un ciclo raro · 47 días

Ve: a los +8: mensaje de deriva; a los +14: mensaje de cuidado con enlace al Aviso de Salud. Al cerrar, el ciclo aparece rayado en Trends.
Hace: registra cuando llegue; o corrige su baseline si se equivocó al configurar.

🔧 Flag outlier: se guarda pero NO mueve la media. Dos seguidos = nueva normalidad → entran. Jamás diagnóstico.
"Llevas 42 días — puede ser normal, pero si quieres revisa tu perfil o consulta a un profesional. Estoy aquí."
7
Consulta · Trends

Ve: en Calendario → Trends: sus barras, su media, sus predicciones ±. En Progress: la estabilidad con las mini-barras.
Hace: entender su cuerpo. Editar un ciclo mal registrado si hace falta.

🔧 Una sola vista de datos, dos puertas (ver wireframes).

4 · Diseño — tres capas

Capa 1 · Memoriacycle_records (una fila por ciclo: inicio, fin, longitud, origen) + vista cycle_stats (media/mediana/desviación de los últimos 3–6). Ciclo 0 sembrado por el onboarding. RLS por usuaria, borrado en cascada con la cuenta. Rebaseline automático tras 3 ciclos cerrados con media recortada (outliers fuera salvo repetición).

Capa 2 · Estados + inputs — cada día se clasifica contra el baseline efectivo: en rango (≤ baseline) · gracia (+1…+7, copy suave + CTA) · deriva (+8…+14, notificación + card) · fuera de patrón (>+14, mensaje de cuidado, jamás diagnóstico). Formularios: ciclo 21–45 pasa sin fricción; 15–90 con confirmación explícita. Nunca bloquear, siempre confirmar.

Capa 3 · Superficie — pantalla Trends en Calendario + asomo en Progress (wireframes abajo) + registro notification_rules sembrado con el doc de Pilar y Lucía. Tipos: fin de ciclo esperado (T-1/T0) · gracia (T+3) · deriva (T+8/T+14) · cierre de ciclo (confirmación con resumen: "Ciclo de 31 días guardado — empiezas fase menstrual, día 1") · cambio de fase (4 por ciclo, al entrar en cada una — añadido por comentarios founders 1-ago) · rebaseline aplicado · engagement contextual. Push del sistema + Notification Center in-app. Copy i18n ×14 desde el día uno.

5 · Wireframes — Calendario (la casa del trend)

Reparto recomendado: ambas pantallas, papeles distintos, UNA sola vista de datos. Calendario = los hechos y el futuro (vista completa como tercer segmento Month | Year | Trends — cero navegación nueva). Progress = la calidad y la constancia (se asoma y enlaza).

A — CABECERA VIVA + ESTADO GRACIA

Luteal
Hoy · 31 julio
Día 32 del ciclo
Ciclo personal 31 días
media de tus últimos 3
Avg period5–6 díasestable ✓
Día 32 · tu media es 31. ¿Te ha venido? Registrar período — los ciclos varían, es normal.
La caja "Avg cycle" se vuelve viva: muestra el ciclo personal (no el del onboarding), mini-spark de los últimos 6 ciclos y chevron → abre Trends. En gracia/deriva aparece la banda ámbar con CTA. El dato deja de ser un rótulo muerto.

B — TERCER SEGMENTO: TRENDS

MonthYearTrends
Duración de tus ciclos
media 31
29mar
33abr
28may
47jun
31jul
▨ atípico (no cuenta en tu media) · franja = tu rango normal
Ciclo personal31 díasvs 28 onboarding
Próximo período≈ 27 ago± 2 días
Ovulación est.≈ 13 ago± 2 días
Histórico (editable)
26 jun – 31 jul · 31 dregistro
10 may – 25 jun · 47 datípico
12 abr – 9 may · 28 dbotón
Trends como tercer segmento de un control que ya existe: aparece exactamente "en la zona del calendario". Barras por ciclo, línea rosa = media móvil, franja crema = tu rango normal, atípicos rayados. Debajo: predicciones ± y el histórico editable por fila.
C — La grid del mes: los días posteriores al baseline llevan el badge del número de ciclo hueco con borde discontinuo (en vez de relleno lila): la cuadrícula misma cuenta que son días "en gracia". Solo un estado más del badge existente.

6 · Wireframe — Progress (el asomo)

CYCLE STABILITY, AMPLIADA

Cycle Stability
Volatile · Aligned · Stable
Duración de ciclos · últimos 6
29 · 33 · 28 · 47 · 31 · 31 días — variación ±2.1
View Trends ›
La tarjeta Cycle Stability gana la franja "Duración de ciclos": mini-barras de los últimos 6 + valores + desviación. Es su sitio natural: la estabilidad se calcula con esa varianza — el score enseña sus ingredientes. "View History" pasa a "View Trends" y salta al segmento del Calendario. Las filas "Last cycle / Best score" (hoy a "—") se rellenan con datos reales. Progress no duplica el gráfico grande: se asoma y enlaza.

7 · Fases de ejecución (Epic M)

M-0 · Hotfix (OTA, esta semana) — sábado/locale del calendario, cap visual del anillo, banda de gracia mínima con CTA "Registrar período". Sin nativo.
M-1 · Memoria + Trends v1cycle_records + stats + cierre por botón/registro con confirmación y resumen del ciclo guardado + avisos in-app de cambio de fase + segmento Trends + cabecera viva + badges huecos + franja en Progress. SQL + OTA.
M-2 · Rebaseline automático — media móvil de 3 con outliers recortados, mensaje de recalibración, histórico editable.
M-3 · Push + engagement — expo-notifications (nativo → build), doc de notificaciones de las founders como semilla, push de cambio de fase y cierre de ciclo, mensajes contextuales anti-abandono ("día nublado, ¿cómo está tu ánimo?").

8 · Tres decisiones para founders

PreguntaOpciones
D9¿Cuántos días de gracia antes del primer aviso?A · +3 días (recomendada)  ·  B · +5  ·  C · el mismo día del fin esperado
D10¿El rebaseline se aplica solo o pide confirmación?A · Automático con aviso informativo (recomendada) — "users should not think"  ·  B · Sugerido, la usuaria acepta
D11¿Push de fin de ciclo activado por defecto?A · Sí, con opt-out en Settings (recomendada)  ·  B · Opt-in explícito

Responder por WhatsApp con "D9-A, D10-A, D11-A" (o la combinación que sea) basta.

9 · Qué necesitamos de Lucía y Pilar

1 · El doc de notificaciones que preparasteis — es la semilla directa del registro de M-3.

2 · El copy en vuestra voz: los bocadillos del journey (§3) son propuestas — ajustad tono, palabras y emojis; los llevo a 14 idiomas después.

3 · Validación de umbrales (Pilar, criterio de salud): gracia +3/+5, deriva +8, cuidado +14, rango sin fricción 21–45, admisible 15–90, outlier fuera de media salvo 2 seguidos.

4 · Figma sobre estos wireframes (Lucía): cabecera viva A, segmento Trends B, badges huecos C y franja de Progress — con vuestro sistema visual (los míos son esqueletos de trabajo, no diseño final).

✅ Resumen en una frase — El día 37 no era un bug: era la app callándose algo importante. Guardamos cada ciclo real, avisamos con cariño cuando el patrón se rompe, recalibramos solos tras 3 ciclos y lo enseñamos en Trends (Calendario) con un asomo en Progress — la usuaria solo registra hechos; pensar es trabajo nuestro.
NutriSync · Propuesta 31 · Cycle Intelligence (Epic M) · wireframes + customer journey · 1 de agosto de 2026