Files
clienthub/.planning/REQUIREMENTS.md
T
simone 3b1f49d059 docs(v2.0): finalize roadmap + requirements — phases 7-11 approved for planning
- Upgrade PROJECT.md: v2.0 Business Operations Suite (unified catalog, offers with phases, public quotes, CRM pipeline, auto-provisioning)
- Create REQUIREMENTS.md sections: CAT-U, OFFER-B, QUOTE, CRM, WIN requirements for phases 7-11
- Extend ROADMAP.md: 5-phase structure (7-11), 14-19 days total, risk/flag registry
- Archive v1.0 milestone (phases 1-6, complete)
- Switch STATE.md to v2.0, status=planning
- Create research documents: STACK.md, FEATURES_v2.0.md, ARCHITECTURE.md, PITFALLS.md, SUMMARY.md

Ready for: /gsd-plan-phase 7

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-11 06:01:59 +02:00

173 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Requirements — ClientHub v2.0 Business Operations Suite
## Dashboard Cliente (v1)
| ID | Requirement | Status |
|----|-------------|--------|
| DASH-01 | Ogni cliente ha un URL segreto univoco (nessun login richiesto) | Pending |
| DASH-02 | La dashboard mostra nome cliente, nome brand, brief del progetto e stato attuale | Pending |
| DASH-03 | Il piano è strutturato per fasi con milestone e task all'interno di ogni fase | Pending |
| DASH-04 | I task hanno stato visibile (da fare / in corso / fatto) | Pending |
| DASH-05 | Il cliente può approvare i deliverable dalla sua area | Pending |
| DASH-06 | Il cliente può lasciare commenti su task e deliverable | Pending |
| DASH-07 | Il cliente vede solo il totale del preventivo accettato (non i prezzi dei singoli servizi) | Pending |
| DASH-08 | Il cliente vede lo stato dei pagamenti: acconto 50% (da saldare / inviata / saldato) e saldo 50% (da saldare / inviata / saldato) | Pending |
| DASH-09 | Link a documenti e file (Google Drive, PDF, deliverable) | Pending |
| DASH-10 | Storico note e decisioni prese nel tempo | Pending |
## Area Amministratore (v1)
| ID | Requirement | Status |
|----|-------------|--------|
| ADMIN-01 | Vista di tutti i clienti con stato sintetico | Pending |
| ADMIN-02 | Gestione completa di ogni cliente: fasi, task, documenti, pagamenti | Pending |
| ADMIN-03 | Preventivo completo con dettaglio servizi (non visibile al cliente) | Pending |
## Catalogo Servizi (v1)
| ID | Requirement | Status |
|----|-------------|--------|
| CAT-01 | File/database dei servizi con prezzi e cosa è incluso | Pending |
| CAT-02 | Usato come base per la generazione assistita dei preventivi | Pending |
## Progetti Multi-Project (Phase 4)
| ID | Requirement | Status |
|----|-------------|--------|
| PROJ-01 | Ogni cliente può avere N progetti; ogni progetto ha workspace indipendente (fasi, pagamenti, preventivo, timer) | Pending |
| PROJ-02 | La dashboard cliente mostra tabs per 2+ progetti; con 1 progetto mostra direttamente il workspace senza selettore | Pending |
| PROJ-03 | La pagina /admin/projects elenca tutti i progetti con €/h reale e timer; /admin/projects/[id] è il workspace progetto | Pending |
| PROJ-04 | Il link cliente supporta slug personalizzabile (/c/mario-rossi) con fallback al token esistente | Pending |
| PROJ-05 | Analytics profittabilità per progetto: ore lavorate, accepted_total, €/h reale vs target_hourly_rate globale | Pending |
## Offer System (Phase 5)
| ID | Requirement | Status |
|----|-------------|--------|
| OFFER-01 | Admin può creare macro-offerte (es. Entry Offer, Signature Offer, Retainer) con nome interno, nome pubblico e promessa di trasformazione macro | Pending |
| OFFER-02 | Ogni macro-offerta ha micro-offerte figlie (es. Entry A/B/C) con nome interno, nome pubblico, promessa di trasformazione micro e durata in mesi | Pending |
| OFFER-03 | Admin può creare servizi con nome, prezzo e descrizione della trasformazione; ogni servizio è assegnabile a più micro-offerte via multi-select (many-to-many) | Pending |
| OFFER-04 | Admin può assegnare una o più micro-offerte a un progetto; admin vede le offerte attive per ogni progetto e cliente | Pending |
| OFFER-05 | La dashboard cliente mostra le offerte attive con nome pubblico, prezzo cumulativo dei servizi inclusi e prezzo finale accettato in evidenza; se ha più offerte le vede tutte | Pending |
| OFFER-06 | Admin ha una vista revenue forecast dei 12 mesi successivi basata su offerte attive, durata e accepted_total; breakdown mensile con totale fatturato per mese | Pending |
## Catalogo Unificato & Offer Builder (Phase 78)
| ID | Requirement | Status |
|----|-------------|--------|
| CAT-U-01 | Un'unica tabella `services` unifica `service_catalog` + `offer_services`; migrazione zero data loss con audit trail (`migrated_from`) | Phase 7 |
| CAT-U-02 | Admin `/admin/catalog` list/add/edit/soft-delete per i servizi singoli (nome, prezzo_unitario, attivo) | Phase 7 |
| OFFER-B-01 | Offer = nome + tag tipo (Entry/Signature/Retainer/custom) + fasi ordinate; fasi indipendenti l'una dall'altra (es. Signature A/B/C non ereditate) | Phase 8 |
| OFFER-B-02 | `/admin/offers/[id]/edit` two-column builder: left colonna servizi (ricerca), right colonna fasi con drag&drop tra fasi e dentro fase (reorder) | Phase 8 |
| OFFER-B-03 | Drag&drop salva per singolo drop con optimistic update client-side + validazione server; versioning previene race condition da multi-tab edit | Phase 8 |
## Quote Builder & Public Proposal Pages (Phase 9)
| ID | Requirement | Status |
|----|-------------|--------|
| QUOTE-01 | `/admin/quotes/new`: select cliente + 1-3 offerte + override prezzo per ciascuna offerta + genera link pubblico `/quote/[token]` | Phase 9 |
| QUOTE-02 | Public `/quote/[token]` pagina multistep (Zod validazione): Step 1 (overview) → Step 2 (tier A/B/C selection + prezzi + fasi) → Step 3 (summary + accept/decline) | Phase 9 |
| QUOTE-03 | Accept CTA → POST `/api/public/quote/accept?token=X` con cattura email (opzionale) + note opzionali; registra timestamp accepted_at immutabile | Phase 9 |
| QUOTE-04 | Quote token: nanoid 21 char (~122 bits), unico, validato in proxy come `/client/[token]` (nessun login sessione); rate limit 3 views/min per IP | Phase 9 |
| QUOTE-05 | Mai esporre `quote_items` (prezzi per servizio) via public API; client API vede solo `accepted_total` (server-side ClientView type enforces) | Phase 9 |
## CRM Pipeline & Activity Logging (Phase 10)
| ID | Requirement | Status |
|----|-------------|--------|
| CRM-01 | Lead CRUD: `/admin/leads` list table (name, email, company, status, last_contact_date, next_action) con create/edit/delete | Phase 10 |
| CRM-02 | Lead detail page `/admin/leads/[id]`: full profilo, activity log (reverse chronological), quote(s) sent, actions menu (log activity, send quote, mark won) | Phase 10 |
| CRM-03 | Pipeline stages: Contacted → Qualified → Proposal Sent → Negotiating → Won / Lost; transizioni via dropdown (manual di default) | Phase 10 |
| CRM-04 | Activity logging: tipi (call, email, meeting, note); ogni attività: type, date, durata (opz), notes; auto-aggiorna lead.last_contact_date | Phase 10 |
| CRM-05 | "Log activity" modal: <10 sec UX (type dropdown, date picker, notes textarea, save) — bassa tolleranza per data entry lunghi | Phase 10 |
| CRM-06 | Follow-up reminders widget in dashboard: "Follow up today" (leads dove last_contact_date < oggi - 7 giorni); click → jump lead detail | Phase 10 |
| CRM-07 | "Send Quote" button in lead detail: select existing quote o crea nuovo; update lead.last_quote_sent + status → "Proposal Sent" | Phase 10 |
## Auto-Onboarding on Win (Phase 11)
| ID | Requirement | Status |
|----|-------------|--------|
| WIN-01 | "Mark as Won" button in lead detail (o auto-triggered da public quote accept); idempotency: call 2 volte = idempotent, stesso client token | Phase 11 |
| WIN-02 | winLead(leadId, quoteId): crea client (name da lead, token = nanoid), crea project (name = company/offer name), copia offer fasi → project fasi | Phase 11 |
| WIN-03 | 1-4 pagamenti: user sceglie split template (50/50, 3-part, 4-part, custom); registra importo accepted_total da quote | Phase 11 |
| WIN-04 | Generate client dashboard link (`/client/[token]`), invia via email al lead (copy-paste OK, email automation deferred Phase 12+) | Phase 11 |
| WIN-05 | Quote accept da public link `/quote/[token]` auto-aggiorna lead.status → "Proposal Sent" + trigga win (auto-onboarding) | Phase 11 |
| WIN-06 | Copy offer phases → project phases: tutte le fasi copiate con status = "upcoming", le fasi modificabili dopo (template immutabile, instance editable) | Phase 11 |
## Flusso Claude (v3 — deferred to Phase 13+)
| ID | Requirement | Status |
|----|-------------|--------|
| CLAUDE-01 | Onboarding guidato step-by-step via chat per aggiungere un nuovo cliente | Deferred |
| CLAUDE-02 | Generazione del piano a fasi basato dal brief | Deferred |
| CLAUDE-03 | Generazione preventivo assistita (Claude suggerisce struttura offerta, tu approvi) | Deferred |
## Out of Scope (v2.0)
- Fatturazione e invio fatture (solo stato pagamenti)
- App mobile nativa (solo web responsive)
- Multi-utente con team (solo admin singolo)
- Prezzi singoli visibili al cliente (solo totale accettato)
- Email automation (manual copy-paste OK per MVP)
- Lead scoring / predictive analytics
- Team collaboration
- Lead de-duplication (manual link on Win)
- Proposal expiry logic (open indefinitely)
- BullMQ persistent reminders (in-app computed, persistent deferred Phase 12+)
## Traceability
| Requirement | Phase | Status |
|-------------|-------|--------|
| DASH-01 | Phase 1 | Pending |
| DASH-02 | Phase 1 | Pending |
| DASH-03 | Phase 1 | Pending |
| DASH-04 | Phase 1 | Pending |
| DASH-07 | Phase 1 | Pending |
| DASH-08 | Phase 1 | Pending |
| DASH-09 | Phase 1 | Pending |
| DASH-10 | Phase 1 | Pending |
| ADMIN-01 | Phase 2 | Pending |
| ADMIN-02 | Phase 2 | Pending |
| DASH-05 | Phase 2 | Pending |
| DASH-06 | Phase 2 | Pending |
| CAT-01 | Phase 3 | Pending |
| CAT-02 | Phase 3 | Pending |
| ADMIN-03 | Phase 3 | Pending |
| PROJ-01 | Phase 4 | Pending |
| PROJ-02 | Phase 4 | Pending |
| PROJ-03 | Phase 4 | Pending |
| PROJ-04 | Phase 4 | Pending |
| PROJ-05 | Phase 4 | Pending |
| OFFER-01 | Phase 5 | Pending |
| OFFER-02 | Phase 5 | Pending |
| OFFER-03 | Phase 5 | Pending |
| OFFER-04 | Phase 5 | Pending |
| OFFER-05 | Phase 5 | Pending |
| OFFER-06 | Phase 5 | Pending |
| CAT-U-01 | Phase 7 | Phase 7 |
| CAT-U-02 | Phase 7 | Phase 7 |
| OFFER-B-01 | Phase 8 | Phase 8 |
| OFFER-B-02 | Phase 8 | Phase 8 |
| OFFER-B-03 | Phase 8 | Phase 8 |
| QUOTE-01 | Phase 9 | Phase 9 |
| QUOTE-02 | Phase 9 | Phase 9 |
| QUOTE-03 | Phase 9 | Phase 9 |
| QUOTE-04 | Phase 9 | Phase 9 |
| QUOTE-05 | Phase 9 | Phase 9 |
| CRM-01 | Phase 10 | Phase 10 |
| CRM-02 | Phase 10 | Phase 10 |
| CRM-03 | Phase 10 | Phase 10 |
| CRM-04 | Phase 10 | Phase 10 |
| CRM-05 | Phase 10 | Phase 10 |
| CRM-06 | Phase 10 | Phase 10 |
| CRM-07 | Phase 10 | Phase 10 |
| WIN-01 | Phase 11 | Phase 11 |
| WIN-02 | Phase 11 | Phase 11 |
| WIN-03 | Phase 11 | Phase 11 |
| WIN-04 | Phase 11 | Phase 11 |
| WIN-05 | Phase 11 | Phase 11 |
| WIN-06 | Phase 11 | Phase 11 |
| CLAUDE-01 | Phase 13 (v3) | Deferred |
| CLAUDE-02 | Phase 13 (v3) | Deferred |
| CLAUDE-03 | Phase 13 (v3) | Deferred |