62d5e97f39
- SUMMARY.md for Plan 02 (ServiceWithTags + 4 new server actions) - STATE.md: advance to Plan 3/4, record metrics and decision - REQUIREMENTS.md: mark OFFER-07/08/09 backend foundation complete
116 lines
6.3 KiB
Markdown
116 lines
6.3 KiB
Markdown
# 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) | Pending |
|
||
| 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 | Pending |
|
||
| 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*
|