Files
AkeshanandClaude Opus 4.8 d8b6772148 Interim-UI-Handover: 55 Vorschau-Screens fuer David (AD-28)
Uebergabe der Dev-Interim-Screens aus HiveGrid-Cloud an den Wireframes-Vault.
INDEX + 7 Domaenen-Seiten (CRM, Leads, HR, Files/Tasks, Audit/Notifications,
Integrations, Auth/RBAC) mit je Screen: D-*-Ziel, Archetyp, Route, VM,
benoetigte ~/ui-Elemente, Actions, States. Layout bleibt Davids freie Hand.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 17:35:12 +02:00

6.8 KiB

P07 · Leads (R-P7 → D-P7)

Interim-UI-Referenz (AD-28). Lauffähige <X>Page-Vorschau-Screens aus ~/ui (VM als Prop) im gebundelten 03 Quellen und Referenzen/hivegrid-cloud/-Checkout. Layout = Davids freie Hand — Listen nennen nur Elemente/Daten/Aktionen.

LeadInboxPage · D-P7 „Lead-Inbox" (Archetyp A2 + Triage)

  • Interim-Screen: apps/web/app/components/screens/leads/LeadInboxPage.tsx
  • Route(n): /:tenant/leads (routes/app.$tenant/leads._index.tsx)
  • Daten (VM): LeadListVM — packages/view-models/src/leads/lead-list.vm.ts
  • Benötigte UI-Elemente (KEIN Layout): BadgeFeedback, Button, Checkbox, EmptyState, Select, Table, TextInput · Icons: FeatherBarChart2, FeatherPlus
  • Interaktionen (Actions): onApplyFilter(query: LeadListQuery), onSetStatus(leadId, status), onBulkStatus(leadIds[], status), onNextPage(), onNew(), onStatistics(); zusätzliche Datenpunkte: Filter (Suche/Quelle/Spam ausblenden/Converted zeigen), Bulk-Status-Select, Zeilen-Marker (duplicate/spam/converted), Per-Zeile Qualify/Spam, „nächste Seite", SSE-Realtime-Hint (sseHref), Admin-Quicklinks (sourcesHref/antiSpamHref)
  • States: Empty (EmptyState — leere Liste emptyHeadlineKey/emptyBodyKey; Modul-off = leads.list.locked) / Loading (synchron im Loader, kein Spinner; submitting-Flag an Bulk-Button) / Permission-Denied (404 auf Route bei fehlendem leads.read_own)
  • Davids Delta (offen):
    • Überschriebene/geänderte Spec-Punkte:
    • Neue UI/UX-Entscheidungen:
    • Subframe-Screen-Link(s):
    • Offene Fragen an Dev:

LeadDetailPage · D-P7 „Lead-Detail" (Archetyp A3) + „Lead → Projekt" (A5)

  • Interim-Screen: apps/web/app/components/screens/leads/LeadDetailPage.tsx
  • Route(n): /:tenant/leads/:id (routes/app.$tenant/leads.$id.tsx)
  • Daten (VM): LeadDetailVM — packages/view-models/src/leads/lead-detail.vm.ts
  • Benötigte UI-Elemente (KEIN Layout): BadgeFeedback, Breadcrumbs, Button, Card, Select, TextArea, TextInput · Icons: keine
  • Interaktionen (Actions): onSubmit(intent, fields?) — Intents: update (Stammdaten vorname/nachname/email/telefon/message/freigabe), setStatus (status), convert (kontaktId → Lead→Projekt, kein Modal-Zwang); Anzeige: Status-/Marker-Badges, Spam-Score+Reason, DSGVO-Auto-Delete-Hinweis, „konvertiert"-Badge
  • States: Empty (kein Data → leerer Container-Shell) / Loading (synchron; submitting an Save/Convert) / Permission-Denied (404 auf Route; Schreibfelder via canWrite disabled)
  • Davids Delta (offen):
    • Überschriebene/geänderte Spec-Punkte:
    • Neue UI/UX-Entscheidungen: (Pipeline-/Start-Status-Auswahl beim Convert ist getrackter design-nachzug — Backend nimmt nur projektId/kontaktId)
    • Subframe-Screen-Link(s):
    • Offene Fragen an Dev:

