Files
simone cbfd959c36 docs(v2.2): close planning docs — SUMMARY.md 21+22, req Complete
- 21-01-SUMMARY.md: agente AI Opus 4.8, schema Zod, proposals table
- 22-01-SUMMARY.md: deck 20+ slide 100vh, accept/reject, PUB-03 deferred
- REQUIREMENTS.md: PIPE/KB/AI-01/02 + PUB-01/02 → Complete; PUB-03 deferred
- ROADMAP.md: Phase 20/21/22 → [x] con date
- STATE.md: status complete, percent 100, 5/5 fasi

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 18:24:00 +02:00

3.0 KiB
Raw Permalink Blame History

phase, plan, status, completed_at, requirements_satisfied, known_gaps
phase plan status completed_at requirements_satisfied known_gaps
22-pagina-pubblica-preventivo 01 complete 2026-06-20
PUB-01
PUB-02
PUB-03 (email Resend — non implementata, deferred to backlog)

Plan 22-01 Summary: Pagina Pubblica Preventivo + Deck

What Was Built

Pagina pubblica /preventivo/[slug] che presenta la proposta generata come deck interattivo di 20+ slide navigabili (frecce, tasti keyboard, dot navigator). Il cliente sceglie il tier A/B/C e accetta/rifiuta dalla pagina; l'esito si riflette nel DB con accepted_at immutabile. PUB-03 (invio email Resend) non implementato — il link va condiviso manualmente.

Key Files

Created

  • src/app/preventivo/[slug]/page.tsx — server component pubblico; gestisce stati: draft (blocca accesso), published (mostra + accept), accepted/rejected (mostra con stato)
  • src/app/preventivo/[slug]/actions.tsacceptProposal (guard accepted_at immutabile + selected_tier validato A/B/C), rejectProposal
  • src/components/public/proposal/ProposalDeck.tsx — deck client component: navigazione keyboard (←/→), dot cliccabili, topbar fissa (titolo + counter), bottombar fissa (frecce + dots); h-screen overflow-hidden per 100vh per slide
  • src/components/public/proposal/sections/ — 20 componenti slide:
    • CoverSection, VisionSection, IndexSection
    • ChapterDivider (×5), StrategistSection, FactsSection, TestimonialsSection
    • ProblemNodeSection, SynthesisDiagramSection
    • SolutionNodeSection, SolutionSynthesisSection
    • ScopeSection, DeliverablesSection, TimelineSection
    • PricingSection, StagesRecapSection, ComparisonMatrixSection
    • NextStepsSection, AcceptSection, ClosingSection

Architecture Decisions

Decisione Scelta Motivo
Layout h-screen overflow-hidden per slide Nessun scroll di pagina, navigazione slide-by-slide
Navigazione Keyboard + dots + click frecce Universale, funziona su desktop e touch
Accettazione accepted_at immutabile (guard server action) Pattern coerente con deliverables.approved_at
Tier selezione Radio A/B/C prima dell'accettazione Cliente sceglie l'opzione, l'esito è univoco
Email Non implementata (PUB-03) Scope minimo, link condiviso manualmente per ora

Requirements Verified

  • PUB-01: Proposta visibile come pagina pubblica HTML a /preventivo/[slug], deck 20+ slide
  • PUB-02: Cliente accetta/rifiuta dalla pagina; state + accepted_at + selected_tier aggiornati nel DB; admin vede esito nella lista preventivi

Known Gap

  • PUB-03 — Email Resend: il link preventivo non viene inviato automaticamente. Va copiato dall'admin e condiviso manualmente (es. via WhatsApp/email). Da implementare nella prossima milestone come prima feature.

Fix Post-Deploy

  • 2026-06-20: fix h-screen overflow-hidden su tutte le slide (erano min-h-screen, causavano scroll di pagina)
  • 2026-06-20: ANTHROPIC_API_KEY mancante in Coolify — aggiunta via PHP artisan + redeploy