# Requirements — ClientHub v2.1 Offer Studio + Proposal AI **Defined:** 2026-06-13 **Core Value:** Il cliente apre il link e vede esattamente a che punto è il suo progetto, cosa deve ancora succedere e cosa ha già approvato — senza dover scrivere email per chiedere aggiornamenti. v2.0 (Phases 7–10) ha consegnato catalogo unificato, offerte con fasi, preventivo pubblico e CRM pipeline (vedi MILESTONES.md, REQUIREMENTS.md archiviato in `.planning/milestones/v2.0-REQUIREMENTS.md`). v2.1 rifà la UX di catalogo/offerte in stile database-view, ristruttura il workspace progetto, ricostruisce il CRM in stile Attio e chiude il loop commerciale con un builder preventivi AI. ## Offer Studio — Catalogo & Offerte (v1) | ID | Requirement | Status | |----|-------------|--------| | OFFER-07 | L'utente vede ed edita il catalogo `services` come tabella con inline editing (click su cella → edit → invio salva) | Complete | | OFFER-08 | L'utente assegna tag multi-select a servizi/offerte, creando nuovi tag al volo senza uscire dalla tabella | Complete | | OFFER-09 | L'utente aggiunge un nuovo servizio/offerta tramite riga vuota in fondo alla tabella (nome + invio) | Complete | | OFFER-10 | L'utente filtra/cerca servizi e offerte istantaneamente (ricerca client-side, nessun reload) | Complete | | OFFER-11 | L'utente compone un'offerta trascinando servizi dal catalogo (`@dnd-kit`), con totale live aggiornato durante il drag | Pending | | OFFER-12 | L'utente importa un CSV one-shot per popolare servizi/offerte esistenti (solo seed iniziale, non sync continuo) | Pending | | OFFER-13 | I dati legacy di `service_catalog` e `offer_services` sono consolidati in `services` senza perdita (migration additiva) | Pending | ## Workspace Progetto — Servizi Attivi (v1) | ID | Requirement | Status | |----|-------------|--------| | PROJ-06 | La tab "Preventivo" è rimossa dal workspace progetto (solo UI — `quote_items` resta intatta, `accepted_total` resta editabile via tab Pagamenti) | Pending | | PROJ-07 | La tab "Offerte" diventa "Servizi attivi": mostra tutte le offerte assegnate al progetto (`project_offers`) | Pending | | PROJ-08 | L'utente marca ogni "servizio attivo" come one-shot o ricorrente mensile | Pending | | PROJ-09 | Per i servizi ricorrenti, l'utente registra in quali mesi è stata incassata la fattura (schema nuovo, additivo — UI può essere minimale) | Pending | | PROJ-10 | La pagina "Forecast" e la relativa voce di sidebar sono rimosse | Pending | ## CRM Custom Attio-style (v1) | ID | Requirement | Status | |----|-------------|--------| | CRM-08 | La tabella lead (`/admin/leads`) supporta inline editing dei campi principali (status, next_action, ecc.) senza apertura modale | Pending | | CRM-09 | L'utente assegna tag multi-select ai lead, creando nuovi tag al volo | Pending | | CRM-10 | Il `FollowUpWidget` è in italiano, coerente col resto dell'app | Pending | | CRM-11 | Il form lead (`LeadForm`) valida i campi senza workaround di type-relaxation su react-hook-form | Pending | | CRM-12 | Il flusso `SendQuoteModal` (preventivo esistente vs nuovo) non contiene rami di codice irraggiungibili | Pending | ## Dashboard — Revenue Stats (v1, bloccato su mockup utente) | ID | Requirement | Status | |----|-------------|--------| | DASH-11 | La Dashboard admin mostra le statistiche di revenue mensile (ex `/admin/forecast`, calcolate da `project_offers`) | Blocked — attesa mockup dashboard utente | ## Proposal AI (v1) | ID | Requirement | Status | |----|-------------|--------| | PROP-01 | L'admin avvia un builder AI che genera una proposta a partire da cliente + offerta(e) selezionata(e) + note extra fornite manualmente | Pending | | PROP-02 | La pagina pubblica `/quote/[token]` è ridisegnata (HTML/CSS) per presentare la proposta generata | Pending | | PROP-03 | Ogni offerta/preventivo ha un campo "link di pagamento" (Stripe Payment Link) mostrato come CTA nella pagina pubblica | Pending | | PROP-04 | All'accettazione del preventivo, il sistema crea automaticamente cliente + progetto, copia le fasi dall'offerta e configura 1-4 pagamenti (ex-Phase 11 WIN-01..06) | Pending | | PROP-05 | Il sistema invia via email (Resend) il link della proposta pubblica al lead (ex-Phase 12) | Pending | ## v2 Requirements (Deferred) ### Catalogo Avanzato - **OFFER-14**: Sezioni analitiche stile Notion per le offerte (psicologia, rating, performance) ### Accesso Cliente - **AUTH-OTP-01**: Accesso dashboard cliente via OTP email (design pronto, vedi memoria `project_clienthub_otp_access`) ### Architettura - **ARCH-01**: Split di un modulo "compartimento stagno" in deploy separato (solo se il modulo cresce abbastanza da giustificarlo) ## Out of Scope | Feature | Reason | |---------|--------| | Fatturazione e invio fatture | Solo stato pagamenti, gestione contabile fuori | | App mobile nativa | Solo web responsive | | Multi-utente con team | Solo admin singolo per ora | | Prezzi singoli visibili al cliente | Vede solo il totale accettato (vincolo LOCKED) | | File hosting | Documenti solo come URL esterni (vincolo v1, ancora valido) | | Database esterno o Excel come fonte dati | Postgres unica fonte di verità — il problema è la UX, non il dato | | Notion-clone completo (sezioni psicologia/rating/performance) | Troppo complesso per v1, vedi v2 Requirements | | Deploy separati per modulo (architettura OMC multi-app) | Non finché un modulo non cresce abbastanza da giustificarlo | ## Traceability Popolata dal roadmapper durante la creazione della roadmap. | Requirement | Phase | Status | |-------------|-------|--------| | OFFER-07 | Phase 11 | Complete | | OFFER-08 | Phase 11 | Complete | | OFFER-09 | Phase 11 | Complete | | OFFER-10 | Phase 11 | Complete | | OFFER-13 | Phase 11 | Pending | | OFFER-11 | Phase 12 | Pending | | OFFER-12 | Phase 12 | Pending | | PROJ-06 | Phase 13 | Pending | | PROJ-07 | Phase 13 | Pending | | PROJ-08 | Phase 13 | Pending | | PROJ-09 | Phase 13 | Pending | | PROJ-10 | Phase 13 | Pending | | CRM-08 | Phase 14 | Pending | | CRM-09 | Phase 14 | Pending | | CRM-10 | Phase 14 | Pending | | CRM-11 | Phase 14 | Pending | | CRM-12 | Phase 14 | Pending | | DASH-11 | Phase 15 | Blocked | | PROP-03 | Phase 16 | Pending | | PROP-04 | Phase 16 | Pending | | PROP-01 | Phase 17 | Pending | | PROP-02 | Phase 17 | Pending | | PROP-05 | Phase 17 | Pending | --- *Requirements defined: 2026-06-13* *Last updated: 2026-06-13 after milestone v2.1 kickoff*