- 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>
18 KiB
Roadmap: ClientHub — v2.1 (chiuso) → v2.2 Sales Loop
Overview
v2.0 (Phases 1–10, Complete): ClientHub è una suite operativa completa — catalogo servizi unificato, offerte con fasi, preventivo pubblico (/quote/[token]), CRM pipeline lead con activity log. Archiviato in .planning/milestones/v2.0-ROADMAP.md.
v2.1 (Phases 11–17) — PARZIALE / CHIUSO dal reset 2026-06-19: ha consegnato Offer Studio (Phase 11 catalogo database-view + Phase 12 offer editor tier A/B/C) e CRM Attio-style (Phase 14). Le fasi residue 13/15/16/17 sono congelate/abbandonate/ri-scopate (vedi sotto).
v2.2 (Phases 18–22, Sales Loop) — ATTIVO: dopo che l'utente ha articolato il flusso commerciale reale (piano .claude/plans/glittery-sprouting-pudding.md), il focus diventa il loop di vendita: cleanup dei doppioni → pipeline CRM Kanban (Pipedrive-style) → knowledge base transcript per cliente → agente AI che genera il preventivo → pagina pubblica /preventivo/[slug] + email. Numerazione GSD continua: v2.2 parte da Phase 18. Le fasi R1–R5 mappano su Phase 18–22.
Phases
- Phase 11: Catalog Database-View UX & Legacy Consolidation - Catalogo
servicescome tabella con inline edit, tag multi-select, quick-add, ricerca istantanea; consolidamentoservice_catalog/offer_services→services - Phase 12: Offer Editor — Tier A/B/C, Tag & Prezzo Pubblico - Editor offerte completo: lista filtrabile + 3 tier (A/B/C) via matrice checkbox sui servizi
services, totale live per tier, prezzo pubblico manuale, tag multi-dimensione, promessa di trasformazione (completed 2026-06-18) - [~] Phase 13: Workspace — Servizi Attivi - ❌ CONGELATA (reset 2026-06-19): tocca il post-vendita lasciato invariato; ripescabile in futuro
- Phase 14: CRM Attio-style & Fix - Redesign
/admin/leadsstile Attio/Pipedrive (inline edit + tag), fix FollowUpWidget IT / LeadForm types / SendQuoteModal rami irraggiungibili (completed 2026-06-14) - [~] Phase 15: Dashboard Revenue Stats - ❌ ABBANDONATA (reset 2026-06-19): mockup mai arrivato; analytics confluisce nella dashboard via CLEAN-03
- [~] Phase 16: Proposal AI — Data Foundations & Auto-Provisioning - ❌ RI-SCOPATA in v2.2; Stripe Payment Link + auto-provisioning → backlog post-R5
- [~] Phase 17: Proposal AI — Builder, Pagina Pubblica & Email - ❌ RI-SCOPATA in v2.2 (Phase 21/22 con transcript + flusso chiaro)
- Phase 18: Cleanup & Consolidamento - Rimuovi Forecast + quote builder manuale; fondi
/admin/analyticsnella dashboard; archivia fasi residue v2.1 - Phase 19: Pipeline CRM Kanban - Board lead stile Pipedrive con colonne per stage + drag-drop; vinto/perso come cambio-colonna manuale
- Phase 20: Knowledge Base Cliente - Schema additivo + UI per incollare transcript datati multipli per lead/cliente (completed 2026-06-20)
- Phase 21: Agente AI — generazione preventivo - Builder: admin sceglie cliente+offerta, l'AI (Claude) legge transcript + offerta e genera bozza preventivo; admin revisiona (completed 2026-06-20)
- Phase 22: Pagina pubblica preventivo + email - Pagina pubblica HTML/CSS deck 20+ slide, accept/reject → DB; PUB-03 email Resend deferred a backlog (completed 2026-06-20)
Phase Details
Reset 2026-06-19: i dettagli delle fasi 13/15/16/17 sotto sono conservati per storico ma quelle fasi sono cancellate/congelate (vedi checklist Phases sopra e Progress sotto). Le fasi attive sono 18–22 (R1–R5), in fondo a questa sezione.
Phase 11: Catalog Database-View UX & Legacy Consolidation
Goal: L'utente vede ed edita il catalogo servizi come una tabella stile database (Notion-like) — inline editing, tag multi-select, quick-add, ricerca istantanea — su un'unica tabella services consolidata senza perdita di dati legacy
Mode: migration + ui
Depends on: Phase 10 (CRM Pipeline, ultima fase v2.0)
Requirements: OFFER-07, OFFER-08, OFFER-09, OFFER-10, OFFER-13
Success Criteria (what must be TRUE):
- L'utente edita inline ogni cella del catalogo
services(click sulla cella → edit → invio salva) senza apertura di modali - L'utente assegna tag multi-select a servizi/offerte, creando nuovi tag al volo senza uscire dalla tabella
- L'utente aggiunge un nuovo servizio tramite riga vuota in fondo alla tabella (nome + invio)
- L'utente filtra/cerca servizi e offerte istantaneamente (ricerca client-side, nessun reload)
- I dati legacy di
service_catalogeoffer_servicessono consolidati inservicessenza perdita (migration additiva, audit trailmigrated_from/migrated_id) Plans: 4 plans Plan list:
- 11-01-PLAN.md
- 11-02-PLAN.md
- 11-03-PLAN.md
- 11-04-PLAN.md
UI hint: yes
Status: ✅ Complete (2026-06-13) — migration 0007 (
services.fase) applicata in prod, commit pushato sugitea/main
Phase 12: Offer Editor — Tier A/B/C, Tag & Prezzo Pubblico
Goal: L'admin crea e modifica offerte complete da una lista filtrabile: editor con 3 tier (A/B/C) composti via matrice di checkbox dai servizi del catalogo unificato services, totale servizi live per tier, prezzo pubblico manuale per tier, tag multi-dimensione (categoria/ticket/tipo/obiettivo) e promessa di trasformazione strutturata. I servizi disponibili nella matrice sono filtrati per categoria offerta (entry/signature/retainer), designazione già impostata sul servizio a livello di catalogo.
Mode: ui + schema
Depends on: Phase 11 (tabella services unificata + sistema tag polimorfico)
Requirements: OFFER-11, OFFER-15, OFFER-16, OFFER-17, OFFER-18
Success Criteria (what must be TRUE):
- L'admin compone un'offerta a 3 tier (A/B/C) assegnando i servizi del catalogo
servicestramite matrice di checkbox; il totale servizi di ogni tier si aggiorna live - Ogni offerta ha tag su 4 dimensioni (categoria, ticket, tipo, obiettivo) creabili al volo, riusando il sistema tag di Phase 11
- Per ogni tier l'admin imposta un "prezzo pubblico" manuale, distinto e indipendente dal totale dei servizi
- Ogni offerta ha una promessa di trasformazione strutturata (Cliente Ideale / Risultato / tempo / Pain / Metodo)
- La lista offerte è filtrabile per categoria e supporta l'archiviazione (mostra/nascondi archiviate) Note: Import CSV/Notion (ex OFFER-12) spostato a fase futura su decisione utente (2026-06-14, "per ora saltiamo") — vedi REQUIREMENTS.md Plans: 5 plans Plan list: Wave 1
- 12-01-PLAN.md — Schema: offer_macros/offer_micros additive columns (category, ticket, is_archived, transformation promise, tier_letter, public_price) + offer_tier_services junction table, migration 0008 + idempotent push script Wave 2 (blocked on Wave 1 completion)
- 12-02-PLAN.md — BLOCKING checkpoint: apply migration 0008 to production database (SSH+docker exec, manual) Wave 3 (blocked on Wave 2 — prod migration applied before schema-dependent code)
- 12-03-PLAN.md — Query layer (getOfferEditorData/getOfferListCards/getOfferFieldOptions) + server actions (saveOfferEditor/toggleOfferArchived/tag CRUD/createOfferMacro) Wave 4 (blocked on Wave 3 completion)
- 12-04-PLAN.md — Offer list page redesign: category filter chips, archive toggle, card grid, "+ Nuova Offerta" CTA
- 12-05-PLAN.md — Offer editor detail page: tags (4 dimensions), services matrix (tier A/B/C checkboxes + live totals), prezzo pubblico, promessa di trasformazione, Salva/Annulla/Archivia
UI hint: yes — riferimento mockup utente 2026-06-14 (lista card per categoria + editor con matrice servizi×tier)
Status: Planned (2026-06-14) — ready for
/gsd-execute-phase 12
Phase 13: Workspace — Servizi Attivi
Goal: Il workspace progetto sostituisce le tab "Preventivo"/"Offerte"/"Forecast" con un'unica tab "Servizi attivi" che traccia servizi one-shot e ricorrenti con incassi mensili, senza perdere accepted_total/quote_items
Mode: ui + schema
Depends on: Phase 5 (project_offers), Phase 9 (flusso accepted_total via quote)
Requirements: PROJ-06, PROJ-07, PROJ-08, PROJ-09, PROJ-10
Success Criteria (what must be TRUE):
- La tab "Preventivo" è rimossa dal workspace progetto (solo UI —
quote_itemsresta intatta,accepted_totalresta editabile via tab Pagamenti) - La tab "Offerte" diventa "Servizi attivi" e mostra tutte le offerte assegnate al progetto (
project_offers) - L'utente marca ogni "servizio attivo" come one-shot o ricorrente mensile
- Per i servizi ricorrenti, l'utente registra in quali mesi è stata incassata la fattura (schema nuovo, additivo)
- La pagina "Forecast" e la relativa voce di sidebar sono rimosse Plans: TBD UI hint: yes Status: Pending planning
Phase 14: CRM Attio-style & Fix
Goal: La tabella lead (/admin/leads) è ridisegnata in stile Attio/Pipedrive — inline editing dei campi principali e tag multi-select — e i bug residui del modulo CRM (FollowUpWidget non in italiano, LeadForm con type-relaxation, SendQuoteModal con rami irraggiungibili) sono risolti
Mode: ui
Depends on: Phase 10 (CRM Pipeline base)
Requirements: CRM-08, CRM-09, CRM-10, CRM-11, CRM-12
Success Criteria (what must be TRUE):
- La tabella lead supporta inline editing dei campi principali (status, next_action, ecc.) senza apertura di modale
- L'utente assegna tag multi-select ai lead, creando nuovi tag al volo
- Il
FollowUpWidgetè interamente in italiano, coerente col resto dell'app - Il form lead (
LeadForm) valida i campi senza workaround di type-relaxation su react-hook-form - Il flusso
SendQuoteModal(preventivo esistente vs nuovo) non contiene rami di codice irraggiungibili Plans: 5/5 plans complete Plans: Wave 1
- 14-01-PLAN.md — Data-layer foundation: getLeadsWithTags/getLeadFieldOptions query helpers + updateLeadField/addLeadTag/removeLeadTag/renameLeadTag server actions (requireAdmin-guarded)
- 14-03-PLAN.md — Bug fixes: FollowUpWidget Italian translation (CRM-10), LeadForm typed useForm (CRM-11), SendQuoteModal dead branch removal (CRM-12)
Wave 2 (blocked on Wave 1 completion)
- 14-02-PLAN.md — LeadTable raw-table rewrite (inline edit + status dropdown + tag multi-select), LeadsSearch instant filter, page wiring, LeadDetail tags UI hint: yes — riferimento design Pipedrive/Attio (confermato dall'utente 2026-06-13) Status: ✅ Complete (2026-06-14) — 5/5 success criteria verified, code review 0 critical/6 warnings/3 info
Phase 15: Dashboard Revenue Stats
Goal: La Dashboard admin mostra le statistiche di revenue mensile (ex /admin/forecast), calcolate da project_offers
Mode: ui
Depends on: Phase 13 (modello dati Servizi attivi)
Requirements: DASH-11
Success Criteria (what must be TRUE):
- La Dashboard admin mostra un breakdown di revenue mensile calcolato da
project_offersPlans: TBD UI hint: yes Status: Blocked — attesa mockup dashboard dall'utente (isolata/skippabile, non blocca Phase 16/17)
Phase 16: Proposal AI — Data Foundations & Auto-Provisioning
Goal: Ogni offerta/preventivo ha un campo link di pagamento Stripe mostrato come CTA pubblica, e all'accettazione del preventivo il sistema crea automaticamente cliente + progetto, copia le fasi dall'offerta e configura 1-4 pagamenti Mode: schema + automation Depends on: Phase 9 (flusso accettazione preventivo), Phase 13 (Servizi attivi come target del provisioning) Requirements: PROP-03, PROP-04 Success Criteria (what must be TRUE):
- Ogni offerta/preventivo ha un campo "link di pagamento" (Stripe Payment Link) mostrato come CTA nella pagina pubblica
- All'accettazione del preventivo, il sistema crea automaticamente cliente + progetto, copia le fasi dall'offerta e configura 1-4 pagamenti Plans: TBD UI hint: yes Status: Pending planning
Phase 17: Proposal AI — Builder, Pagina Pubblica & Email
Goal: Un builder AI genera una proposta a partire da cliente + offerta(e) selezionata(e) + note extra; la pagina pubblica /quote/[token] è ridisegnata; il link della proposta viene inviato via email (Resend) al lead
Mode: ai + ui
Depends on: Phase 16
Requirements: PROP-01, PROP-02, PROP-05
Success Criteria (what must be TRUE):
- L'admin avvia un builder AI che genera una proposta a partire da cliente + offerta(e) selezionata(e) + note extra fornite manualmente
- La pagina pubblica
/quote/[token]è ridisegnata (HTML/CSS) per presentare la proposta generata - Il sistema invia via email (Resend) il link della proposta pubblica al lead Plans: TBD UI hint: yes Status: Pending planning
v2.2 — Sales Loop (fasi attive)
Phase 18: Cleanup & Consolidamento
Goal: Sgomberare il campo dai doppioni e dal peso morto prima di costruire il loop di vendita, senza perdere dati. Mode: ui (solo rimozioni/rotte, nessun drop di tabelle) Depends on: nessuna (può partire subito) Requirements: CLEAN-01, CLEAN-02, CLEAN-03, CLEAN-04 Success Criteria (what must be TRUE):
- La pagina Forecast (
/admin/forecast) e la sua voce di sidebar non esistono più - Il quote builder manuale (
/admin/quotes/new) e il suo entry point non esistono più - Le statistiche annuali di
/admin/analyticssono visibili nella Dashboard/admincome vista unica; la rotta/admin/analyticsè eliminata (nessun doppione) - Le fasi v2.1 residue (13/15/16/17) sono marcate cancellate/congelate nel planning Plans: 3 plans Plan list:
- 18-01-PLAN.md — Rimozione Forecast + Quote Builder manuale (CLEAN-01, CLEAN-02)
- 18-02-PLAN.md — Fusione analytics nella Dashboard, eliminazione rotta /admin/analytics (CLEAN-03)
- 18-03-PLAN.md — Verifica CLEAN-04 planning docs + build check + checkpoint visuale Status: ✅ Complete (2026-06-19) — CLEAN-01..04 verificati, build verde
Phase 19: Pipeline CRM Kanban
Goal: I lead si gestiscono in una board Kanban stile Pipedrive con drag-drop tra gli stage; vinto/perso è un cambio-colonna manuale.
Mode: ui
Depends on: Phase 14 (CRM lead esistente). Riusa @dnd-kit (pattern KanbanBoard progetti).
Requirements: PIPE-01, PIPE-02
Success Criteria (what must be TRUE):
- I lead sono mostrati in colonne per stage (contacted → qualified → proposal_sent → negotiating → won/lost) con drag-drop che aggiorna
leads.status - La tabella inline-edit esistente resta disponibile come vista alternativa
- Spostare un lead su "Vinto"/"Perso" è l'azione manuale che ne registra l'esito Plans: 1 plan Plan list:
- 19-01-PLAN.md — LeadsKanbanBoard + LeadsViewToggle + page wiring (PIPE-01, PIPE-02) Status: ✅ Complete (2026-06-19) — board 6 colonne, drag-drop persistente, toggle Lista/Kanban, search integrata
Phase 20: Knowledge Base Cliente
Goal: Memorizzare i transcript datati delle call (multipli per lead/cliente) e mostrarli nel profilo, pronti per essere dati in pasto all'AI. Mode: schema + ui Depends on: Phase 14 (lead) / clienti. Migration a prod via SSH PRIMA del codice dipendente. Requirements: KB-01, KB-02 Success Criteria (what must be TRUE):
- Esiste uno schema additivo
client_transcripts(lead_id/client_id, testo, data, titolo/tipo, created_at) - L'admin incolla un transcript con data dal dettaglio lead/cliente
- I transcript sono elencati in ordine cronologico nel profilo Plans: 3 plans Plans:
- 20-01-PLAN.md — Migration SQL 0009_client_transcripts (BLOCKING checkpoint prod)
- 20-02-PLAN.md — Schema Drizzle + getTranscripts + addTranscript/deleteTranscript actions
- 20-03-PLAN.md — TranscriptModal + sezione LeadDetail + wiring page.tsx
Status: Planned (2026-06-19) — ready for
/gsd-execute-phase 20
Phase 21: Agente AI — generazione preventivo
Goal: L'admin seleziona cliente + offerta; l'agente AI (Claude) legge i transcript + i dati dell'offerta e genera una bozza di preventivo personalizzata, che l'admin può rivedere ed editare. Mode: ai + ui Depends on: Phase 20 (transcript) + DB Offerte (Phase 11/12, fatto) Requirements: AI-01, AI-02 Success Criteria (what must be TRUE):
- Dal builder l'admin sceglie cliente + offerta e lancia la generazione
- L'AI produce una bozza di preventivo che riflette i transcript del cliente e i contenuti dell'offerta
- L'admin rivede/edita la bozza prima di pubblicarla
Note: decisioni di design AI (modello Claude, prompt, storage output) in fase di planning dedicata
Status: Pending planning —
/gsd-plan-phase 21
Phase 22: Pagina pubblica preventivo + email
Goal: Pubblicare la proposta come pagina pubblica a /preventivo/[slug], con accept/reject che si riflette nel CRM, e inviare il link via email.
Mode: ui
Depends on: Phase 21 (modello dati proposta). Evolve la meccanica di /quote/[token].
Requirements: PUB-01, PUB-02, PUB-03
Success Criteria (what must be TRUE):
- La proposta generata è visibile come pagina pubblica HTML/CSS a
/preventivo/[slug] - Il cliente accetta/rifiuta dalla pagina; l'esito è disponibile lato admin per la conferma vinto/perso nel CRM
- Il link della proposta viene inviato al lead via email (Resend)
Status: Pending planning —
/gsd-plan-phase 22
Progress
| Phase | Plans | Status | Completed |
|---|---|---|---|
| 11. Catalog Database-View UX & Legacy Consolidation | 4/4 | ✅ Done | 2026-06-13 |
| 12. Offer Editor — Tier A/B/C, Tag & Prezzo Pubblico | 5/5 | ✅ Done | 2026-06-18 |
| 13. Workspace — Servizi Attivi | — | ❌ Congelata (v2.2) | — |
| 14. CRM Attio-style & Fix | 3/3 | ✅ Done | 2026-06-14 |
| 15. Dashboard Revenue Stats | — | ❌ Abbandonata (v2.2) | — |
| 16. Proposal AI — Data Foundations & Auto-Provisioning | — | ❌ Ri-scopata (v2.2) | — |
| 17. Proposal AI — Builder, Pagina Pubblica & Email | — | ❌ Ri-scopata (v2.2) | — |
| 18 (R1). Cleanup & Consolidamento | 3/3 | ✅ Done | 2026-06-19 |
| 19 (R2). Pipeline CRM Kanban | 1/1 | ✅ Done | 2026-06-19 |
| 20 (R3). Knowledge Base Cliente (transcript) | 3/3 | ✅ Done | 2026-06-20 |
| 21 (R4). Agente AI — generazione preventivo | 1/1 | ✅ Done | 2026-06-20 |
| 22 (R5). Pagina pubblica preventivo + email | 1/1 | ✅ Done (PUB-03 deferred) | 2026-06-20 |