f7eb7eec23
.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>
3.2 KiB
3.2 KiB
phase, plan, status, completed_at, requirements_satisfied
| phase | plan | status | completed_at | requirements_satisfied | ||
|---|---|---|---|---|---|---|
| 21-agente-ai-generazione-preventivo | 01 | complete | 2026-06-20 |
|
Plan 21-01 Summary: Agente AI — Generazione Preventivo
What Was Built
Sistema completo di generazione preventivo AI: l'admin seleziona un lead/cliente e un'offerta, il sistema legge i transcript della call e chiama Claude Opus 4.8 per generare una bozza di preventivo strutturata in JSON. La bozza viene salvata nel DB come draft, l'admin la rivede e la pubblica.
Key Files
Created
src/lib/proposal/schema.ts— Zod schemaProposalContent(vision, problems 3-5, solutions, scope, deliverables, timeline, stagesRecap, comparisonMatrix)src/lib/proposal/agent.ts—generateProposalContent(): chiama Claude Opus 4.8, valida output Zod, gestisce JSON wrapping in backticksrc/lib/proposal/assemble.ts—assembleProposal(): fonde content AI + offerta DB (snapshot prezzi) + profilo consulente inAssembledProposalsrc/lib/proposal/profile.ts—CONSULTANT_PROFILE: fonte di verità statica (bio, facts, testimonianze, legal, nextSteps) — editare direttamente per aggiornaresrc/lib/proposal/queries.ts—listProposals,getProposalById,getProposalBySlugcon join leads/clients/offer_macrossrc/app/admin/preventivi/actions.ts—generateProposalDraft,publishProposal,updateProposalTitle,deleteProposal(server actions)src/app/admin/preventivi/page.tsx— lista preventivi admin con stato (bozza/pubblicato/accettato/rifiutato)src/app/admin/preventivi/genera/page.tsx+GeneraProposalForm.tsx— form builder con pre-fill?lead_id=Xda LeadDetailsrc/app/admin/preventivi/[id]/page.tsx— review bozza: titolo editabile, pubblica, eliminasrc/db/migrations/0010_proposals.sql—CREATE TABLE IF NOT EXISTS proposals(id, slug, lead_id, client_id, offer_macro_id, title, content jsonb, model, state, selected_tier, accepted_at immutabile, client_email, client_notes)
Modified
src/db/schema.ts— tabellaproposals+proposalsRelations+ tipiProposal/NewProposalsrc/components/admin/AdminSidebar.tsx— voce "Preventivi" + CTA globale lime "Genera preventivo"src/components/admin/leads/LeadDetail.tsx— pulsante "Genera preventivo" →/admin/preventivi/genera?lead_id=X
Architecture Decisions
| Decisione | Scelta | Motivo |
|---|---|---|
| Output AI | JSON strutturato → Zod validate | Coerenza visiva garantita, zero rischio HTML rotto |
| Storage | content jsonb snapshot completo |
Parser automatico postgres-js, type-safe, immutabile |
| Profile | File profile.ts hardcoded |
No UI necessaria v1, editing diretto semplice |
| Modello | claude-opus-4-8 |
Qualità copywriting strategico superiore |
Requirements Verified
- AI-01: ✅ Admin seleziona cliente+offerta → AI legge transcript + offerta → genera bozza personalizzata
- AI-02: ✅ Admin rivede ed edita il titolo della bozza, la pubblica o elimina prima dell'invio
Post-Deploy Steps Completed
- Migration 0010 applicata a prod via SSH tunnel (2026-06-20 14:29)
ANTHROPIC_API_KEYconfigurata in Coolify (2026-06-20 — fix chiave invalida)