Files
clienthub/.planning/MILESTONES.md
T
simone f7eb7eec23 docs(planning): archivia v2.1/v2.2/v2.3 e documenta v2.4
.planning/ documentava in dettaglio cio che era vecchio e per niente cio
che e in produzione: le fasi 11-22 (v2.1 e v2.2, chiuse a giugno) erano
ancora in phases/ mentre v1.0 e v2.0 stavano gia in milestones/, e il
lavoro degli ultimi due mesi - gate OTP e ciclo di vita dei retainer, cioe
quello che gira su hub.iamcavalli.net - non aveva nessuna cartella.

- phases/{11,12,14} -> milestones/v2.1-phases/, phases/{18..22} ->
  milestones/v2.2-phases/. Ora phases/ contiene solo la milestone in
  corso, che e quello che state.cjs conta per il progresso
- v2.1-ROADMAP.md ricostruito: era l'unica milestone senza archivio,
  interrotta dal reset del 19/06 e mai chiusa formalmente
- v2.3-ROADMAP.md + v2.3-REQUIREMENTS.md: v2.3 e stata eseguita fuori dal
  ciclo GSD, non esistono PLAN/SUMMARY per fase. L'archivio E la doc
- REQUIREMENTS.md riscritto per v2.4 con il backlog reale
- phases/13 e phases/26: SUMMARY ricostruiti da commit, migration e
  STATUS.md. 26 e il primo numero libero
