VMAD · Sistema Completo Documentado
38 pantallas V1 · 4 V2 · Navegación · Comportamiento players · Estados · DB Schema
🎵 Player Devocional · estados
Audio de Harold/Yina en cada paso del árbol
⚪ Idle · no iniciado
Botón ▶ visible · barra en cero
⏳ Cargando · buffering
Spinner animado · toca ▶
▶ Reproduciendo
Player mini visible · waveform animada
⏸ Pausado
Progreso conservado · botón ▶ visible
⚠️ Sin conexión
Mensaje amable · botón reintentar
📱 Player mini · comportamiento
Fijo encima del nav · aparece al iniciar audio
Invisible
No hay audio activo → no aparece
Visible · slide up
Al iniciar audio → aparece con animación
Toca ⌃ expandir → Player grande aparece desde abajo (sheet modal)
Cambiar de pantalla → Player mini persiste en todas las pantallas
Completar día → Player mini desaparece suavemente
📖 Player Biblia · comportamiento
Audio de cada capítulo via API.Bible
Botón 🎧 visible en header
Siempre disponible en el lector
Cargando capítulo...
API.Bible fetching · spinner pequeño
Player dentro del lector
Versículo actual resaltado mientras se lee
Si viene del devocional: al salir de Biblia → el audio devocional retoma desde donde estaba
🔄 Comportamiento entre players
Solo un audio activo a la vez
Devocional activo → abre Biblia audio
Devocional pausa. Biblia inicia. Al volver, devocional puede retomar.
Auriculares desconectados
Audio pausa automáticamente. Muestra toast "Audio pausado".
App va a segundo plano
Audio continúa en segundo plano. Muestra en bandeja del sistema.
Llamada entrante
Audio pausa. Al terminar llamada, opción de retomar aparece.
📡 Sin conexión
Usuario abre la app sin internet
→ Muestra contenido del día cacheado localmente. El texto siempre disponible offline. Audio muestra "Requiere conexión".
Usuario intenta comparar versiones Biblia
→ Solo muestra versión descargada (RVR1960 principal). Resto: "Disponible con conexión".
🔋 Racha y ausencias
Usuario no abre la app en 24h
→ Notificación "Tu árbol te espera". Racha no rota hasta medianoche del día siguiente.
Racha en riesgo (después de las 8 PM sin leer)
→ Pantalla especial al abrir: "⚠️ Tu racha de X días termina hoy". Urgencia sin ansiedad.
📅 Cambio de mes
Usuario en el último día del mes
→ El día siguiente muestra el nuevo mes cargado automáticamente. Sin pantalla de espera.
Diciembre sangra en enero (semanas 54-57)
→ La numeración continúa sin reiniciarse. La app detecta el año calendario para mostrar la fecha correcta.
👨👩👧 Familia
Un perfil familiar completa antes que los demás
→ Panel familiar muestra progreso individual. No hay presión grupal — cada uno a su ritmo.
Niño intenta cambiar al perfil adulto
→ Perfil bloqueado por el administrador familiar (Harold). No se puede cambiar desde el perfil hijo.
📋 users
idPK · uuid
namestring
emailstring · unique
profile_typeadult/youth/pre
plan_idFK → plans
family_idFK → families
current_streakinteger
theme_modelight/dark
📖 devotionals
idPK · uuid
year2026/2027/2028
day_number1-365 · global
datedate
themestring · mes
title_adultstring
title_youthstring
title_prestring
verse_refstring
📝 devotional_content
idPK
devotional_idFK → devotionals
profileadult/youth/pre
langes/en/pt
raiztext · versículo
tallotext · reflexión
hojatext · acción
testimoniotext · pregunta
frutotext · frase
✅ user_progress
idPK
user_idFK → users
devotional_idFK → devotionals
completed_attimestamp
steps_donejson · 1-5
audio_positioninteger · seconds
sharedboolean
💳 plans
idPK
namefree/personal/familia
price_monthlydecimal · EUR
price_annualdecimal · EUR
max_profilesinteger
includes_audioboolean
includes_pdfboolean
revenuecat_idstring
👨👩👧 families
idPK
admin_idFK → users · admin
namestring
max_members5
children_addonboolean