--- phase: 20-knowledge-base-cliente plan: 03 type: execute wave: 3 depends_on: - 20-01 - 20-02 files_modified: - src/components/admin/leads/TranscriptModal.tsx - src/components/admin/leads/LeadDetail.tsx - src/app/admin/leads/[id]/page.tsx autonomous: true requirements: - KB-02 must_haves: truths: - "L'admin può aggiungere un transcript dalla pagina dettaglio lead via modal" - "I transcript sono elencati in call_date DESC con titolo, data formattata e anteprima del testo" - "Il testo completo di ogni transcript è espandibile/collassabile" - "L'admin può eliminare un transcript con un bottone 'Elimina'" - "La sezione Transcript appare dopo lo Storico Attività nel LeadDetail" artifacts: - path: "src/components/admin/leads/TranscriptModal.tsx" provides: "Modal form per aggiungere transcript (call_date, title opzionale, content textarea)" exports: ["TranscriptModal"] - path: "src/components/admin/leads/LeadDetail.tsx" provides: "Sezione Transcript con lista collassabile e azione Elimina" contains: "Transcript" - path: "src/app/admin/leads/[id]/page.tsx" provides: "getTranscripts(id) nel Promise.all + prop transcripts passato a LeadDetail" contains: "getTranscripts" key_links: - from: "src/components/admin/leads/TranscriptModal.tsx" to: "src/app/admin/leads/actions.ts" via: "import addTranscript" pattern: "addTranscript" - from: "src/components/admin/leads/LeadDetail.tsx" to: "src/app/admin/leads/actions.ts" via: "import deleteTranscript" pattern: "deleteTranscript" - from: "src/app/admin/leads/[id]/page.tsx" to: "src/lib/lead-service.ts" via: "import getTranscripts" pattern: "getTranscripts" --- Creare il componente `TranscriptModal` (form per aggiungere transcript) e integrare la sezione Transcript in `LeadDetail`, con wiring nella page server. Purpose: Completa il loop KB-02 — l'admin può incollare transcript datati e vederli elencati in ordine cronologico nel profilo lead. I dati sono pronti per essere letti dall'agente AI in Phase 21. Output: UI completa funzionante — modal di aggiunta + lista con expand/collapse + elimina. @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md @.planning/phases/20-knowledge-base-cliente/20-CONTEXT.md @.planning/phases/20-knowledge-base-cliente/20-02-SUMMARY.md Da LogActivityModal.tsx — pattern modal con react-hook-form + zod + shadcn Dialog: ```typescript "use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; // ... action import ... import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Button } from "@/components/ui/button"; export function LogActivityModal({ leadId }: { leadId: string }) { const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); const form = useForm({ resolver: zodResolver(schema), defaultValues: { lead_id: leadId, activity_date: new Date().toISOString().split("T")[0], ... }, }); async function onSubmit(data) { setLoading(true); try { const result = await logActivity(data); if (result.success) { setOpen(false); form.reset({...}); } } finally { setLoading(false); } } return ( ...