- research/: cancellate 4 varianti dello stesso PITFALLS e FEATURES/
  SUMMARY, superati da PROJECT.md. Diverse anti-feature erano ormai
  contraddette dai fatti (il Kanban e stato costruito in Phase 19,
  l'email in v2.3, il time tracking esiste)
- cancellati UI-RULES.md e DESIGN-SYSTEM.md (CLAUDE.md li dichiara
  superseded: impongono l'inverso della regola attuale) e HANDOFF.md,
  fermo al 13/06
- SECURITY-*.md -> security/: audit chiuso, ma i report restano la doc di
  cosa e stato ruotato e perche
- PROJECT.md/MILESTONES.md/ROADMAP.md allineati: milestone corrente v2.4,
  sessione OTP 90gg non 30, migrazioni fino alla 0016

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 22:38:36 +02:00

8.8 KiB
Raw Blame History

Milestones

v2.4 Post-vendita (Phases 13 + 26, in corso)

Consegnato: 2 fasi, entrambe in produzione e verificate.

Key accomplishments:

  • Ciclo di vita dei servizi ricorrenti (Phase 13, prod 2026-08-01): project_offers.status (attivo/sospeso/cessato) + end_date via migr. 0016; il forecast a 12 mesi smette di sommare un retainer fermo; comandi Sospendi/Riattiva/Cessa nella tab Offerte; il cliente vede stato, "attivo dal / fino al" e canone mensile (RET-01..05)
  • Anteprima admin del portale + toggle password sul login (Phase 26, prod 2026-08-08): ?preview=1 con sessione Auth.js valida apre il portale di un cliente in sola lettura, senza passare dal gate OTP (PREV-01/02, AUTH-09)

Deviazione registrata: vincolo LOCKED #4 — una route /client/* ora legge anche la sessione Auth.js (Phase 26).

Aperto: RET-06 (canoni mensili tracciabili), più il backlog ereditato. Vedi REQUIREMENTS.md.

Fasi: 13-ciclo-vita-servizi-ricorrenti · 26-anteprima-admin-e-login


v2.3 Email & Accesso (Phases 2325, shipped 2026-07-29)

Phases completed: 3 fasi (2325) · eseguite fuori dal ciclo GSD (nessun PLAN/SUMMARY per fase)

Key accomplishments:

  • Resend Setup (Phase 23): resend@6.18.1, src/lib/mailer.ts con Result tipizzato, template OTP in italiano, env configurate su Coolify
  • Schema + Whitelist Admin (Phase 24): migr. 0015 additiva pura applicata a prod — client_emails, otp_codes, clients.sessions_valid_from; sezione "Accessi al portale" in /admin/clients/[id] (OTP-01, OTP-08)
  • OTP Gate + Sessione (Phase 25): codice 6 cifre CSPRNG hashato, TTL 15 min, monouso, max 5 tentativi; cookie HMAC per-cliente, 90 giorni; rate limiting e no-enumeration (OTP-02..07)

Verificata end-to-end in produzione su hub.iamcavalli.net il 2026-07-29: senza cookie il gate non lascia trapelare nessun dato di progetto nell'HTML.

Known deferred items at close: SEND-01/SEND-02 (invio preventivo via email) — rinviati, il mailer resta comunque in prod.

Archive: milestones/v2.3-ROADMAP.md · milestones/v2.3-REQUIREMENTS.md


v2.2 Sales Loop (Phases 1822, shipped 2026-06-20)

Phases completed: 5 phases (1822) · 9 plans · 27 commits · 87 files · +7.349/-842 righe

Key accomplishments:

  • Cleanup & Consolidamento (Phase 18): rimossi Forecast, quote builder manuale e rotta /admin/analytics duplicata; tutte le statistiche admin in un'unica Dashboard (CLEAN-01..04)
  • Pipeline CRM Kanban (Phase 19): board lead 6 colonne stile Pipedrive con drag-drop persistente via @dnd-kit; toggle Lista/Kanban con ricerca integrata; vinto/perso come cambio-colonna manuale (PIPE-01, PIPE-02)
  • Knowledge Base Transcript (Phase 20): tabella client_transcripts applicata a prod via SSH; data layer Drizzle + server actions; UI incolla/elenca/cancella nel dettaglio lead (KB-01, KB-02)
  • Agente AI Preventivo (Phase 21): generateProposalContent() con Claude Opus 4.8 (~$0.44/preventivo); Zod schema 20+ sezioni; AssembledProposal snapshot JSONB; form admin con pre-fill da LeadDetail (AI-01, AI-02)
  • Deck Pubblico (Phase 22): /preventivo/[slug] — deck 20+ slide h-screen con keyboard nav + dots; accept/reject con accepted_at immutabile; PUB-03 email Resend deferred a backlog (PUB-01, PUB-02)

Known deferred items at close: 1 — PUB-03 email Resend (vedi backlog v2.3)

Archive: .planning/milestones/v2.2-ROADMAP.md · .planning/milestones/v2.2-REQUIREMENTS.md


v2.1 Offer Studio + CRM (Phases 1114, parziale — reset 2026-06-19)

Phases completed: 3 phases (11, 12, 14) · fasi 13/15/16/17 congelate/abbandonate/ri-scopate in v2.2

Key accomplishments:

  • Catalog Database-View UX (Phase 11): catalogo services come tabella inline-edit con tag multi-select, quick-add e ricerca istantanea; consolidamento legacy (OFFER-07..10, OFFER-13)
  • Offer Editor Tier A/B/C (Phase 12): editor offerte con matrice checkbox servizi×tier, totale live, prezzo pubblico manuale, tag 4-dimensioni, promessa di trasformazione; 55 servizi reali caricati (OFFER-11, OFFER-15..18)
  • CRM Attio-style (Phase 14): /admin/leads ridisegnata con inline edit + tag multi-select; FollowUpWidget in italiano; LeadForm tipizzato; SendQuoteModal senza rami irraggiungibili (CRM-08..12)

Phase 13 è poi tornata in vita come milestone v2.4, consegnata il 2026-08-01.

Archive: milestones/v2.1-ROADMAP.md (ricostruito il 2026-08-08) · fasi in milestones/v2.1-phases/


v2.0 Business Operations Suite (Phases 710, completato 2026-06-13)

Phases completed: 4 phases (710)

Key accomplishments:

  • Catalogo servizi unificato (tabella services) usato dal quote builder admin — legacy service_catalog/offer_services ancora presenti, consolidamento finale rinviato a v2.1 (Phase 7)
  • Offerte con fasi ordinate (offer_phases/offer_phase_services) e builder preventivo admin (Phase 8)
  • Preventivo pubblico /quote/[token]: stati draft→sent→viewed→accepted/rejected, accepted_at immutabile, raccolta email/note cliente (Phase 9)
  • CRM pipeline lead: CRUD, activity log, reminder follow-up in dashboard (Phase 10, redeployed 2026-06-11 dopo fix migrazioni prod mancanti 0001-0005)
  • Ex-Phase 11 (auto-provisioning al "Vinto") ed ex-Phase 12 (email Resend) non eseguite come pianificate — assorbite nel piano v2.1 "Proposal AI"

v1.0 Client Portal & Offer System (Shipped: 2026-06-10)

Phases completed: 6 phases, 24 plans, 29 tasks

Key accomplishments:

  • Next.js 16.2.6 App Router con TypeScript strict, Tailwind v4, Drizzle ORM + postgres-js per Coolify Postgres, e 10 componenti shadcn/ui installati e pronti.
  • Schema Drizzle ORM completo con 10 tabelle, migration SQL generata e schema live sul database Postgres 16 (Hetzner/Coolify). TypeScript strict compila senza errori.
  • Edge proxy con validazione token, ClientView type system che esclude quote_items, e Server Component che fetcha tutti i dati cliente senza esporre segreti admin. Build Next.js 16 senza errori TypeScript.
  • Tutti i componenti UI della dashboard cliente renderizzati come Server Components con design light & clean in Tailwind v4: header con logo iamcavalli + brand name cliente, progress bar globale, timeline laterale delle fasi con barre per fase e task list, sezione pagamenti con badge stato (zero importi singoli), link documenti esterni e log note read-only.
  • Task 1: scripts/seed.ts
    1. [Rule 1 - Bug] Next.js 16 proxy export name is 'proxy', not 'middleware'
  • Admin home shows all clients with Acconto/Saldo payment badges; new client form inserts client row + two payment stubs via Zod-validated Server Action with nanoid token auto-generation
  • Full-featured admin client workspace with Radix Tabs covering phases/tasks, payments, documents, and comments — all mutations via inline Server Actions with server-side validation.
  • Client-facing approval and comment API routes with token validation, ownership verification, approved_at immutability enforcement, and inline ApproveButton/CommentForm/CommentList wired into the Phase 1 dashboard via PhaseTimeline.
  • Added custom_label text column and made service_id nullable in quote_items via Drizzle schema edit + Neon DDL push — unblocking Wave 2 free-form quote items
  • Vertical slice completo /admin/catalog: NavBar link + pagina catalogo + tabella con edit inline + form aggiunta servizio + soft-delete toggle, con Server Actions protetti da Zod e requireAdmin()
  • Admin quote builder tab with catalog dropdown, freeform toggle, items table with calculated total, and accepted_total editor — all backed by Zod-validated Server Actions with requireAdmin guard.
  • Verifica umana completa: catalogo servizi → preventivo → accepted_total → dashboard cliente, con conferma security constraint quote_items mai esposti
  • NavBar
  • /admin/projects/[id]
  • /api/internal/validate-slug/route.ts
  • Five Offer System tables added to schema.ts and production DB via direct SQL migration, with Phase 4 projects table bootstrapped from existing client data.
  • Full admin CRUD for macro-offers, micro-offers, and offer services at /admin/offers with a client-side checkbox list for service-to-micro assignments and NavBar updated with Forecast and Offerte links.
  • OffersTab client component for assigning micro-offers to projects with inline accepted_total editing, plus active-offers summary section on the client detail page showing public_name per project.
  • Client dashboard now shows active offers per project (public_name + cumulative service price + accepted_total), and /admin/forecast displays a 12-month server-side revenue projection spread from project_offers.accepted_total across duration_months.
  • AdminSidebar.tsx
  • dashboard-queries.ts