feat(web): fasting page — live timer, metabolic phase, history (PRD §5.3)
New /fasting route. Editorial layout matching the rest of the app
("CAPITOLO VII / Digiuno intermittente.").
When no active session:
- "Pronto a iniziare" eyebrow + italic call-to-action
- Protocol Select (16:8 default; full set FASTING_PROTOCOLS, hours derived
from PROTOCOL_DEFAULT_MINUTES)
- "Avvia digiuno" CTA → server action that POSTs to /me/fast-events
- Right column: Roman-numeral guide (I-IV) for the four most common protocols
with title + description from messages.json
When a session is active (status=IN_PROGRESS, no endedAt):
- Live timer in massive monospace clamp(3rem,9vw,6.25rem), tabular numerals,
ticking once per second via setInterval
- Italic remaining-time line ("Mancano HH:MM:SS") or "Obiettivo raggiunto."
once the protocol target is reached
- Hairline progress bar; ink while running, pomodoro after target
- "Concludi adesso" / "Concludi" CTA → PATCH with status=COMPLETED
- "Annulla sessione" ghost link → PATCH with status=ABORTED (with confirm())
- Right column: "FASE METABOLICA" with current phase title in pomodoro and
italic description (postprandial 0-4h / glycogenolysis 4-12h / lipolysis
12-18h / ketogenesis 18-24h / autophagy 24h+, PRD §5.3)
- "INIZIATO" and "OBIETTIVO" stats in mono
History below:
- Three big mono stats: completed sessions count, total hours, total sessions
- Last 12 events listed with protocol label in pomodoro italic, italian
short date, status eyebrow, duration in mono
Home gains a fourth NavItem ("Digiuno — Digiuno intermittente").
Verified end-to-end in Chrome: started a 16:8 → live ticking timer at
00:00:04, "Mancano 15:59:55", "Post-prandiale" phase shown.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
4e00c131b9
commit
b79340efb7
6 files changed
+551
No files matched your search
@@ -10,6 +10,7 @@
|
||||
"completeProfile": "Profilo & calcoli",
|
||||
"viewPlan": "Piano della settimana",
|
||||
"viewTracking": "Pesata & misure",
|
||||
"viewFasting": "Digiuno intermittente",
|
||||
"lettura": "Continua la lettura",
|
||||
"inizia": "Inizia",
|
||||
"greeting": "Buongiorno, <name>{name}</name>.",
|
||||
@@ -69,6 +70,77 @@
|
||||
"disclaimer": "Procedendo accetti che i tuoi dati siano trattati come descritto nell'informativa sulla privacy. KetoPath non sostituisce il parere medico."
|
||||
}
|
||||
},
|
||||
"Fasting": {
|
||||
"title": "Digiuno intermittente",
|
||||
"subtitle": "Una finestra alimentare e una di riposo. Il timer scandisce il ritmo, il corpo fa il resto.",
|
||||
"historyTitle": "Storico sessioni",
|
||||
"activeBadge": "Sessione in corso",
|
||||
"inactiveBadge": "Pronto a iniziare",
|
||||
"startCallToAction": "Scegli un protocollo e parti. Il timer continua a scorrere anche se chiudi l'app.",
|
||||
"chooseProtocol": "Protocollo",
|
||||
"start": "Avvia digiuno",
|
||||
"starting": "Avvio…",
|
||||
"saving": "Salvataggio…",
|
||||
"remaining": "Mancano {time}",
|
||||
"reached": "Obiettivo raggiunto. Puoi rompere il digiuno o proseguire.",
|
||||
"completeReached": "Concludi",
|
||||
"completeEarly": "Concludi adesso",
|
||||
"abort": "Annulla sessione",
|
||||
"confirmAbort": "Sei sicuro di voler annullare questa sessione?",
|
||||
"phaseTitle": "Fase metabolica",
|
||||
"phases": {
|
||||
"postprandial": {
|
||||
"label": "Post-prandiale",
|
||||
"description": "Digestione in corso. Insulina alta, glicemia in salita."
|
||||
},
|
||||
"glycogenolysis": {
|
||||
"label": "Glicogenolisi",
|
||||
"description": "Il fegato libera glucosio dalle scorte di glicogeno. L'insulina cala."
|
||||
},
|
||||
"lipolysis": {
|
||||
"label": "Lipolisi",
|
||||
"description": "Le scorte di grasso iniziano a essere mobilitate per produrre energia."
|
||||
},
|
||||
"ketogenesis": {
|
||||
"label": "Chetogenesi",
|
||||
"description": "Il fegato produce corpi chetonici. Le sensazioni mentali si fanno più nitide."
|
||||
},
|
||||
"autophagy": {
|
||||
"label": "Autofagia",
|
||||
"description": "Le cellule riciclano componenti danneggiati. Pulizia interna profonda."
|
||||
}
|
||||
},
|
||||
"startedAt": "Iniziato",
|
||||
"target": "Obiettivo",
|
||||
"protocolGuideTitle": "Guida ai protocolli",
|
||||
"protocolHints": {
|
||||
"FOURTEEN_TEN": {
|
||||
"title": "Inizio dolce",
|
||||
"description": "Adatto in fase di mantenimento o per chi inizia. 10 ore di alimentazione."
|
||||
},
|
||||
"SIXTEEN_EIGHT": {
|
||||
"title": "Lo standard",
|
||||
"description": "Il protocollo più diffuso. Equilibrio tra sostenibilità e benefici metabolici."
|
||||
},
|
||||
"EIGHTEEN_SIX": {
|
||||
"title": "Più aggressivo",
|
||||
"description": "Inizia a sollecitare la chetogenesi. Per chi è già adattato."
|
||||
},
|
||||
"TWENTY_FOUR": {
|
||||
"title": "Avanzato",
|
||||
"description": "Solo 4 ore di alimentazione. Da praticare con regolarità ma non quotidianamente."
|
||||
}
|
||||
},
|
||||
"emptyHistory": "Nessuna sessione registrata. Avvia il primo digiuno per iniziare a costruire la serie.",
|
||||
"statCompleted": "Sessioni concluse",
|
||||
"statTotal": "Ore totali",
|
||||
"statSessions": "Sessioni totali",
|
||||
"status": {
|
||||
"IN_PROGRESS": "In corso",
|
||||
"COMPLETED": "Completata",
|
||||
"ABORTED": "Annullata"
|
||||
}
|
||||
},
|
||||
"Tracking": {
|
||||
"title": "Pesata e misure",
|
||||
"subtitle": "Pochi numeri, una volta a settimana. La tendenza emerge dalla regolarità — non dalla pesata di oggi.",
|
||||
|
||||
Reference in new issue
Block a user