LeadNewPage · D-P7 „Manueller Lead-Eintrag" (Archetyp A4)

  • Interim-Screen: apps/web/app/components/screens/leads/LeadNewPage.tsx
  • Route(n): /:tenant/leads/new (routes/app.$tenant/leads.new.tsx)
  • Daten (VM): kein @hivegrid/view-models-VM — lokaler Formular-Draft LeadNewFields (quelle, vorname, nachname, email, telefon, message)
  • Benötigte UI-Elemente (KEIN Layout): BadgeFeedback, Breadcrumbs, Button, Card, Select, TextArea, TextInput · Icons: keine
  • Interaktionen (Actions): onCreate(fields: LeadNewFields); Submit disabled bis mind. ein Identitätsfeld gefüllt (hasIdentity)
  • States: Empty (n/a — reines Formular) / Loading (submitting an Submit-Button) / Permission-Denied (404 auf Route); Fehler via errorKey-Badge
  • Davids Delta (offen):
    • Überschriebene/geänderte Spec-Punkte:
    • Neue UI/UX-Entscheidungen:
    • Subframe-Screen-Link(s):
    • Offene Fragen an Dev:

LeadStatisticsPage · D-P7 „Lead-Statistiken" (Archetyp A2 + KPI-Kit)

  • Interim-Screen: apps/web/app/components/screens/leads/LeadStatisticsPage.tsx
  • Route(n): /:tenant/leads/statistics (routes/app.$tenant/leads.statistics.tsx)
  • Daten (VM): LeadStatisticsVM — packages/view-models/src/leads/lead-statistics.vm.ts
  • Benötigte UI-Elemente (KEIN Layout): Breadcrumbs, Card, StatsCard · Icons: FeatherInbox
  • Interaktionen (Actions): keine Callbacks (read-only); Navigation zurück via listHref; Datenpunkte: KPI-Kacheln (kpis), Aufschlüsselung nach Quelle (byQuelle) und Status (byStatus)
  • States: Empty (kein Data → leerer Container-Shell; keine dedizierte EmptyState-Komponente) / Loading (synchron im Loader) / Permission-Denied (404 auf Route)
  • Davids Delta (offen):
    • Überschriebene/geänderte Spec-Punkte:
    • Neue UI/UX-Entscheidungen: (reichere Breakdowns — Reaktionszeit, per-Owner, Wochentag, Trend-Charts — noch nicht vom Service geliefert, getrackter design-nachzug)
    • Subframe-Screen-Link(s):
    • Offene Fragen an Dev:

LeadSourcesAdminPage · D-P7 „Quellen-Verwaltung" (Archetyp A2/A6)

  • Interim-Screen: apps/web/app/components/screens/leads/LeadSourcesAdminPage.tsx
  • Route(n): /:tenant/admin/lead-sources (routes/app.$tenant/admin.lead-sources.tsx)
  • Daten (VM): LeadSourceAdminVM — packages/view-models/src/leads/lead-source-admin.vm.ts
  • Benötigte UI-Elemente (KEIN Layout): BadgeFeedback, Button, Card, EmptyState, Table, TextInput · Icons: keine
  • Interaktionen (Actions): onUpsert(input: {key, name, displayLabel}); Tabelle mit Typ-Badge, Paused-/Webhook-Status-Badges (Token nur als „vorhanden ja/nein", da gehasht); Create-Card via canWrite
  • States: Empty (EmptyState leads.sources.empty) / Loading (submitting an Save-Button) / Permission-Denied (404 auf Route; Create-Card nur bei canWrite)
  • Davids Delta (offen):
    • Überschriebene/geänderte Spec-Punkte:
    • Neue UI/UX-Entscheidungen:
    • Subframe-Screen-Link(s):
    • Offene Fragen an Dev:

LeadAntiSpamAdminPage · D-P7 „Anti-Spam-Settings" (Archetyp A6)

  • Interim-Screen: apps/web/app/components/screens/leads/LeadAntiSpamAdminPage.tsx
  • Route(n): /:tenant/admin/lead-anti-spam (routes/app.$tenant/admin.lead-anti-spam.tsx)
  • Daten (VM): LeadAntiSpamVM — packages/view-models/src/leads/lead-anti-spam.vm.ts
  • Benötigte UI-Elemente (KEIN Layout): BadgeFeedback, Button, Card, Checkbox, Select, TextInput · Icons: keine
  • Interaktionen (Actions): onSave(input: LeadAntiSpamSaveInput) — mode (quarantine/spam), perSourcePerHourLimit, perIpPerHourLimit, anomalySpikeFactor, lostAutoDeleteDays, + Toggles disposableDomainEnabled/honeypotEnabled/fastSubmitEnabled (als „on")
  • States: Empty (kein Data → leerer Container-Shell) / Loading (submitting an Save-Button) / Permission-Denied (404 auf Route)
  • Davids Delta (offen):
    • Überschriebene/geänderte Spec-Punkte:
    • Neue UI/UX-Entscheidungen:
    • Subframe-Screen-Link(s):
    • Offene Fragen an Dev: