fdcc938252
- Migration 0010: tabella proposals (id, slug, lead_id, client_id, offer_macro_id, content jsonb, state, selected_tier, accepted_at) applicata a prod via SSH tunnel - @anthropic-ai/sdk@0.105.0 installato; ANTHROPIC_API_KEY in .env.local - src/lib/proposal/: schema Zod ProposalContent, agente Claude Opus 4.8, assemble (AI + offerta DB + config consulente), queries, profile.ts - Admin: /admin/preventivi lista + /genera (pre-fill ?lead_id=X) + /[id] review - Sidebar: voce Preventivi + CTA globale lime "Genera preventivo" - LeadDetail: pulsante "Genera preventivo" → /admin/preventivi/genera?lead_id=X - Pagina pubblica /preventivo/[slug]: deck 20+ slide light-mode iamcavalli, navigazione frecce + dot + keyboard, accept/reject con guard immutabilità - STATE.md aggiornato (80%), 21-PLAN.md scritto nel formato GSD Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.9 KiB
TypeScript
40 lines
1.9 KiB
TypeScript
import type { ProposalContent } from "@/lib/proposal/schema";
|
|
import { CheckCircle2 } from "lucide-react";
|
|
|
|
type Props = { scope: ProposalContent["scope"] };
|
|
|
|
export function ScopeSection({ scope }: Props) {
|
|
return (
|
|
<div className="min-h-screen flex items-center px-16 py-24">
|
|
<div className="grid grid-cols-2 gap-12 w-full">
|
|
{/* Scope */}
|
|
<div className="border border-primary/20 bg-primary/5 rounded-xl p-8 space-y-4">
|
|
<div className="w-10 h-10 rounded-full border border-primary flex items-center justify-center">
|
|
<div className="w-5 h-5 rounded-full bg-primary/30" />
|
|
</div>
|
|
<p className="text-xs font-mono tracking-widest text-primary uppercase">Scope · Capitolo del lavoro</p>
|
|
<h3 className="text-xl font-medium text-foreground">{scope.scopeTitle}</h3>
|
|
<p className="text-sm text-muted-foreground leading-relaxed">{scope.scopeBody}</p>
|
|
</div>
|
|
|
|
{/* Obiettivi */}
|
|
<div className="border border-border bg-muted/30 rounded-xl p-8 space-y-4">
|
|
<div className="w-10 h-10 rounded-full border border-border flex items-center justify-center">
|
|
<div className="w-0 h-0 border-l-[6px] border-l-transparent border-r-[6px] border-r-transparent border-b-[10px] border-b-foreground" />
|
|
</div>
|
|
<p className="text-xs font-mono tracking-widest text-muted-foreground uppercase">Obiettivi · Punti d'arrivo</p>
|
|
<h3 className="text-xl font-medium text-foreground">Quattro risultati concreti, misurabili al termine.</h3>
|
|
<ul className="space-y-2">
|
|
{scope.objectives.map((obj, i) => (
|
|
<li key={i} className="flex items-start gap-2 text-sm text-foreground">
|
|
<CheckCircle2 size={14} className="text-primary mt-0.5 shrink-0" />
|
|
<span dangerouslySetInnerHTML={{ __html: obj }} />
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|