Compare commits

...

2 Commits

Author SHA1 Message Date
simone 857af5c182 docs(handoff): triage user feedback — lead detail bug fixed, tab restructuring decisions, Attio as CRM UX benchmark
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 22:14:31 +02:00
simone ea206854a9 fix(leads): await params Promise in lead detail page (Next.js 16)
Lead detail 500'd because params was accessed synchronously;
Next 16 App Router passes params as a Promise. Same pattern
already used correctly in /quote/[token].

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 22:13:26 +02:00
2 changed files with 27 additions and 8 deletions
+22 -4
View File
@@ -32,12 +32,30 @@ Il catalogo/offerte che abbiamo costruito è "lento e macchinoso" rispetto a Not
5. **Pipeline finale**: Catalogo servizi → Offer Builder → **Preventivo Builder AI** (pesca cliente + offerta + info extra fornite dall'utente, genera proposta) → pagina pubblica HTML/CSS (base già live su `/quote/[token]`) → **link pagamento in fondo** (Stripe Payment Link come campo dell'offerta).
6. **Ordine**: prima la UX veloce del dato ("Offer Studio", che assorbe anche i fix CRM/design segnalati ieri), poi l'AI ("Proposal AI"). L'AI è l'ultimo miglio.
### Feedback utente raccolto e triagiato (2026-06-12)
**BUG (diagnosticato e FIXATO, commit `ea20685` — DA PUSHARE):**
- `/admin/leads/[id]` non caricava → in Next.js 16 `params` è una Promise, la pagina lo usava sincrono → `id` undefined → 500. Fix: `await params`. Build verificata. **Controllare che non rientri lo stesso pattern in pagine future.**
**Decisioni strutturali (vanno nella fase "Offer Studio", non fix isolati):**
1. **Eliminare la tab "Preventivo" dal workspace progetto** (vecchio sistema quote_items per cliente, vedi screenshot sessione 2026-06-12) — è un doppione: il Preventivo Builder app è l'unico flusso, anche per nuovi preventivi a già clienti. ⚠️ ATTENZIONE: solo rimozione UI — la tabella `quote_items` NON si tocca (storico + LOCKED constraints); capire dove finisce l'editing di `clients.accepted_total` (oggi sta in quella tab) — probabilmente settato dal flusso di accettazione quote o dalla nuova tab.
2. **Nuova tab "Servizi attivi"** al suo posto: offerte attive del cliente — alcune one-shot, altre **ricorrenti mensili**. La tab "Offerte" esistente probabilmente si **ingloba** qui (l'utente è aperto: "la teniamo o la inglobiamo") — motivo: sui già clienti si attivano offerte senza passare dal preventivo.
3. **Eliminare la tab "Forecast"** dalla sidebar; le statistiche di revenue mensile vanno **nella Dashboard**.
4. **CRM: copiare Attio** come riferimento UX (tabelle veloci, inline editing, tag, viste). Tutto custom in casa, NESSUN tool esterno. (Confermato dopo discussione Pipedrive/GoHighLevel/Attio: Attio = benchmark, non acquisto.)
**Backlog dichiarato:**
- Tracking incassi per mese sulle offerte ricorrenti (in che mese è stata incassata ogni fattura) → statistiche fatturato mese per mese. Da progettare nello schema di "Servizi attivi" (campo/tabella incassi) anche se la UI arriva dopo.
**Fix minori noti (da assorbire quando si tocca l'area):** FollowUpWidget in inglese (resto app in italiano), LeadForm 365 righe con type-relaxation su react-hook-form, SendQuoteModal logic flow sistemato in fretta.
### Prossima sessione (l'utente passa a Sonnet per l'esecuzione)
1. **Ripianificare la roadmap GSD**: definire milestone/fasi "Offer Studio" e "Proposal AI" (sostituiscono/ridefiniscono le vecchie Phase 11 auto-provisioning e 12 Resend — da ridiscutere dove collocarle). Usare `/gsd-new-milestone` o ridefinire le fasi correnti — far decidere all'utente.
2. **Raccogliere dall'utente l'elenco puntuale dei problemi CRM** visti il 2026-06-11 (design + funzionali + strutturali) e incorporarli nel ridisegno, NON fixarli in isolamento.
3. L'utente vuole **fornire un suo design/mockup** per le dashboard ("belle e utili") — chiederglielo prima di disegnare la UI; usarlo come contratto UI della fase (`/gsd-ui-phase`).
4. Candidati fix già noti da ieri (se si toccano quelle aree): FollowUpWidget in inglese (resto app in italiano), LeadForm 365 righe con type-relaxation su react-hook-form, SendQuoteModal logic flow sistemato in fretta.
1. **Pushare il fix `ea20685`** se non già fatto (serve conferma utente per push su main).
2. **Ripianificare la roadmap GSD**: milestone/fasi "Offer Studio" (catalogo+offerte UX Attio-like, ristrutturazione tab progetti di cui sopra, CRM rifinito) e "Proposal AI" (builder AI → pagina pubblica → link pagamento). Le vecchie Phase 11 auto-provisioning e 12 Resend vanno ricollocate — far decidere all'utente.
3. L'utente vuole **fornire un suo design/mockup** per le dashboard — chiederglielo prima di disegnare la UI; usarlo come contratto UI (`/gsd-ui-phase`).
---
+5 -4
View File
@@ -2,15 +2,16 @@ import { notFound } from "next/navigation";
import { getLeadById, getActivityLog, getUpcomingReminders } from "@/lib/lead-service";
import { LeadDetail } from "@/components/admin/leads/LeadDetail";
export default async function LeadDetailPage({ params }: { params: { id: string } }) {
const lead = await getLeadById(params.id);
export default async function LeadDetailPage({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
const lead = await getLeadById(id);
if (!lead) {
notFound();
}
const activities = await getActivityLog(params.id);
const reminders = await getUpcomingReminders(params.id);
const activities = await getActivityLog(id);
const reminders = await getUpcomingReminders(id);
return <LeadDetail lead={lead} activities={activities} reminders={reminders} />;
}