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>
6.8 KiB
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 gebundelten03 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 fehlendemleads.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;
submittingan Save/Convert) / Permission-Denied (404 auf Route; Schreibfelder viacanWritedisabled) - 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-DraftLeadNewFields(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 (
submittingan Submit-Button) / Permission-Denied (404 auf Route); Fehler viaerrorKey-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 (submittingan Save-Button) / Permission-Denied (404 auf Route; Create-Card nur beicanWrite) - 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 (
submittingan 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: