Plan Phase 14 (CRM Attio-style & Fix) into 3 waves: data-layer foundation (query helpers + server actions), LeadTable raw-table rewrite with inline edit/tags, and isolated bug fixes for CRM-10/11/12.
9.5 KiB
Roadmap: ClientHub v2.1 Offer Studio + Proposal AI
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, Planning): Rifare la UX di catalogo/offerte in stile database-view (Notion-like), ristrutturare il workspace progetto (Preventivo → Servizi Attivi, rimozione Forecast), ricostruire il CRM in stile Attio/Pipedrive (inline edit, tag, fix bug residui), e chiudere il loop commerciale con un builder preventivi AI + invio email + auto-provisioning. Numerazione fasi: v2.0 ha chiuso a Phase 10; v2.1 parte da Phase 11.
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 Composition Drag&Drop & CSV Import - Composizione offerte via drag&drop dal catalogo (
@dnd-kit) con totale live; import CSV one-shot - Phase 13: Workspace — Servizi Attivi - Tab "Preventivo" rimossa (UI-only), "Offerte" → "Servizi attivi" (one-shot/ricorrenti + tracking incassi mensili), rimozione pagina Forecast
- Phase 14: CRM Attio-style & Fix - Redesign
/admin/leadsstile Attio/Pipedrive (inline edit + tag), fix FollowUpWidget IT / LeadForm types / SendQuoteModal rami irraggiungibili - Phase 15: Dashboard Revenue Stats - Dashboard admin mostra statistiche revenue mensile (ex
/admin/forecast) daproject_offers— BLOCCATA, attesa mockup utente - Phase 16: Proposal AI — Data Foundations & Auto-Provisioning - Campo Stripe Payment Link su offerte/preventivi + auto-provisioning (client+progetto+fasi+pagamenti) all'accettazione
- Phase 17: Proposal AI — Builder, Pagina Pubblica & Email - Builder AI proposta da cliente+offerta+note, redesign
/quote/[token], invio email Resend con link proposta
Phase Details
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 Composition Drag&Drop & CSV Import
Goal: L'utente compone un'offerta trascinando servizi dal catalogo con un totale live durante il drag, e può importare un CSV one-shot per popolare servizi/offerte esistenti
Mode: ui
Depends on: Phase 11 (tabella services unificata)
Requirements: OFFER-11, OFFER-12
Success Criteria (what must be TRUE):
- L'utente compone un'offerta trascinando servizi dal catalogo (
@dnd-kit) - Durante il drag, il totale dell'offerta si aggiorna live
- L'utente importa un CSV one-shot per popolare servizi/offerte esistenti (solo seed iniziale, non sync continuo) Plans: TBD UI hint: yes Status: Pending planning
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: 3 plans Plans:
- 14-01-PLAN.md — Data-layer foundation: getLeadsWithTags/getLeadFieldOptions query helpers + updateLeadField/addLeadTag/removeLeadTag/renameLeadTag server actions (requireAdmin-guarded)
- 14-02-PLAN.md — LeadTable raw-table rewrite (inline edit + status dropdown + tag multi-select), LeadsSearch instant filter, page wiring, LeadDetail tags
- 14-03-PLAN.md — Bug fixes: FollowUpWidget Italian translation (CRM-10), LeadForm typed useForm (CRM-11), SendQuoteModal dead branch removal (CRM-12) UI hint: yes — riferimento design Pipedrive/Attio (confermato dall'utente 2026-06-13) Status: Planned
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
Progress
| Phase | Plans | Status | Completed |
|---|---|---|---|
| 11. Catalog Database-View UX & Legacy Consolidation | 4/4 | ✅ Done | 2026-06-13 |
| 12. Offer Composition Drag&Drop & CSV Import | — | Pending planning | — |
| 13. Workspace — Servizi Attivi | — | Pending planning | — |
| 14. CRM Attio-style & Fix | — | Pending planning (in progress) | — |
| 15. Dashboard Revenue Stats | — | Blocked (mockup utente) | — |
| 16. Proposal AI — Data Foundations & Auto-Provisioning | — | Pending planning | — |
| 17. Proposal AI — Builder, Pagina Pubblica & Email | — | Pending planning | — |