Plan Kern-Kette P6-P7 (Kontakte, Leads) + Datei-Teilen v1
- WF-P6 Kontakte und Organisationen: Kontaktmodell validiert (ein Datensatz, Kontaktart = Rolle der Verknuepfung, Shell-Prinzip), Karteikarte als Detailseiten-Muster (Zweispalter + Reiter) - WF-P7 Leads: Triage-Inbox, Lead->Projekt als grosses Modal (+Bulk), CSV-Import-Wizard (Davids Delta/CR), Quellen + Spam-Schutz - WF-P4 Dateien: Teilen/Freigeben in v1 (intern + Link, Preset Mit mir geteilt) - Paket-Canvases auf Default-Kurven, MD-Verknuepfungen je Canvas Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e48a5a46e8
commit
ca078436df
28 files changed
+2424
-432
No files matched your search
@@ -0,0 +1,57 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: M01
|
||||
screen: Lead zu Projekt
|
||||
typ: Modal (gross)
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S01/S02, nur bei Freigabe = ja"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M01 — Lead → Projekt ⭐
|
||||
|
||||
## Ziel
|
||||
|
||||
Der Kern-Moment der Kette: aus einer guten Anfrage wird ein Projekt — kontrolliert, mit sauberem Kontakt dran.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- **Daten-Vererbungs-Vorschau**: welche Lead-Felder ins Projekt fließen (Name, Nachricht, eigene Felder …)
|
||||
- **Ziel-Board + Start-Spalte wählen** (Default-Vorauswahl beim Subframe-Bau klären)
|
||||
- **Kontakt separat verknüpfen**: Auto-Match-Vorschlag (gleiche E-Mail/Telefon) → bestehenden wählen ODER neu anlegen (öffnet [[M01 Kontakt anlegen]] aus P6, vorbefüllt)
|
||||
- Fehlende Pflichtdaten (z. B. Name) direkt im Modal nachtragen (Mängel-Banner)
|
||||
- **Bulk-Variante** (Davids Ergänzung): mehrere Leads auf einmal — gemeinsame Board-Wahl, Kontakt-Match je Lead, Konfliktliste für Leads ohne Match
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 großes Modal (echtes Modal: DialogLayout → Dialog → Dialog.Content) mit drei Sektionen.
|
||||
|
||||
## Aufbau
|
||||
|
||||
1. **Was wird übernommen** — Vorschau der vererbten Felder
|
||||
2. **Wohin** — Pipeline/Board + Start-Spalte
|
||||
3. **Wer** — Kontakt (Match-Vorschlag / suchen / neu anlegen)
|
||||
|
||||
## Aktionen
|
||||
|
||||
- »Projekt erstellen« → Projekt existiert, Lead wird `converted`, Sprung zur Projekt-Detailseite (Toast mit Link)
|
||||
- Abbrechen
|
||||
|
||||
## Meldungsentscheidung
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Pflichtdaten fehlen | Mängel-Banner + Inline-Nachtragen | ja (Aktion) | Nur dokumentieren | z. B. fehlender Name |
|
||||
| Bulk: Lead ohne Kontakt-Match | Konflikt-Zeile in Bulk-Ansicht | nein | Nur dokumentieren | einzeln nachziehen |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Ersetzt das alte 4-Optionen-Promotion-Modal (Pivot AD-20). Bulk-Machbarkeit → Dev-Frage beim Handoff.
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: M02
|
||||
screen: Anfrage anlegen
|
||||
typ: Modal
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S01 (Route /leads/new bleibt Dev-seitig)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M02 — Anfrage anlegen
|
||||
|
||||
## Ziel
|
||||
|
||||
Anruf kommt rein, kein passender Kontakt — Anfrage in Sekunden erfassen.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- Schnelles Erfassen: Vor-/Nachname, E-Mail, Telefon, Nachricht, Quelle (Default: manuell), Verantwortlicher (Default: ich), Tags
|
||||
- **Live-Match-Check beim Tippen**: »Gibt es schon als Kontakt/Anfrage« mit Sprung-Link
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 Dialog, gleiche Mechanik wie »Kontakt anlegen« (P6).
|
||||
|
||||
## Aktionen
|
||||
|
||||
- »Anlegen« → Anfrage erscheint in der Inbox, Detail öffnet
|
||||
- Abbrechen
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Davids Delta: Modal statt eigener Seite (Ticket sah `/leads/new` als Seite vor — UI-Form ist Designer-Freiheit).
|
||||
- D01 Inline-Anlegen (Plus → Zeile) als »Später«-Muster dokumentiert.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: M03
|
||||
screen: CSV-Import
|
||||
typ: Modal/Wizard
|
||||
umsetzung: Bauen
|
||||
status: Validiert (Davids Delta)
|
||||
route: "aus S01, Importieren-Knopf"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M03 — CSV-Import-Wizard
|
||||
|
||||
## Ziel
|
||||
|
||||
Ganze Listen auf einmal reinholen (z. B. Messekontakte, Alt-Bestand) — mit sauberer Feld-Zuordnung statt Chaos. **Davids Delta: steht nicht im Dev-Ticket → Change-Request.**
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- CSV-Datei hochladen (Dropzone-Baustein aus P4)
|
||||
- **Spalten-Zuordnung**: jede CSV-Spalte einem Lead-Feld zuordnen (Auto-Vorschlag bei passenden Überschriften, eigene Felder wählbar, Spalte überspringen möglich)
|
||||
- **Vorschau vor dem Import**: erste Zeilen gemappt anzeigen, Fehler markieren (ungültige E-Mail, leere Pflichtwerte)
|
||||
- **Duplikat-Behandlung wählen**: überspringen / trotzdem anlegen / als möglichs Duplikat markieren
|
||||
- Import läuft im Hintergrund; Ergebnis-Meldung (»142 importiert, 3 übersprungen — Liste ansehen«)
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 mehrstufiger Wizard: 1. Datei → 2. Spalten zuordnen → 3. Vorschau + Duplikat-Regel → 4. Import läuft/Ergebnis.
|
||||
|
||||
## Meldungsentscheidung
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Datei nicht lesbar / falsches Format | Schritt-Fehler | ja (Schritt) | Nur dokumentieren | Klartext + Beispiel-Hinweis |
|
||||
| Zeilen mit Fehlern | markierte Zeilen in Vorschau | nein | Nur dokumentieren | »werden übersprungen« |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Change-Request an Dev: Import-Job serverseitig, Duplikat-Logik, Feld-Mapping. Beim Handoff formulieren.
|
||||
- Gleiches Wizard-Muster ist später für Kontakt-Import wiederverwendbar (nur notiert, nicht beauftragt).
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S01
|
||||
screen: Lead-Inbox
|
||||
typ: Triage-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/leads"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S01 — Lead-Inbox
|
||||
|
||||
## Ziel
|
||||
|
||||
Keine Anfrage verlieren: alles Eingehende an einem Ort, in Sekunden sortiert.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- Anfragen aus **allen Quellen** automatisch empfangen (Formular, E-Mail, Anruf, manuell, Webhook) — live, ohne Neuladen
|
||||
- Triage direkt in der Zeile: zuweisen, Status wechseln, **Zu Projekt machen**, als Spam markieren
|
||||
- Mehrfachauswahl mit Massenbearbeitung (zuweisen/Status/Spam/Archiv) **inkl. Massen-Konvertierung** (Davids Ergänzung)
|
||||
- Spam-Schutz sichtbar machen (Marker mit Begründung), ohne die Liste zu verstopfen
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Liste mit Triage-Akzenten, Tabelle/Karten-Umschalter, cursor-paginiert.
|
||||
|
||||
## Daten
|
||||
|
||||
- Zeile: Identität (Name, sonst E-Mail/Telefon, sonst Quelle+Datum) · Quellen-Marker · Status · Freigabe (ja/nein/unklar) · Verantwortlicher · Eingegangen (relativ < 7 T) · 80-Zeichen-Nachrichten-Vorschau
|
||||
- Marker: »Mögliches Duplikat« · »Spam-Verdacht« · »Auto-promoviert«
|
||||
- Filter: Status (Default new+qualified), Quelle, Verantwortlicher (inkl. »nicht zugewiesen«), Zeitraum, Tags, eigene Felder
|
||||
- Toggle-Chips: **»Spam ausblenden« (Default an)** · **»Konvertierte einblenden« (Default aus)**
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Zeile öffnen → [[S02 Lead-Detail]]
|
||||
- Inline: Zuweisen · Status · **»Zu Projekt«** → [[M01 Lead zu Projekt]] · Spam
|
||||
- Bulk: Zuweisen/Status/Spam/Archiv + **Bulk »Zu Projekt«** (M01 in Bulk-Variante)
|
||||
- »+ Anfrage« → [[M02 Anfrage anlegen]] · »Importieren« → [[M03 CSV-Import]]
|
||||
- »Statistiken« → [[S03 Lead-Statistiken]]
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Leer | »Keine neuen Anfragen« | Nur dokumentieren |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
| `read_own` | nur eigene sichtbar (server-seitig) | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- D01 Inline-Anlegen (Plus → Zeile mit Pflichtfeldern) — gemeinsames »Später«-Muster mit P6.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S02
|
||||
screen: Lead-Detail
|
||||
typ: Detail
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/leads/:id"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S02 — Lead-Detail
|
||||
|
||||
## Ziel
|
||||
|
||||
Eine Anfrage komplett verstehen und entscheiden: weiterverarbeiten, ablehnen oder Spam.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- **Herkunft transparent machen**: welches Formular (mit Submission), welcher E-Mail-Header, welcher Anruf (mit Aufnahme-Link)
|
||||
- **Freigabe-Entscheidung** festhalten (ja/nein/unklar) — bei »ja« wird »Zu Projekt« möglich
|
||||
- **Match-Hinweise**: existierende Kontakte mit gleicher E-Mail/Telefon (harte Treffer) oder ähnlichem Namen (weiche) — mit Direktsprung
|
||||
- Spam-Score mit Klartext-Begründung; Re-Submission-Verlauf (gleiche Person hat mehrfach angefragt)
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A3 Detail — gleiches Grundgerüst wie die Kontakt-Karteikarte (Zweispalter + Reiter).
|
||||
|
||||
## Daten
|
||||
|
||||
- Kopf: Identität, Status, Freigabe-Schalter, Quellen-Marker · Triage-Quick-Actions (Annehmen / Antworten / Anrufen / Notiz / Aufgabe / Termin)
|
||||
- Links: Stammdaten inline editierbar · eigene Felder · Match-Hinweise · DSGVO-Lösch-Countdown
|
||||
- Rechts, Reiter: Übersicht/Nachricht · Konversation · Verlauf (Activity)
|
||||
|
||||
## Aktionen
|
||||
|
||||
- **»Zu Projekt«** → [[M01 Lead zu Projekt]] (nur bei Freigabe = ja; sonst Hinweis)
|
||||
- Status wechseln (new/qualified/converted/lost/spam) · zuweisen
|
||||
- Match-Hinweis → Kontakt-Karteikarte öffnen oder direkt verknüpfen
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| DSGVO-Countdown | »Wird am [Datum] automatisch gelöscht« | Nur dokumentieren |
|
||||
| Nicht gefunden / kein Recht | 404 | Wiederverwenden |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S03
|
||||
screen: Lead-Statistiken
|
||||
typ: KPI-Seite
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/leads/statistics"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S03 — Lead-Statistiken
|
||||
|
||||
## Ziel
|
||||
|
||||
Der Chef sieht: Woher kommen Anfragen, wie schnell reagieren wir, was wird daraus?
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- KPI-Kacheln: Eingegangen · Umwandlung Lead→Projekt · Lead→Gewonnen · Reaktionszeit · Spam-Quote · offene Anfragen > 24 h
|
||||
- Aufschlüsselung nach Quelle / Verantwortlichem / Tag / Wochentag / Status
|
||||
- Trend-Charts mit Vergleich zur Vorperiode (Zeitraum-Wahl + Vergleichs-Schalter)
|
||||
- **Drill-Down**: Klick auf eine Zahl → vorgefilterte Inbox
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 + KPI-Kit (Kacheln, Balken-/Linien-Charts aus dem Baukasten).
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Zu wenig Daten | »Noch nicht genug Anfragen für Trends« | Nur dokumentieren |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
|
||||
## Permissions / Gates
|
||||
|
||||
Aufschlüsselung nach Verantwortlichem nur mit `leads.read_all`.
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S04
|
||||
screen: Quellen-Verwaltung
|
||||
typ: Settings-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/lead-sources (Einstellungen -> Arbeitsweise)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S04 — Quellen-Verwaltung
|
||||
|
||||
## Ziel
|
||||
|
||||
Steuern, woher Anfragen kommen — inkl. Anschluss fremder Websites.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- Quellen-Liste: Name · Typ (System/eigene) · Anfragen der letzten 30 Tage · Status
|
||||
- Eigene Quelle anlegen (Name, Anzeige-Label, optional Standard-Verantwortlicher + Standard-Tags)
|
||||
- **Webhook-URL mit Token** je Quelle (Kopier-Knopf) — damit Fremd-Websites Anfragen direkt einliefern
|
||||
- Bearbeiten / Archivieren
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2/A6 unter Einstellungen → Arbeitsweise.
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S05
|
||||
screen: Spam-Schutz
|
||||
typ: Settings
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/lead-anti-spam (Einstellungen -> Arbeitsweise)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S05 — Spam-Schutz
|
||||
|
||||
## Ziel
|
||||
|
||||
Spam automatisch abfangen, ohne echte Anfragen zu verlieren — alles in Klartext einstellbar.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- **Limits**: max. Anfragen pro Quelle/Stunde und pro IP/Stunde
|
||||
- **Anomalie-Erkennung**: 10-facher Anstieg → Quelle pausiert automatisch (mit Benachrichtigung)
|
||||
- **Auto-Spam-Regeln als Schalter**: IP-Sperrliste · Wegwerf-E-Mail-Domains · Honeypot-Feld · Absenden unter 3 Sekunden
|
||||
- **Modus**: Quarantäne (landet markiert in der Inbox) vs. vollständig Spam (ausgeblendet)
|
||||
- Auto-Lösch-Frist für verlorene Anfragen (0 = nie); Spam fix 30 Tage
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A6 Settings mit Toggle-Zeilen (je Regel Klartext-Beschreibung).
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"nodes":[
|
||||
{"id":"md-paket","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.md","x":-80,"y":-440,"width":460,"height":280},
|
||||
{"id":"group-triage","type":"group","x":-80,"y":-100,"width":1820,"height":380,"label":"Triage"},
|
||||
{"id":"group-stats","type":"group","x":1880,"y":-100,"width":540,"height":380,"label":"Auswertung"},
|
||||
{"id":"group-aktionen","type":"group","x":-80,"y":460,"width":1780,"height":380,"label":"Konvertieren, Anlegen, Import"},
|
||||
{"id":"group-settings","type":"group","x":1880,"y":460,"width":1080,"height":380,"label":"Einstellungen → Arbeitsweise"},
|
||||
{"id":"note-entry","type":"text","text":"# Einstieg\n\nSidebar → Leads (`/leads`).\n\nAlle Quellen landen hier automatisch: Formular, E-Mail, Anruf, Webhook, manuell.","x":0,"y":0,"width":360,"height":200},
|
||||
{"id":"s01","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S01 Lead-Inbox.md","x":560,"y":0,"width":420,"height":200},
|
||||
{"id":"s02","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S02 Lead-Detail.md","x":1240,"y":0,"width":420,"height":200},
|
||||
{"id":"s03","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S03 Lead-Statistiken.md","x":1920,"y":0,"width":420,"height":200},
|
||||
{"id":"m02","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M02 Anfrage anlegen.md","x":40,"y":560,"width":420,"height":200},
|
||||
{"id":"m01","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M01 Lead zu Projekt.md","x":620,"y":560,"width":420,"height":200},
|
||||
{"id":"m03","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M03 CSV-Import.md","x":1200,"y":560,"width":420,"height":200},
|
||||
{"id":"s04","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S04 Quellen-Verwaltung.md","x":1920,"y":560,"width":420,"height":200},
|
||||
{"id":"s05","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S05 Spam-Schutz.md","x":2500,"y":560,"width":420,"height":200}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"e-entry","fromNode":"note-entry","fromSide":"right","toNode":"s01","toSide":"left","toEnd":"arrow","styleAttributes":{"path":"dotted"}},
|
||||
{"id":"e-open","fromNode":"s01","fromSide":"right","toNode":"s02","toSide":"left","toEnd":"arrow","label":"Anfrage öffnen"},
|
||||
{"id":"e-stats","fromNode":"s01","fromSide":"top","toNode":"s03","toSide":"top","toEnd":"arrow","label":"Statistiken · Drill-Down zurück in gefilterte Inbox"},
|
||||
{"id":"e-convert","fromNode":"s02","fromSide":"bottom","toNode":"m01","toSide":"top","toEnd":"arrow","label":"Zu Projekt (Freigabe = ja; aus S01 auch als Bulk)"},
|
||||
{"id":"e-new","fromNode":"s01","fromSide":"bottom","toNode":"m02","toSide":"top","toEnd":"arrow","label":"+ Anfrage"},
|
||||
{"id":"e-import","fromNode":"s01","fromSide":"bottom","toNode":"m03","toSide":"top","toEnd":"arrow","label":"Importieren (CSV)"}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
kind: wireframe-package
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
typ: Flow
|
||||
status: Validiert
|
||||
subframe: ""
|
||||
canvas: "WF-P7 Leads.canvas"
|
||||
---
|
||||
|
||||
# WF-P7 Leads
|
||||
|
||||
Status: Validiert (Screen-Liste)
|
||||
Subframe-Link: -
|
||||
Canvas: [Canvas](<WF-P7 Leads.canvas>)
|
||||
Stand: 2026-07-08
|
||||
|
||||
---
|
||||
|
||||
## 1. Kurzfassung
|
||||
|
||||
Der Lead-Eingang: Anfragen aus allen Quellen (Formular, E-Mail, Anruf, manuell, Webhook) landen automatisch in einer Triage-Liste. Dort wird sortiert, zugewiesen — und im Kern-Moment **»Zu Projekt machen«** startet die Kette Richtung Auftrag. Kontakt wird dabei separat verknüpft (kein altes Promotion-Modal, Pivot AD-20).
|
||||
|
||||
---
|
||||
|
||||
## 2. Intent Check
|
||||
|
||||
| Frage | Antwort |
|
||||
|---|---|
|
||||
| Welches Ticket/Modul ist betroffen? | D-P7, Dev-Pendant R-P7 |
|
||||
| Was soll der Nutzer am Ende schaffen? | Keine Anfrage verlieren, Spam loswerden, schnell reagieren, gute Anfragen zu Projekten machen |
|
||||
| Flow, Screen, Zustand oder Doku? | Triage-Liste + Detail + Konvertier-Modal + Statistiken + 2 Einstellungs-Seiten + Anlege-Modal |
|
||||
| Welche Planning-Quellen wurden geprüft? | `ticket-docs/D-P7.md`, ENTITY-MODEL (Pivot), SCREEN-MAP §2, HiveGrid Map |
|
||||
| Was ist sicher im Scope? | Alles oben + Anti-Spam + Webhook-Quellen |
|
||||
| Was ist sicher nicht im Scope? | Kontakt-/Organisations-Listen (P6), Projekt-Welt (P8), Promotion-Modal (existiert nicht mehr) |
|
||||
| Admin/Normalrolle-Unterschiede? | `leads.*`; bei `read_own` nur eigene (404); Statistiken-Aufschlüsselung nach Person nur mit `read_all` |
|
||||
| Unsichere Annahmen? | Massen-Konvertierung (Bulk »Zu Projekt«): UI validiert, technische Machbarkeit mit Dev bestätigen |
|
||||
|
||||
---
|
||||
|
||||
## 3. Scope
|
||||
|
||||
| Punkt | Inhalt |
|
||||
|---|---|
|
||||
| Ticket/Modul | D-P7 · Lead-Eingang |
|
||||
| Nutzerrolle | Maximalansicht (Admin) |
|
||||
| Startpunkt | Sidebar »Leads« |
|
||||
| Ziel | Anfrage triagiert → Projekt erstellt oder erledigt/Spam |
|
||||
| Haupt-Archetyp | A2 Triage-Liste · A3 Detail · A5 Modal · A6 Settings · KPI-Kit |
|
||||
| Bespoke-Anteil | Keiner |
|
||||
| Out of scope | Kampagnen-/Marketing-Quellen-Details (P14) |
|
||||
|
||||
---
|
||||
|
||||
## 4. Entscheidungen (validiert 2026-07-08)
|
||||
|
||||
| Entscheidung | Status | Notiz |
|
||||
|---|---|---|
|
||||
| Ein Paket für das ganze Feature | genommen | inkl. Quellen + Spam-Schutz (leben unter Einstellungen → Arbeitsweise) |
|
||||
| **Lead → Projekt als großes Modal** | genommen | Drei Sektionen: Daten-Vererbungs-Vorschau · Ziel-Board + Start-Spalte · Kontakt verknüpfen (Auto-Match oder neu via M01 aus P6). Man bleibt im Kontext der Liste |
|
||||
| **Mehrfachauswahl / Massenbearbeitung** | genommen | Davids Ergänzung: Bulk-Zuweisen/Status/Spam/Archiv UND Massen-Konvertierung (Modal in Bulk-Variante: gemeinsame Board-Wahl, Kontakt-Match je Lead). Machbarkeit Bulk-Convert mit Dev bestätigen |
|
||||
| Anfrage anlegen als Modal | genommen | Wie »Kontakt anlegen« (P6), mit Live-Duplikat-Check |
|
||||
| **Inline-Anlegen (Plus → Zeile mit Pflichtfeldern)** | dokumentiert / später | Davids Idee — gemeinsames Muster mit P6 (D01 dort); »muss gut gemacht werden«, erstmal Modal |
|
||||
| Spam standardmäßig ausgeblendet, Konvertierte ausgeblendet | genommen | Toggle-Chips laut Ticket |
|
||||
| Pivot-Regel | genommen | Freigabe (ja/nein/unklar) am Lead; bei »ja« → Projekt; Kontakt separat verknüpft; Status new/qualified/converted/lost/spam |
|
||||
| **CSV-Import-Wizard** | genommen — Davids Delta (2026-07-08) | Ganze Listen importieren: Datei hochladen → Spalten den Lead-Feldern zuordnen → Vorschau mit Fehlern/Duplikaten → Import. Steht NICHT im Dev-Ticket → als Change-Request/Delta an Dev |
|
||||
|
||||
### Happy Path
|
||||
|
||||
1. Anfrage kommt rein (Formular/Anruf/E-Mail) → erscheint live in der Inbox, ggf. mit Duplikat-/Spam-Marker.
|
||||
2. Triage direkt in der Zeile: zuweisen, Status, oder Spam.
|
||||
3. Gute Anfrage öffnen → Detail: Herkunft, Match-Hinweise (»könnte Kontakt X sein«), Freigabe auf »ja«.
|
||||
4. **»Zu Projekt machen«** → Modal: Vorschau der übernommenen Daten, Board + Start-Spalte wählen, Kontakt verknüpfen (Match oder neu) → Projekt existiert, Lead = konvertiert.
|
||||
5. Chef schaut in die Statistiken: Woher kommen Anfragen, wie schnell reagieren wir, was wird daraus?
|
||||
|
||||
### Meldungs-/Error-States (validiert)
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Bauen? | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Spam-Verdacht / mögliches Duplikat / auto-promoviert | Marker in der Zeile + Begründung im Detail | nein | Nur dokumentieren | Klartext-Begründung (»3 Anfragen in 1 Min von gleicher IP«) |
|
||||
| Pflichtdaten fehlen beim Konvertieren (z. B. Name) | Mängel-Banner im Modal | ja (Aktion) | Nur dokumentieren | Felder direkt im Modal nachtragbar |
|
||||
| DSGVO-Auto-Löschung | Countdown-Hinweis im Detail | nein | Nur dokumentieren | »Wird am [Datum] automatisch gelöscht« (Spam 30 T, lost konfigurierbar) |
|
||||
| Fremder Lead bei `read_own` | unsichtbar / 404 | ja | Wiederverwenden | Dev-Vorgabe |
|
||||
| Leere Inbox | Leer-Zustand | nein | Nur dokumentieren | »Keine neuen Anfragen« |
|
||||
|
||||
---
|
||||
|
||||
## 7. Validierte Screen-Liste
|
||||
|
||||
| ID | Screen/Zustand | Typ | Umsetzung | Ort | Status |
|
||||
|---|---|---|---|---|---|
|
||||
| S01 | Lead-Inbox (Triage-Liste) | Liste | Bauen | `/leads` | Validiert |
|
||||
| S02 | Lead-Detail | Detail | Bauen | `/leads/:id` | Validiert |
|
||||
| M01 | Lead → Projekt ⭐ | Modal (groß, + Bulk-Variante) | Bauen | aus S01/S02 | Validiert |
|
||||
| S03 | Lead-Statistiken | KPI-Seite | Bauen | `/leads/statistics` | Validiert |
|
||||
| S04 | Quellen-Verwaltung | Settings-Liste | Bauen | `/admin/lead-sources` | Validiert |
|
||||
| S05 | Spam-Schutz | Settings | Bauen | `/admin/lead-anti-spam` | Validiert |
|
||||
| M02 | Anfrage anlegen | Modal | Bauen | aus S01 | Validiert |
|
||||
| M03 | CSV-Import-Wizard | Modal/Wizard | Bauen | aus S01 | Validiert (Davids Delta) |
|
||||
| D01 | Inline-Anlegen (Plus → Zeile) | Idee | Später | in S01 | Dokumentiert (gemeinsam mit P6) |
|
||||
| D02–D06 | Marker/Banner/Zustände (s. Tabelle) | Inline | Nur dokumentieren | — | Validiert |
|
||||
|
||||
---
|
||||
|
||||
## 8. Grid
|
||||
|
||||
```text
|
||||
Sidebar -> S01 (Inbox) -> S02 (Detail)
|
||||
S01/S02 -> M01 (Lead -> Projekt; aus S01 auch als Bulk)
|
||||
S01 -> M02 (+ Anfrage) / M03 (CSV-Import)
|
||||
S01 -> S03 (Statistiken; Drill-Down zurueck in gefilterte Inbox)
|
||||
Einstellungen -> S04 (Quellen) / S05 (Spam-Schutz)
|
||||
M01 nutzt M01 aus P6 (Kontakt anlegen) fuer neue Kontakte
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Screen-Pakete
|
||||
|
||||
- [[S01 Lead-Inbox]] · [[S02 Lead-Detail]] · [[M01 Lead zu Projekt]]
|
||||
- [[S03 Lead-Statistiken]] · [[M02 Anfrage anlegen]] · [[M03 CSV-Import]]
|
||||
- [[S04 Quellen-Verwaltung]] · [[S05 Spam-Schutz]]
|
||||
|
||||
---
|
||||
|
||||
## 10. Offene Fragen
|
||||
|
||||
- Massen-Konvertierung (Bulk »Zu Projekt«): technische Machbarkeit + Verhalten bei fehlenden Kontakt-Matches → Frage an Dev (beim Handoff)
|
||||
- CSV-Import (M03): Davids Delta, steht nicht im Dev-Ticket → als Change-Request formulieren (Import-Job, Duplikat-Behandlung serverseitig)
|
||||
- Ziel-Board-Vorauswahl im Konvertier-Modal (z. B. immer »Vertrieb«-Board als Default?) → beim Subframe-Bau
|
||||
- Statistiken: welche KPI-Kacheln auf Seite 1 → beim Subframe-Bau (Ticket-Liste ist Obermenge)
|
||||
|
||||
## Handoff-Check
|
||||
|
||||
- [x] Jeder Screen ist mit Umsetzung markiert.
|
||||
- [x] Meldungs-/Error-State-Matrix ist ausgefüllt.
|
||||
- [ ] Subframe-Link ist eingetragen. *(Subframe erst nach explizitem OK)*
|
||||
Reference in new issue
Block a user