-- Lead-Capture: Empfänger einer Visitenkarte teilt seine eigenen -- Kontaktdaten zurück. Der Mitarbeiter sieht das im Admin-Backend. -- ==================================================================== -- Privacy: keine PII über Trusted-Token, kein Cookie-Tracking. -- Lead wird mit der Karte verknüpft (employee_id) — der Mitarbeiter -- (oder Admin) sieht in seiner Detail-Page eine Liste der Leads. -- -- Spam-Mitigation auf App-Ebene: Honeypot-Feld + Rate-Limit pro IP. -- Hier nur Datenmodell. create table if not exists public.card_leads ( id uuid primary key default gen_random_uuid(), employee_id uuid not null references public.employees(id) on delete cascade, -- Kontaktdaten der Person, die die Karte zurück geteilt hat: first_name text not null, last_name text not null, email text, phone text, company text, position text, message text, -- Metadata: created_at timestamptz not null default now(), source_url text, -- URL der Karte, von der aus geteilt wurde read_at timestamptz, -- "gelesen" markieren im Admin -- DSGVO: explizite Einwilligung muss true sein. consent_given boolean not null default false ); create index if not exists card_leads_employee_id_idx on public.card_leads (employee_id, created_at desc); create index if not exists card_leads_unread_idx on public.card_leads (employee_id) where read_at is null; alter table public.card_leads enable row level security; -- Service-Role-only — anon kann zwar inserten (über Server Action mit -- Service-Role), aber nicht lesen.