diff --git a/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas b/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas index 1a2f7ef4..d3b0df31 100644 --- a/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas +++ b/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas @@ -9,24 +9,24 @@ "height": 420, "label": "Hauptflow" }, - { - "id": "group-schnell", - "type": "group", - "x": -80, - "y": 460, - "width": 1000, - "height": 400, - "label": "Schnellzugriff (Davids Delta)" - }, { "id": "group-anlage", "type": "group", - "x": 1060, - "y": 460, + "x": -80, + "y": 480, "width": 1240, "height": 400, "label": "Anlegen und Einbettung" }, + { + "id": "group-schnell", + "type": "group", + "x": 1260, + "y": 480, + "width": 1000, + "height": 400, + "label": "Schnellzugriff (Davids Delta)" + }, { "id": "note-entry", "type": "text", @@ -54,42 +54,6 @@ "width": 420, "height": 200 }, - { - "id": "note-topbar", - "type": "text", - "text": "# Einstieg\n\nTopbar-Button »Meine Aufgaben« (Davids Ergänzung).", - "x": 0, - "y": 560, - "width": 320, - "height": 200 - }, - { - "id": "s03", - "type": "file", - "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/S03 Aufgaben-Drawer.md", - "x": 440, - "y": 560, - "width": 420, - "height": 200 - }, - { - "id": "m01", - "type": "file", - "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/M01 Aufgabe anlegen.md", - "x": 1120, - "y": 560, - "width": 420, - "height": 200 - }, - { - "id": "v01", - "type": "file", - "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/V01 Eingebettete Kompakt-Variante.md", - "x": 1600, - "y": 560, - "width": 420, - "height": 200 - }, { "id": "md-paket", "type": "file", @@ -98,20 +62,54 @@ "y": -440, "width": 460, "height": 280 + }, + { + "id": "m01", + "type": "file", + "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/M01 Aufgabe anlegen.md", + "x": -20, + "y": 580, + "width": 420, + "height": 200 + }, + { + "id": "v01", + "type": "file", + "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/V01 Eingebettete Kompakt-Variante.md", + "x": 460, + "y": 580, + "width": 420, + "height": 200 + }, + { + "id": "note-topbar", + "type": "text", + "text": "# Einstieg\n\nTopbar-Button »Meine Aufgaben« (Davids Ergänzung).", + "x": 1340, + "y": 580, + "width": 320, + "height": 200 + }, + { + "id": "s03", + "type": "file", + "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/S03 Aufgaben-Drawer.md", + "x": 1780, + "y": 580, + "width": 420, + "height": 200 } ], "edges": [ { "id": "e-entry", + "styleAttributes": { + "path": "dotted" + }, "fromNode": "note-entry", "fromSide": "right", "toNode": "s01", - "toSide": "left", - "toEnd": "arrow", - "styleAttributes": { - "path": "dotted", - "pathfindingMethod": "direct" - } + "toSide": "left" }, { "id": "e-open", @@ -119,60 +117,50 @@ "fromSide": "right", "toNode": "s02", "toSide": "left", - "toEnd": "arrow", - "label": "Zeile öffnen", - "styleAttributes": { - "pathfindingMethod": "direct" - } + "label": "Zeile öffnen" }, { "id": "e-topbar", + "styleAttributes": { + "path": "dotted" + }, "fromNode": "note-topbar", "fromSide": "right", "toNode": "s03", - "toSide": "left", - "toEnd": "arrow", - "styleAttributes": { - "path": "dotted", - "pathfindingMethod": "direct" - } + "toSide": "left" }, { "id": "e-drawer", + "toFloating": false, "fromNode": "s03", "fromSide": "top", "toNode": "s02", "toSide": "bottom", - "toEnd": "arrow", - "label": "Eintrag öffnen", - "styleAttributes": { - "pathfindingMethod": "direct" - } + "label": "Eintrag öffnen" }, { "id": "e-new", + "fromFloating": false, "fromNode": "s01", "fromSide": "bottom", "toNode": "m01", "toSide": "top", - "toEnd": "arrow", - "label": "Neue Aufgabe (auch aus S03 + Detailseiten, vorbefüllt)", - "styleAttributes": { - "pathfindingMethod": "direct" - } + "label": "Neue Aufgabe (auch aus S03 + Detailseiten, vorbefüllt)" }, { "id": "e-variant", + "styleAttributes": { + "path": "short-dashed" + }, "fromNode": "v01", "fromSide": "top", "toNode": "s01", "toSide": "bottom", - "toEnd": "arrow", - "label": "kompakte Ausführung von S01", - "styleAttributes": { - "path": "short-dashed", - "pathfindingMethod": "direct" - } + "label": "kompakte Ausführung von S01" } - ] + ], + "metadata": { + "version": "1.0-1.0", + "frontmatter": {} + } } \ No newline at end of file diff --git a/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas b/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas index a763d398..96f37106 100644 --- a/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas +++ b/02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas @@ -109,8 +109,7 @@ "toSide": "left", "toEnd": "arrow", "styleAttributes": { - "path": "dotted", - "pathfindingMethod": "direct" + "path": "dotted" } }, { @@ -120,10 +119,7 @@ "toNode": "s03", "toSide": "left", "toEnd": "arrow", - "label": "Datei öffnen", - "styleAttributes": { - "pathfindingMethod": "direct" - } + "label": "Datei öffnen" }, { "id": "e-upload", @@ -132,10 +128,7 @@ "toNode": "s02", "toSide": "top", "toEnd": "arrow", - "label": "Hochladen", - "styleAttributes": { - "pathfindingMethod": "direct" - } + "label": "Hochladen" }, { "id": "e-done", @@ -146,8 +139,7 @@ "toEnd": "arrow", "label": "fertige Datei öffnen", "styleAttributes": { - "path": "long-dashed", - "pathfindingMethod": "direct" + "path": "long-dashed" } }, { @@ -157,10 +149,7 @@ "toNode": "m01", "toSide": "top", "toEnd": "arrow", - "label": "Freigeben (auch aus S03)", - "styleAttributes": { - "pathfindingMethod": "direct" - } + "label": "Freigeben (auch aus S03)" } ] } \ No newline at end of file diff --git a/02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas b/02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas index 4662fd7a..d1469e8e 100644 --- a/02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas +++ b/02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas @@ -1,28 +1,206 @@ { - "nodes":[ - {"id":"md-paket","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.md","x":-80,"y":-440,"width":460,"height":280}, - {"id":"group-main","type":"group","x":-80,"y":-100,"width":1720,"height":420,"label":"Hauptflow"}, - {"id":"group-sync","type":"group","x":1800,"y":-100,"width":1120,"height":420,"label":"Sync-Verlauf (eigene Seiten)"}, - {"id":"group-wizard","type":"group","x":-80,"y":460,"width":1720,"height":420,"label":"Einrichtungs-Assistent und Trennen"}, - {"id":"group-notes","type":"group","x":1800,"y":460,"width":1120,"height":420,"label":"Regeln"}, - {"id":"note-entry","type":"text","text":"# Einstieg\n\nSidebar → Integrationen (`/admin/integrations`).\n\nNur mit Recht `integrations.read`.","x":0,"y":0,"width":360,"height":200}, - {"id":"s01","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S01 App-Katalog.md","x":560,"y":0,"width":420,"height":200}, - {"id":"s02","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S02 App-Seite.md","x":1180,"y":0,"width":420,"height":200}, - {"id":"s03","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S03 Sync-Verlauf.md","x":1840,"y":0,"width":420,"height":200}, - {"id":"s04","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S04 Lauf-Detail.md","x":2460,"y":0,"width":420,"height":200}, - {"id":"m01","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M01 Assistent OAuth.md","x":40,"y":560,"width":420,"height":200}, - {"id":"m02","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M02 Assistent API-Schluessel.md","x":620,"y":560,"width":420,"height":200}, - {"id":"m03","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M03 Trennen-Bestaetigung.md","x":1200,"y":560,"width":420,"height":200}, - {"id":"note-framework","type":"text","text":"# Wiederverwendung\n\nConnection-Card + Assistent + Verlauf sind das **Gerüst für alle App-Verbindungen**: E-Mail (P14), Telefonie (P15), Kalender/Signatur (P16) nutzen dieselben Bausteine in ihren Settings.","x":1840,"y":560,"width":520,"height":260}, - {"id":"note-banner","type":"text","text":"# Zustände (nur Doku)\n\nAmpel: grün läuft · gelb hakt · rot kaputt · grau getrennt.\n\nGelb/Rot/Schema geändert → Klartext-Banner mit Lösungs-Knopf. Trennen = Status »getrennt«, kein Löschen.","x":2420,"y":560,"width":460,"height":260} - ], - "edges":[ - {"id":"e-entry","fromNode":"note-entry","fromSide":"right","toNode":"s01","toSide":"left","toEnd":"arrow","styleAttributes":{"path":"dotted","pathfindingMethod":"direct"}}, - {"id":"e-app","fromNode":"s01","fromSide":"right","toNode":"s02","toSide":"left","toEnd":"arrow","label":"App öffnen","styleAttributes":{"pathfindingMethod":"direct"}}, - {"id":"e-verlauf","fromNode":"s02","fromSide":"right","toNode":"s03","toSide":"left","toEnd":"arrow","label":"alle Läufe anzeigen","styleAttributes":{"pathfindingMethod":"direct"}}, - {"id":"e-lauf","fromNode":"s03","fromSide":"right","toNode":"s04","toSide":"left","toEnd":"arrow","label":"Lauf öffnen","styleAttributes":{"pathfindingMethod":"direct"}}, - {"id":"e-oauth","fromNode":"s02","fromSide":"bottom","toNode":"m01","toSide":"top","toEnd":"arrow","label":"Verbinden (OAuth)","styleAttributes":{"pathfindingMethod":"direct"}}, - {"id":"e-key","fromNode":"s02","fromSide":"bottom","toNode":"m02","toSide":"top","toEnd":"arrow","label":"Verbinden (API-Schlüssel)","styleAttributes":{"pathfindingMethod":"direct"}}, - {"id":"e-trennen","fromNode":"s02","fromSide":"bottom","toNode":"m03","toSide":"top","toEnd":"arrow","label":"Trennen","styleAttributes":{"pathfindingMethod":"direct"}} - ] -} + "nodes": [ + { + "id": "md-paket", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.md", + "x": -80, + "y": -440, + "width": 460, + "height": 280 + }, + { + "id": "group-main", + "type": "group", + "x": -80, + "y": -100, + "width": 1720, + "height": 420, + "label": "Hauptflow" + }, + { + "id": "group-sync", + "type": "group", + "x": 1800, + "y": -100, + "width": 1120, + "height": 420, + "label": "Sync-Verlauf (eigene Seiten)" + }, + { + "id": "group-wizard", + "type": "group", + "x": -80, + "y": 460, + "width": 1720, + "height": 420, + "label": "Einrichtungs-Assistent und Trennen" + }, + { + "id": "group-notes", + "type": "group", + "x": 1800, + "y": 460, + "width": 1120, + "height": 420, + "label": "Regeln" + }, + { + "id": "note-entry", + "type": "text", + "text": "# Einstieg\n\nSidebar → Integrationen (`/admin/integrations`).\n\nNur mit Recht `integrations.read`.", + "x": 0, + "y": 0, + "width": 360, + "height": 200 + }, + { + "id": "s01", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S01 App-Katalog.md", + "x": 560, + "y": 0, + "width": 420, + "height": 200 + }, + { + "id": "s02", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S02 App-Seite.md", + "x": 1180, + "y": 0, + "width": 420, + "height": 200 + }, + { + "id": "s03", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S03 Sync-Verlauf.md", + "x": 1840, + "y": 0, + "width": 420, + "height": 200 + }, + { + "id": "s04", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S04 Lauf-Detail.md", + "x": 2460, + "y": 0, + "width": 420, + "height": 200 + }, + { + "id": "m01", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M01 Assistent OAuth.md", + "x": 40, + "y": 560, + "width": 420, + "height": 200 + }, + { + "id": "m02", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M02 Assistent API-Schluessel.md", + "x": 620, + "y": 560, + "width": 420, + "height": 200 + }, + { + "id": "m03", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M03 Trennen-Bestaetigung.md", + "x": 1200, + "y": 560, + "width": 420, + "height": 200 + }, + { + "id": "note-framework", + "type": "text", + "text": "# Wiederverwendung\n\nConnection-Card + Assistent + Verlauf sind das **Gerüst für alle App-Verbindungen**: E-Mail (P14), Telefonie (P15), Kalender/Signatur (P16) nutzen dieselben Bausteine in ihren Settings.", + "x": 1840, + "y": 560, + "width": 520, + "height": 260 + }, + { + "id": "note-banner", + "type": "text", + "text": "# Zustände (nur Doku)\n\nAmpel: grün läuft · gelb hakt · rot kaputt · grau getrennt.\n\nGelb/Rot/Schema geändert → Klartext-Banner mit Lösungs-Knopf. Trennen = Status »getrennt«, kein Löschen.", + "x": 2420, + "y": 560, + "width": 460, + "height": 260 + } + ], + "edges": [ + { + "id": "e-entry", + "fromNode": "note-entry", + "fromSide": "right", + "toNode": "s01", + "toSide": "left", + "toEnd": "arrow", + "styleAttributes": { + "path": "dotted" + } + }, + { + "id": "e-app", + "fromNode": "s01", + "fromSide": "right", + "toNode": "s02", + "toSide": "left", + "toEnd": "arrow", + "label": "App öffnen" + }, + { + "id": "e-verlauf", + "fromNode": "s02", + "fromSide": "right", + "toNode": "s03", + "toSide": "left", + "toEnd": "arrow", + "label": "alle Läufe anzeigen" + }, + { + "id": "e-lauf", + "fromNode": "s03", + "fromSide": "right", + "toNode": "s04", + "toSide": "left", + "toEnd": "arrow", + "label": "Lauf öffnen" + }, + { + "id": "e-oauth", + "fromNode": "s02", + "fromSide": "bottom", + "toNode": "m01", + "toSide": "top", + "toEnd": "arrow", + "label": "Verbinden (OAuth)" + }, + { + "id": "e-key", + "fromNode": "s02", + "fromSide": "bottom", + "toNode": "m02", + "toSide": "top", + "toEnd": "arrow", + "label": "Verbinden (API-Schlüssel)" + }, + { + "id": "e-trennen", + "fromNode": "s02", + "fromSide": "bottom", + "toNode": "m03", + "toSide": "top", + "toEnd": "arrow", + "label": "Trennen" + } + ] +} \ No newline at end of file diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M01 Kontakt anlegen.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M01 Kontakt anlegen.md new file mode 100644 index 00000000..6bd7997e --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M01 Kontakt anlegen.md @@ -0,0 +1,49 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: M01 +screen: Kontakt anlegen +typ: Modal +umsetzung: Bauen +status: Validiert +route: "aus S01 + ueberall (z. B. Lead-Konvertierung)" +subframe: "" +--- + +# M01 — Kontakt anlegen + +## Ziel + +Neuen Kontakt in Sekunden anlegen — ohne Dubletten zu produzieren. + +## Pattern / Archetyp + +A5 Dialog (echtes Modal: DialogLayout → Dialog → Dialog.Content). + +## Daten + +- **Pflicht: nur der Name.** Optional: Typ (Privatperson/Organisation, Default Privatperson), E-Mail, Telefon, Organisation verknüpfen (mit Rolle), Verantwortlicher +- **Live-Duplikat-Check** beim Tippen (Name/E-Mail/Telefon): Banner »Gibt es schon?« mit Treffer-Vorschau + +## Aktionen + +- »Anlegen« → Karteikarte öffnet sich (dort Rest pflegen) +- Bei Duplikat-Banner: »Bestehenden öffnen« oder »Trotzdem anlegen« +- Abbrechen + +## Meldungsentscheidung + +| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz | +|---|---|---|---|---| +| Mögliches Duplikat | Banner im Modal | nein | Nur dokumentieren | Treffer klickbar | +| Name leer | Inline-Validierung | ja (Feld) | Nur dokumentieren | einziges Pflichtfeld | + +## Subframe + +- (erst nach explizitem OK) + +## Notizen + +- Wird auch aus anderen Flows geöffnet (z. B. Lead → Projekt: Kontakt verknüpfen/anlegen in D-P7). diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M02 Organisation anlegen.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M02 Organisation anlegen.md new file mode 100644 index 00000000..96b70258 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M02 Organisation anlegen.md @@ -0,0 +1,38 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: M02 +screen: Organisation anlegen +typ: Modal +umsetzung: Bauen +status: Validiert +route: "aus S02 + aus M01/S03 (Organisation verknuepfen)" +subframe: "" +--- + +# M02 — Organisation anlegen + +## Ziel + +Neue Organisation schnell anlegen — gleiches Muster wie Kontakt anlegen. + +## Pattern / Archetyp + +A5 Dialog, analog [[M01 Kontakt anlegen]]. + +## Daten + +- **Pflicht: nur der Name.** Optional: Branche/Merkmal, E-Mail, Telefon, Adresse, Verantwortlicher, Hauptkontakt verknüpfen +- Live-Duplikat-Check (Name/E-Mail) + +## Aktionen + +- »Anlegen« → Organisations-Karteikarte öffnet +- Duplikat-Banner: »Bestehende öffnen« / »Trotzdem anlegen« +- Abbrechen + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M03 Zusammenfuehren.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M03 Zusammenfuehren.md new file mode 100644 index 00000000..c01e019d --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M03 Zusammenfuehren.md @@ -0,0 +1,45 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: M03 +screen: Zusammenfuehren +typ: Modal (gross) +umsetzung: Bauen +status: Validiert +route: "aus S07" +subframe: "" +--- + +# M03 — Zusammenführen (Seite an Seite) + +## Ziel + +Zwei Dubletten kontrolliert zu einem Eintrag verschmelzen — Feld für Feld. + +## Pattern / Archetyp + +A5 großes Modal mit **Side-by-Side-Vergleich** (aufwendigste Einzelkomponente des Pakets). + +## Daten + +- Beide Einträge nebeneinander, Feld für Feld +- Je Feld wählbar, welcher Wert überlebt (Standard: der vollständigere) +- Unten: was zusammengeführt wird (Verlauf, Aufgaben, Dateien, Projekte beider Einträge wandern zum Ziel) + +## Aktionen + +- Feld-Auswahl je Zeile (links/rechts) +- »Zusammenführen« → Bestätigung mit Klartext: **»Kann nicht rückgängig gemacht werden. Der andere Eintrag wird aufgelöst, sein Verlauf bleibt erhalten.«** +- Abbrechen + +## Meldungsentscheidung + +| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz | +|---|---|---|---|---| +| Endgültigkeit | Bestätigungs-Schritt | ja | Nur dokumentieren | s. oben | + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S01 Kontakte-Liste.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S01 Kontakte-Liste.md new file mode 100644 index 00000000..1ef80bb2 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S01 Kontakte-Liste.md @@ -0,0 +1,57 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S01 +screen: Kontakte-Liste +typ: Liste +umsetzung: Bauen +status: Validiert +route: "/contacts" +subframe: "" +--- + +# S01 — Kontakte-Liste + +## Ziel + +Jeden Kontakt in Sekunden finden. + +## Pattern / Archetyp + +A2 Liste; oben Reiter-Wechsel zu [[S02 Organisationen-Liste]]. + +## Daten + +- **Zeigt ALLE Personen** — auch Ansprechpartner aus Organisationen (validiert): Zeile macht die Zugehörigkeit sichtbar (Organisation + Rollen-Badge Haupt-/Sekundärkontakt) +- Zeile: Avatar + Name · Organisation (mit Rolle) · Kontaktstatus (Kontakt/Kunde/Bestandskunde) · E-Mail · Telefon · Tags · Verantwortlicher · letzte Aktivität +- Suche · Filter: Verantwortlicher, Kontaktstatus, Tags (UND/ODER), Organisation (auch »ohne Organisation«), Datum · Archiviert-Schalter +- Keine Misch-Liste: Organisationen haben ihren eigenen Reiter ([[S02 Organisationen-Liste]]) +- Server-seitig sortiert/paginiert + +## Aktionen + +- Zeile öffnen → [[S03 Kontakt-Karteikarte]] +- »+ Kontakt« → [[M01 Kontakt anlegen]] +- Mehrfach-Auswahl: Tag vergeben · Verantwortlichen zuweisen · Archivieren · CSV-Export + +## Zustände + +| Zustand | Beschreibung | Umsetzung | +|---|---|---| +| Leer (Filter/read_own) | »Keine Kontakte für diese Filter« + zurücksetzen | Nur dokumentieren | +| Laden / Fehler | A7 | Wiederverwenden | + +## Permissions / Gates + +`crm.*` — bei `read_own` erscheinen nur eigene Kontakte (server-seitig). + +## Subframe + +- (erst nach explizitem OK) + +## Notizen + +- D01 Inline-Anlegen (Notion-Stil: Plus → neue Zeile, nur Name Pflicht, leere Zeile löscht sich) — dokumentiert, Später. +- Großer CSV-Export läuft im Hintergrund + Benachrichtigung. diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S02 Organisationen-Liste.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S02 Organisationen-Liste.md new file mode 100644 index 00000000..be12f108 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S02 Organisationen-Liste.md @@ -0,0 +1,48 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S02 +screen: Organisationen-Liste +typ: Liste +umsetzung: Bauen +status: Validiert +route: "/contacts/companies" +subframe: "" +--- + +# S02 — Organisationen-Liste + +## Ziel + +Alle Firmen/Organisationen im Blick — zweiter Einstieg im Kontakte-Tab. + +## Pattern / Archetyp + +A2 Liste (Reiter neben [[S01 Kontakte-Liste]]). UI-Begriff: **»Organisation«**, nicht »Unternehmen«. + +## Daten + +- Zeile: Name · Branche/Merkmal · Anzahl verknüpfter Kontakte · Verantwortlicher · letzte Aktivität · Tags +- Suche · Filter analog S01 + +## Aktionen + +- Zeile öffnen → [[S04 Organisations-Karteikarte]] +- »+ Organisation« → [[M02 Organisation anlegen]] +- Mehrfach-Aktionen analog S01 + +## Zustände + +| Zustand | Beschreibung | Umsetzung | +|---|---|---| +| Leer / Laden / Fehler | analog S01 | Wiederverwenden | + +## Permissions / Gates + +Wie S01. + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S03 Kontakt-Karteikarte.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S03 Kontakt-Karteikarte.md new file mode 100644 index 00000000..45ed296a --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S03 Kontakt-Karteikarte.md @@ -0,0 +1,64 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S03 +screen: Kontakt-Karteikarte +typ: Detail (Muster-Vorlage) +umsetzung: Bauen +status: Validiert +route: "/contacts/:id" +subframe: "" +--- + +# S03 — Kontakt-Karteikarte ⭐ + +## Ziel + +In 5 Sekunden im Bilde sein: Wer ist das, was lief zuletzt, was ist offen? **Die Muster-Vorlage für ALLE Detailseiten der App.** + +## Pattern / Archetyp + +A3 Detail — validiertes Grundgerüst: **Zweispalter + Reiter**. + +## Aufbau (validiert) + +- **Kopf:** Avatar, Name, Kontaktstatus-Badge, Organisation + Rolle · **Schnell-Aktionen:** Anrufen (v1: `tel:`-Link; AirCall kommt mit P15) · E-Mail · Termin · Aufgabe · Tag +- **Linke Spalte (schmal):** Stammdaten inline editierbar (Klick → Feld → speichern) · eigene Felder (SHK-Vorlagen) · Tags · **Verknüpfungen mit Rolle**: Organisationen, bei denen die Person Haupt-/Sekundärkontakt ist — und umgekehrt kann auch eine Privatperson eigene Sekundärkontakte haben (z. B. Ehepartner), gleiche Mechanik wie bei Organisationen +- **Rechte Spalte (breit), Reiter:** + - **Verlauf** (Default): chronologischer Activity-Stream — Anrufe, BCC-Mails, Notizen, Status-Wechsel, mit Actor-Marker + - **Projekte:** verknüpfte Projekte mit Board-Status (kommt inhaltlich mit D-P8) + - **Aufgaben:** eingebettete Kompakt-Liste = V01 aus WF-P4 Aufgaben + - **Dateien:** vorgefilterte Datei-Sektion aus WF-P4 Dateien + - **Notizen:** Markdown-Notizen +- **»Verlauf dieses Objekts«** (Audit): Einstieg zum M03-Drawer aus WF-P3 Audit Log + +## Aktionen + +- Inline-Edit aller Stammdaten/eigenen Felder · Tag hinzufügen/entfernen · Organisation verknüpfen (mit Rolle) +- Archivieren · Zusammenführen-Hinweis bei Duplikat-Verdacht + +## Banner / Hinweise + +- Duplikat-Verdacht: Banner »Ähnlicher Kontakt existiert« → Duplikat-Tool + +## Zustände + +| Zustand | Beschreibung | Umsetzung | +|---|---|---| +| Nicht gefunden / kein Recht | 404 | Wiederverwenden | +| Laden / Fehler | A7 | Wiederverwenden | +| Verlauf leer | »Noch keine Aktivitäten« | Nur dokumentieren | + +## Permissions / Gates + +`crm.*`; Schnell-Aktionen rechte-abhängig. + +## Subframe + +- (erst nach explizitem OK) + +## Notizen + +- **Nach dem Subframe-Bau:** dieses Muster (Kopf + Zweispalter + Reiter) als Detailseiten-Standard festhalten → `04 Standards`, nur mit Davids Freigabe. diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S04 Organisations-Karteikarte.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S04 Organisations-Karteikarte.md new file mode 100644 index 00000000..88545167 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S04 Organisations-Karteikarte.md @@ -0,0 +1,37 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S04 +screen: Organisations-Karteikarte +typ: Detail +umsetzung: Bauen +status: Validiert +route: "/contacts/companies/:id" +subframe: "" +--- + +# S04 — Organisations-Karteikarte + +## Ziel + +Alles über eine Organisation — gleiches Muster wie die Kontakt-Karteikarte. + +## Pattern / Archetyp + +A3, **gleiches Grundgerüst wie [[S03 Kontakt-Karteikarte]]** (Zweispalter + Reiter). + +## Unterschiede zu S03 + +- Linke Spalte zusätzlich: **Ansprechpartner-Liste** — alle verknüpften Personen mit Rollen-Badge, **genau ein Hauptkontakt** (markiert, umhängbar; erste zugeordnete Person wird automatisch Hauptkontakt) · hinzufügen (bestehenden Kontakt oder neu via [[M01 Kontakt anlegen]]) +- Kopf: Organisations-Merkmal/Branche statt Kontaktstatus-Person-Logik (Status gibt es auch hier: Kontakt/Kunde/Bestandskunde) +- Reiter identisch: Verlauf · Projekte · Aufgaben · Dateien · Notizen + +## Zustände / Permissions + +Wie S03. + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S05 Eigene Felder.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S05 Eigene Felder.md new file mode 100644 index 00000000..99a61dc6 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S05 Eigene Felder.md @@ -0,0 +1,44 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S05 +screen: Eigene Felder +typ: Settings-Liste +umsetzung: Bauen +status: Validiert +route: "/admin/custom-fields (Einstellungen -> Daten)" +subframe: "" +--- + +# S05 — Eigene Felder + +## Ziel + +Zusatzfelder definieren, die der Betrieb wirklich braucht (»Heizungstyp«, »Baujahr Anlage«). + +## Pattern / Archetyp + +A2 Settings-Liste unter Einstellungen → Daten. + +## Daten + +- Felder je Ziel-Typ (Kontakt / Projekt / Anfrage / Rechnung — umschaltbar) +- Je Feld: Name · Feld-Typ (Text, Zahl, Datum, Auswahl …) · Nutzungs-Anzahl · Quelle (SHK-Vorlage / eigenes) · Sortierung (Ziehen) +- SHK-Branchen-Felder sind vorbefüllt + +## Aktionen + +- Feld anlegen/bearbeiten (kleines Modal/Inline) · Archivieren (kein Hard-Delete bei Nutzung) · Reihenfolge ziehen + +## Zustände + +| Zustand | Beschreibung | Umsetzung | +|---|---|---| +| Feld in Nutzung archivieren | Hinweis mit Nutzungs-Anzahl | Nur dokumentieren | +| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden | + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S06 Tags.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S06 Tags.md new file mode 100644 index 00000000..c36dcf89 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S06 Tags.md @@ -0,0 +1,43 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S06 +screen: Tags +typ: Settings-Liste +umsetzung: Bauen +status: Validiert +route: "/admin/tags (Einstellungen -> Daten)" +subframe: "" +--- + +# S06 — Tags + +## Ziel + +Tags zentral pflegen, Wildwuchs zusammenführen. + +## Pattern / Archetyp + +A2 Settings-Liste unter Einstellungen → Daten. + +## Daten + +- Je Tag: Name · Farbe · Anzahl Verknüpfungen + +## Aktionen + +- Tag anlegen/umbenennen/Farbe ändern +- **Zusammenführen** (Tag A in Tag B aufgehen lassen, mit Bestätigung + Anzahl-Klartext) +- Löschen (mit Hinweis auf Verknüpfungs-Anzahl) + +## Zustände + +| Zustand | Beschreibung | Umsetzung | +|---|---|---| +| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden | + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S07 Duplikat-Tool.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S07 Duplikat-Tool.md new file mode 100644 index 00000000..9d6d24e8 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S07 Duplikat-Tool.md @@ -0,0 +1,44 @@ +--- +kind: screen +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +id: S07 +screen: Duplikat-Tool +typ: Settings-Liste +umsetzung: Bauen +status: Validiert +route: "/admin/duplicates (Einstellungen -> Daten)" +subframe: "" +--- + +# S07 — Duplikat-Tool + +## Ziel + +Doppelte Kontakte/Organisationen finden und sauber verschmelzen. + +## Pattern / Archetyp + +A2 Liste unter Einstellungen → Daten. + +## Daten + +- Duplikat-Paare mit **Match-Grund** (gleiche E-Mail / gleiches Telefon / ähnlicher Name) +- Vorschau beider Einträge je Paar + +## Aktionen + +- Paar öffnen → [[M03 Zusammenfuehren]] +- »Kein Duplikat« (Paar verwerfen, taucht nicht wieder auf) + +## Zustände + +| Zustand | Beschreibung | Umsetzung | +|---|---|---| +| Keine Duplikate | »Alles sauber — keine Dubletten gefunden« | Nur dokumentieren | +| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden | + +## Subframe + +- (erst nach explizitem OK) diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas new file mode 100644 index 00000000..c13b52fe --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas @@ -0,0 +1,69 @@ +{ + "nodes":[ + {"id":"group-daten","type":"group","x":-80,"y":1020,"width":2980,"height":380,"label":"Datenpflege (Einstellungen → Daten)"}, + {"id":"group-kontakte","type":"group","x":-80,"y":-100,"width":1820,"height":380,"label":"Kontakte"}, + {"id":"group-orgs","type":"group","x":-80,"y":460,"width":1820,"height":380,"label":"Organisationen (Reiter im selben Tab)"}, + {"id":"group-anlegen","type":"group","x":1960,"y":460,"width":1120,"height":380,"label":"Anlegen (Modals)"}, + {"id":"group-modell","type":"group","x":1980,"y":-520,"width":700,"height":520,"label":"Kontaktmodell (validiert 2026-07-08)"}, + {"id":"md-paket","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md","x":-80,"y":-440,"width":460,"height":280}, + {"id":"note-entry","type":"text","text":"# Einstieg\n\nSidebar → Kontakte (`/contacts`).\n\nZwei Reiter, nie gemischt: **Kontakte** (ALLE Personen, auch Ansprechpartner — Organisation + Rolle in der Zeile) und **Organisationen**.","x":0,"y":0,"width":360,"height":200}, + {"id":"s01","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S01 Kontakte-Liste.md","x":560,"y":0,"width":420,"height":200}, + {"id":"s03","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S03 Kontakt-Karteikarte.md","x":1240,"y":0,"width":420,"height":200}, + {"id":"note-orgs","type":"text","text":"# Hinweis\n\nUI-Begriff »Organisation«, nicht »Firma/Unternehmen« (öffentl. Einrichtungen!).\n\nKarteikarte zeigt die **Ansprechpartner-Liste** mit Rollen — genau EIN Hauptkontakt (markiert, umhängbar).","x":0,"y":560,"width":360,"height":200}, + {"id":"s02","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S02 Organisationen-Liste.md","x":560,"y":560,"width":420,"height":200}, + {"id":"s04","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S04 Organisations-Karteikarte.md","x":1240,"y":560,"width":420,"height":200}, + {"id":"m01","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M01 Kontakt anlegen.md","x":2000,"y":560,"width":420,"height":200}, + {"id":"m02","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M02 Organisation anlegen.md","x":2580,"y":560,"width":420,"height":200}, + {"id":"note-daten","type":"text","text":"# Einstieg\n\nEinstellungen → Daten. Gilt auch für Projekte/Anfragen (Ziel-Typ umschaltbar).","x":0,"y":1120,"width":360,"height":200}, + {"id":"s05","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S05 Eigene Felder.md","x":560,"y":1120,"width":420,"height":200}, + {"id":"s06","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S06 Tags.md","x":1140,"y":1120,"width":420,"height":200}, + {"id":"s07","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S07 Duplikat-Tool.md","x":1720,"y":1120,"width":420,"height":200}, + {"id":"m03","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M03 Zusammenfuehren.md","x":2400,"y":1120,"width":420,"height":200}, + {"id":"note-modell","type":"text","text":"# Regeln\n- **EIN Datensatz für alles:** »Firma« = Kontakt vom Typ Organisation (Unterart = Auswahlfeld)\n- **Kontaktart (Haupt/Sekundär) = Rolle der Verknüpfung**, nicht der Person\n- Privatperson: nur Name Pflicht, keine Kontaktart-Frage\n- Organisation: auch ohne Person anlegbar\n- Genau **ein Hauptkontakt** je Organisation — erste Person automatisch, umhängbar\n- Auch **Privatpersonen können Sekundärkontakte** haben (Shell-Prinzip, z. B. Ehepartner)","x":2020,"y":-440,"width":620,"height":400} + ], + "edges":[ + { + "id":"e-entry", + "styleAttributes":{"path":"dotted"}, + "fromNode":"note-entry", + "fromSide":"right", + "toNode":"s01", + "toSide":"left" + }, + {"id":"e-open","fromNode":"s01","fromSide":"right","toNode":"s03","toSide":"left","label":"Kontakt öffnen"}, + { + "id":"e-tab", + "styleAttributes":{"path":"dotted"}, + "fromNode":"s01", + "fromSide":"bottom", + "toNode":"s02", + "toSide":"top", + "label":"Reiter Organisationen" + }, + {"id":"e-open2","fromNode":"s02","fromSide":"right","toNode":"s04","toSide":"left","label":"öffnen"}, + {"id":"e-new1","fromNode":"s01","fromSide":"bottom","toNode":"m01","toSide":"top","label":"+ Kontakt"}, + {"id":"e-new2","fromNode":"s02","fromSide":"bottom","toNode":"m02","toSide":"bottom","label":"+ Organisation"}, + { + "id":"e-after", + "styleAttributes":{"path":"long-dashed"}, + "fromNode":"m01", + "fromSide":"top", + "toNode":"s03", + "toSide":"right", + "label":"öffnet Karteikarte" + }, + { + "id":"e-entry-daten", + "styleAttributes":{"path":"dotted"}, + "fromNode":"note-daten", + "fromSide":"right", + "toNode":"s05", + "toSide":"left" + }, + {"id":"e-merge","fromNode":"s07","fromSide":"right","toNode":"m03","toSide":"left","label":"Paar öffnen"} + ], + "metadata":{ + "version":"1.0-1.0", + "frontmatter":{} + } +} \ No newline at end of file diff --git a/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md new file mode 100644 index 00000000..b9786259 --- /dev/null +++ b/02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md @@ -0,0 +1,143 @@ +--- +kind: wireframe-package +project: HiveGrid Screen Project +ticket: D-CRM +package: WF-P6 Kontakte und Organisationen +typ: Flow +status: Validiert +subframe: "" +canvas: "WF-P6 Kontakte und Organisationen.canvas" +--- + +# WF-P6 Kontakte und Organisationen + +Status: Validiert (Screen-Liste) +Subframe-Link: - +Canvas: [Canvas]() +Stand: 2026-07-08 + +--- + +## 1. Kurzfassung + +Das Adressbuch mit Gedächtnis: Kontakte- und Organisationen-Listen, die **Kontakt-Karteikarte als Vorlage für ALLE Detailseiten**, Anlegen mit Duplikat-Warnung, plus die drei Datenpflege-Seiten in den Einstellungen (Eigene Felder, Tags, Duplikat-Tool). Fundament der Kette Anfrage → Projekt. + +--- + +## 2. Intent Check + +| Frage | Antwort | +|---|---| +| Welches Ticket/Modul ist betroffen? | D-CRM (P6), Dev-Pendant R-P6 | +| Was soll der Nutzer am Ende schaffen? | Kunden finden, in 5 Sekunden im Bilde sein (Verlauf), Daten pflegen, Dubletten loswerden | +| Flow, Screen, Zustand oder Doku? | Screen-Cluster: 2 Listen, 2 Karteikarten, 2 Anlege-Modals, 3 Einstellungs-Seiten, 1 Merge-Modal | +| Welche Planning-Quellen wurden geprüft? | `ticket-docs/D-CRM.md`, ENTITY-MODEL (Pivot-Vorrang), SCREEN-MAP §2, HiveGrid Map | +| Was ist sicher im Scope? | Alles oben + Live-Duplikat-Check + Kontaktmodell (Typ/Status/Rolle) | +| Was ist sicher nicht im Scope? | Leads (D-P7), Pipelines (D-P8), Lead-Promotion-Modal (Pivot: existiert nicht mehr) | +| Admin/Normalrolle-Unterschiede? | `crm.*`-Rechte (read_own/read_all/write/delete/admin); bei read_own sieht man nur eigene | +| Unsichere Annahmen? | Inline-Anlegen in der Liste (Notion-Stil) — als Option dokumentiert, nicht v1-gebaut | + +--- + +## 3. Scope + +| Punkt | Inhalt | +|---|---| +| Ticket/Modul | D-CRM · Kontakte & Organisationen + Datenpflege | +| Nutzerrolle | Maximalansicht (Admin) | +| Startpunkt | Sidebar »Kontakte« | +| Ziel | Kontakt gefunden/angelegt/gepflegt; Historie sichtbar | +| Haupt-Archetyp | A2 Listen · **A3 Detail (Muster-Vorlage!)** · A5 Modals · A2 Settings-Listen | +| Bespoke-Anteil | Keiner; Side-by-Side-Merge ist die aufwendigste Einzelkomponente | +| Out of scope | Leads, Pipelines, Kampagnen-Anbindung (nur Anzeige im Verlauf) | + +--- + +## 4. Entscheidungen (validiert 2026-07-08) + +| Entscheidung | Status | Notiz | +|---|---|---| +| EIN großes Paket (inkl. Datenpflege-Seiten) | genommen | Davids Entscheidung | +| Anlegen als **Modal** mit Live-Duplikat-Warnung | genommen | Nach Anlegen öffnet die Karteikarte | +| **Inline-Anlegen in der Liste (Notion-Stil)** | dokumentiert / später | Davids Idee: Plus in der Liste → neue Zeile inline; funktioniert, weil nur der Name Pflicht ist; Zeile ohne Namen wird automatisch gelöscht. Erstmal nicht bauen | +| Karteikarte = **Zweispalter + Reiter** | genommen | Links schmal: Stammdaten, eigene Felder, Tags, Verknüpfungen (inline editierbar). Rechts breit: Reiter Verlauf · Projekte · Aufgaben · Dateien · Notizen. Schnell-Aktionen im Kopf. **= Muster-Vorlage für alle Detailseiten** | +| Kontaktmodell (fix aus Datenmodell) | genommen | EIN Kontakt-Datensatz für alles. Typ = Privatperson/Organisation (Organisations-Art wie Unternehmen/öffentl. Einrichtung = einfaches Auswahlfeld) · Status = Kontakt/Kunde/Bestandskunde · Kontaktart (Haupt-/Sekundär) = **Rolle der Verknüpfung**, nicht der Person | +| **Zwei getrennte Reiter, keine Misch-Liste** | genommen | Reiter »Kontakte« (alle Personen) + Reiter »Organisationen« — nie beide Typen in einer Liste gemischt (validiert 2026-07-08) | +| Kontakte-Reiter zeigt **ALLE Personen** | genommen | Auch Ansprechpartner, die in Organisationen stecken — mit sichtbarer Organisation + Rolle in der Zeile. Privatpersonen sowieso | +| **Anlege-Regeln** | genommen | Privatperson: nur Name Pflicht, keine Kontaktart-Frage (steht für sich) · Organisation: auch ohne Person anlegbar, Ansprechpartner optional · Zuordnung Person→Organisation mit Rollen-Wahl · genau EIN Hauptkontakt je Organisation, erste zugeordnete Person automatisch (umhängbar) | +| **Auch Privatpersonen können Sekundärkontakte haben** | genommen | Davids »Shell«-Gedanke: Verknüpfungen gehen an jeden Kontakt (z. B. Ehepartner/Mitbewohner an einer Privatperson) — gleiche Mechanik wie bei Organisationen, nur andere Felder | +| Datenpflege-Seiten unter Einstellungen → Daten | genommen | passt zum Infrastruktur-Beschluss | +| Querschnitts-Bausteine einbetten | genommen | Aufgaben-Reiter = V01 (P4) · Datei-Sektion (P4) · »Verlauf«-Drawer = M03 (P3 Audit) — werden referenziert, nicht neu gebaut | + +### Happy Path + +1. Sidebar »Kontakte« → Liste, tippen/filtern, Kontakt öffnen. +2. Karteikarte: links Stammdaten direkt editieren; rechts im Verlauf sehen, was zuletzt lief (Anrufe, Mails, Notizen); Schnell-Aktion »Aufgabe« oder »Termin« direkt aus dem Kopf. +3. Neuer Kunde ruft an → »+ Kontakt« → Modal, beim Tippen kommt ggf. »gibt's schon« → bestehenden öffnen statt Dublette anlegen. +4. Aufräumen: Einstellungen → Duplikat-Tool → Paar nebeneinander → Feld für Feld übernehmen → zusammenführen. + +### Meldungs-/Error-States (validiert) + +| Ereignis | UI-Form | Blockiert? | Bauen? | Copy/Notiz | +|---|---|---|---|---| +| Fremder Kontakt bei `read_own` | 404 bzw. taucht in Liste nicht auf | ja | Wiederverwenden | Dev-Vorgabe | +| Mögliches Duplikat beim Anlegen | Banner im Modal: »trotzdem anlegen« / »bestehenden öffnen« | nein | Nur dokumentieren | Live-Check beim Tippen | +| Zusammenführen ist endgültig | Bestätigung mit Klartext | ja (Aktion) | Nur dokumentieren | »Kann nicht rückgängig gemacht werden« | +| Großer CSV-Export | läuft im Hintergrund + Meldung | nein | Nur dokumentieren | Benachrichtigung wenn fertig | +| Leere Liste (Filter/read_own) | Leer-Zustand mit Klartext | nein | Nur dokumentieren | »Keine Kontakte für diese Filter« | + +--- + +## 7. Validierte Screen-Liste + +| ID | Screen/Zustand | Typ | Umsetzung | Ort | Status | +|---|---|---|---|---|---| +| S01 | Kontakte-Liste | Liste | Bauen | `/contacts` | Validiert | +| S02 | Organisationen-Liste | Liste | Bauen | `/contacts/companies` | Validiert | +| S03 | Kontakt-Karteikarte ⭐ | Detail (Muster-Vorlage) | Bauen | `/contacts/:id` | Validiert | +| S04 | Organisations-Karteikarte | Detail | Bauen | `/contacts/companies/:id` | Validiert | +| M01 | Kontakt anlegen | Modal | Bauen | aus S01 + überall | Validiert | +| M02 | Organisation anlegen | Modal | Bauen | aus S02 | Validiert | +| S05 | Eigene Felder | Settings-Liste | Bauen | `/admin/custom-fields` | Validiert | +| S06 | Tags | Settings-Liste | Bauen | `/admin/tags` | Validiert | +| S07 | Duplikat-Tool | Settings-Liste | Bauen | `/admin/duplicates` | Validiert | +| M03 | Zusammenführen (Seite an Seite) | Modal (groß) | Bauen | aus S07 | Validiert | +| D01 | Inline-Anlegen in Liste (Notion-Stil) | Idee | Später | in S01 | Dokumentiert | +| D02–D05 | Banner/Zustände (s. Tabelle) | Inline/Banner | Nur dokumentieren | — | Validiert | + +--- + +## 8. Grid + +```text +Sidebar -> S01 <-> S02 (Reiter) +S01 -> S03 (Karteikarte) / S02 -> S04 +S01 -> M01 (+ Kontakt) / S02 -> M02 +Einstellungen -> S05 / S06 / S07 -> M03 (Zusammenfuehren) +S03/S04 betten ein: Aufgaben V01 (P4), Datei-Sektion (P4), Verlauf-Drawer M03 (P3 Audit) +``` + +--- + +## 9. Screen-Pakete + +- [[S01 Kontakte-Liste]] · [[S02 Organisationen-Liste]] +- [[S03 Kontakt-Karteikarte]] · [[S04 Organisations-Karteikarte]] +- [[M01 Kontakt anlegen]] · [[M02 Organisation anlegen]] +- [[S05 Eigene Felder]] · [[S06 Tags]] · [[S07 Duplikat-Tool]] · [[M03 Zusammenfuehren]] + +--- + +## 10. Offene Fragen + +- Inline-Anlegen (D01): wann/ob bauen → David entscheidet später +- Reiter-Label: David sagte locker »Firmen oder sowas« — Spec-Vorgabe ist »Organisation« (öffentliche Einrichtungen sind keine Firmen); wir bleiben bei **»Organisationen«**, final beim Subframe-Bau +- Sekundärkontakte an Privatpersonen (Shell-Gedanke): Datenmodell (KontaktRelation = Kontakt↔Kontakt) deckt das ab — beim Handoff kurz mit Dev bestätigen +- Quick-Action »Anrufen« zeigt in v1 `tel:`-Link, AirCall-Anbindung kommt mit D-P15 +- Karteikarten-Muster nach Subframe-Bau als Standard dokumentieren (→ `04 Standards`, nur mit Davids Freigabe) + +## 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)* diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M01 Lead zu Projekt.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M01 Lead zu Projekt.md new file mode 100644 index 00000000..c998fec2 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M01 Lead zu Projekt.md @@ -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. diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M02 Anfrage anlegen.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M02 Anfrage anlegen.md new file mode 100644 index 00000000..04ee668f --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M02 Anfrage anlegen.md @@ -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. diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M03 CSV-Import.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M03 CSV-Import.md new file mode 100644 index 00000000..a7a3a220 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M03 CSV-Import.md @@ -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). diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S01 Lead-Inbox.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S01 Lead-Inbox.md new file mode 100644 index 00000000..0609db12 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S01 Lead-Inbox.md @@ -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. diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S02 Lead-Detail.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S02 Lead-Detail.md new file mode 100644 index 00000000..6261d7f0 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S02 Lead-Detail.md @@ -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) diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S03 Lead-Statistiken.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S03 Lead-Statistiken.md new file mode 100644 index 00000000..75649f1d --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S03 Lead-Statistiken.md @@ -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) diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S04 Quellen-Verwaltung.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S04 Quellen-Verwaltung.md new file mode 100644 index 00000000..722ed687 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S04 Quellen-Verwaltung.md @@ -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) diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S05 Spam-Schutz.md b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S05 Spam-Schutz.md new file mode 100644 index 00000000..ba8f6cd1 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S05 Spam-Schutz.md @@ -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) diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas b/02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas new file mode 100644 index 00000000..46ec3ae8 --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas @@ -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)"} + ] +} diff --git a/02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.md b/02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.md new file mode 100644 index 00000000..9ee9ad9a --- /dev/null +++ b/02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.md @@ -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]() +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)* diff --git a/02 Wireframes/Screen Paket Tracker.md b/02 Wireframes/Screen Paket Tracker.md index 428ee89a..95ed2828 100644 --- a/02 Wireframes/Screen Paket Tracker.md +++ b/02 Wireframes/Screen Paket Tracker.md @@ -40,6 +40,8 @@ Diese Datei ist der erste Ort, um zu sehen: | WF-P4 Aufgaben | D-P4 | Aufgaben & Dateien | Validiert | [MD]() | [Canvas]() | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; inkl. Davids Delta: Topbar-Button + Aufgaben-Drawer | | WF-P4 Dateien | D-P4 | Aufgaben & Dateien | Validiert | [MD]() | [Canvas]() | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Teilen/Ordner/Versionen sichtbar als Backlog v2 | | WF-P5 Integrationen | D-P5 | Integrationen | Validiert | [MD]() | [Canvas]() | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Sync-Verlauf als eigene Seiten; Connection-Card = Muster fuer P14/P15/P16 | +| WF-P6 Kontakte und Organisationen | D-CRM | Kontakte | Validiert | [MD]() | [Canvas]() | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Karteikarte = Muster-Vorlage fuer alle Detailseiten (Zweispalter + Reiter) | +| WF-P7 Leads | D-P7 | Leads | Validiert | [MD]() | [Canvas]() | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Lead->Projekt als grosses Modal (+Bulk); CSV-Import = Davids Delta/CR | --- @@ -130,6 +132,25 @@ Diese Datei ist der erste Ort, um zu sehen: | M01 | Assistent OAuth | WF-P5 Integrationen | Modal/Wizard | Bauen | Validiert | aus S02 | [MD]() | - | [Canvas]() | | M02 | Assistent API-Schluessel | WF-P5 Integrationen | Modal/Wizard | Bauen | Validiert | aus S02 | [MD]() | - | [Canvas]() | | M03 | Trennen-Bestaetigung | WF-P5 Integrationen | Modal | Bauen | Validiert | aus S02 | [MD]() | - | [Canvas]() | +| S01 | Kontakte-Liste | WF-P6 Kontakte und Organisationen | Liste | Bauen | Validiert | `/contacts` | [MD]() | - | [Canvas]() | +| S02 | Organisationen-Liste | WF-P6 Kontakte und Organisationen | Liste | Bauen | Validiert | `/contacts/companies` | [MD]() | - | [Canvas]() | +| S03 | Kontakt-Karteikarte (Muster-Vorlage) | WF-P6 Kontakte und Organisationen | Detail | Bauen | Validiert | `/contacts/:id` | [MD]() | - | [Canvas]() | +| S04 | Organisations-Karteikarte | WF-P6 Kontakte und Organisationen | Detail | Bauen | Validiert | `/contacts/companies/:id` | [MD]() | - | [Canvas]() | +| M01 | Kontakt anlegen | WF-P6 Kontakte und Organisationen | Modal | Bauen | Validiert | aus S01 + ueberall | [MD]() | - | [Canvas]() | +| M02 | Organisation anlegen | WF-P6 Kontakte und Organisationen | Modal | Bauen | Validiert | aus S02 | [MD]() | - | [Canvas]() | +| S05 | Eigene Felder | WF-P6 Kontakte und Organisationen | Settings-Liste | Bauen | Validiert | `/admin/custom-fields` | [MD]() | - | [Canvas]() | +| S06 | Tags | WF-P6 Kontakte und Organisationen | Settings-Liste | Bauen | Validiert | `/admin/tags` | [MD]() | - | [Canvas]() | +| S07 | Duplikat-Tool | WF-P6 Kontakte und Organisationen | Settings-Liste | Bauen | Validiert | `/admin/duplicates` | [MD]() | - | [Canvas]() | +| M03 | Zusammenfuehren (Seite an Seite) | WF-P6 Kontakte und Organisationen | Modal (gross) | Bauen | Validiert | aus S07 | [MD]() | - | [Canvas]() | +| D01 | Inline-Anlegen in Liste (Notion-Stil) | WF-P6 Kontakte und Organisationen | Idee | Spaeter | Dokumentiert | in S01 | [MD]() | - | - | +| S01 | Lead-Inbox (Triage) | WF-P7 Leads | Liste | Bauen | Validiert | `/leads` | [MD]() | - | [Canvas]() | +| S02 | Lead-Detail | WF-P7 Leads | Detail | Bauen | Validiert | `/leads/:id` | [MD]() | - | [Canvas]() | +| M01 | Lead zu Projekt (Kern-Moment) | WF-P7 Leads | Modal (gross, +Bulk) | Bauen | Validiert | aus S01/S02 | [MD]() | - | [Canvas]() | +| S03 | Lead-Statistiken | WF-P7 Leads | KPI-Seite | Bauen | Validiert | `/leads/statistics` | [MD]() | - | [Canvas]() | +| M02 | Anfrage anlegen | WF-P7 Leads | Modal | Bauen | Validiert | aus S01 | [MD]() | - | [Canvas]() | +| M03 | CSV-Import-Wizard | WF-P7 Leads | Modal/Wizard | Bauen | Validiert (Delta) | aus S01 | [MD]() | - | [Canvas]() | +| S04 | Quellen-Verwaltung | WF-P7 Leads | Settings-Liste | Bauen | Validiert | `/admin/lead-sources` | [MD]() | - | [Canvas]() | +| S05 | Spam-Schutz | WF-P7 Leads | Settings | Bauen | Validiert | `/admin/lead-anti-spam` | [MD]() | - | [Canvas]() | --- @@ -199,6 +220,14 @@ Diese Datei ist der erste Ort, um zu sehen: | WF-P5 Integrationen | Sync-Verlauf-Ort | Genommen | Verlauf und Lauf-Detail als eigene Seiten (kein Drawer-Muster). | Davids Entscheidung 2026-07-08 | | WF-P5 Integrationen | Assistent-Varianten | Genommen | OAuth-Weg und API-Schluessel-Weg als eigene Frames. | Formular auto-generiert aus App-Schema | | WF-P5 Integrationen | Kommende Apps als Teaser? | Offen | Zeigt der Katalog nicht verfuegbare Apps mit Schloss (analog Abo-Gating)? | David/Dev | +| WF-P6 Kontakte | Karteikarten-Grundgeruest | Genommen | Zweispalter + Reiter (links Stammdaten/Felder/Tags/Verknuepfungen, rechts Reiter Verlauf/Projekte/Aufgaben/Dateien/Notizen). | Muster-Vorlage fuer ALLE Detailseiten; nach Subframe-Bau als Standard festhalten (mit Freigabe) | +| WF-P6 Kontakte | Anlegen | Genommen | Modal mit Live-Duplikat-Warnung; nur Name Pflicht; danach oeffnet Karteikarte. | Validiert 2026-07-08 | +| WF-P6 Kontakte | Inline-Anlegen (Notion-Stil) | Spaeter | Plus in der Liste -> neue Zeile inline; leere Zeile loescht sich automatisch. | Davids Idee, dokumentiert; erstmal nicht bauen | +| WF-P6 Kontakte | Listen-Struktur | Genommen | Zwei getrennte Reiter (Kontakte = ALLE Personen inkl. Ansprechpartner mit sichtbarer Org+Rolle; Organisationen separat); nie gemischt. | Validiert 2026-07-08 | +| WF-P6 Kontakte | Anlege-Regeln + Hauptkontakt | Genommen | Privatperson ohne Kontaktart-Frage; Org auch ohne Person; genau EIN Hauptkontakt je Org, erste Person automatisch (umhaengbar); auch Privatpersonen koennen Sekundaerkontakte haben. | Validiert 2026-07-08 | +| WF-P7 Leads | Lead->Projekt-Form | Genommen | Grosses Modal mit 3 Sektionen (Vererbungs-Vorschau, Board+Spalte, Kontakt verknuepfen); auch als Bulk-Variante (Massen-Konvertierung). | Bulk-Machbarkeit mit Dev bestaetigen | +| WF-P7 Leads | CSV-Import-Wizard | Genommen (Delta) | Datei -> Spalten zuordnen -> Vorschau/Duplikat-Regel -> Import im Hintergrund. Steht nicht im Dev-Ticket. | Change-Request an Dev | +| WF-P7 Leads | Anfrage anlegen | Genommen | Modal (wie Kontakt anlegen); Inline-Anlegen (Plus -> Zeile) als gemeinsames Spaeter-Muster mit P6 dokumentiert. | Validiert 2026-07-08 | --- diff --git a/05 HiveGrid Map/HiveGrid Map.canvas b/05 HiveGrid Map/HiveGrid Map.canvas index 08bb5bd4..967b4dd3 100644 --- a/05 HiveGrid Map/HiveGrid Map.canvas +++ b/05 HiveGrid Map/HiveGrid Map.canvas @@ -1,290 +1,862 @@ { - "nodes":[ - {"id":"904c5ece127e2e4c","type":"group","x":5497,"y":3020,"width":1540,"height":1400,"label":"VERWALTUNG (WORKSPACE-EINSTELLUNGEN)"}, - {"id":"88792c50986c93db","type":"group","x":1950,"y":960,"width":2587,"height":740,"color":"2","label":"VERTRIEB — vom Anruf zum Auftrag"}, - {"id":"77c19412215a977c","type":"group","x":5037,"y":960,"width":2260,"height":740,"color":"2","label":"AUFTRAG & BAUSTELLE"}, - {"id":"41b8d85d3bb8d47d","type":"group","x":-160,"y":0,"width":1850,"height":740,"color":"6","label":"BASIS — gilt für alle Features"}, - {"id":"ca7223940f6e1d29","type":"group","x":2520,"y":2080,"width":2317,"height":520,"label":"TERMINE & FORMULARE"}, - {"id":"e97e13901e405fcd","type":"group","x":5037,"y":2080,"width":1540,"height":740,"label":"KOMMUNIKATION"}, - {"id":"8acc5d7d61317076","type":"group","x":2110,"y":3020,"width":1450,"height":740,"label":"AUTOMATIONEN"}, - {"id":"070f258760fab4e9","type":"group","x":760,"y":3020,"width":1190,"height":740,"label":"AUFGABEN & DATEIEN — stecken in jedem Feature"}, - {"id":"db7d9db3cd7939b0","type":"group","x":3997,"y":0,"width":1040,"height":740,"label":"SUCHE & DASHBOARD"}, - {"id":"c3172228336521df","type":"group","x":7197,"y":3020,"width":540,"height":1400,"label":"PLATTFORM-ADMIN — unsere interne Verwaltung"}, - {"id":"00d6b92d3845c185","type":"group","x":1160,"y":2080,"width":1190,"height":520,"label":"E-MAIL-MARKETING"}, - {"id":"7a26f88c260892eb","type":"group","x":1950,"y":0,"width":557,"height":740,"color":"3","label":"WEBSITE 🌐"}, - {"id":"2025c7621bb63c98","type":"group","x":2737,"y":0,"width":540,"height":740,"color":"4","label":"LOGIN & ZUGÄNGE"}, - {"id":"3c6e5b1ea4a27913","type":"group","x":7977,"y":3020,"width":540,"height":740,"label":"HR (MITARBEITER)"}, - {"id":"d5d3db1765287eef","type":"text","text":"# 🗺 HiveGrid Feature Map (v1)\nJede Karte = **ein Feature**. Das Ticket steht nur als Referenz dran. Übergreifende Sachen (App-Gerüst, UI-Baukasten, Feinschliff) liegen unter **Basis**.\n\n**Farben:**\n🟢 fertig/validiert · 🔴 Sonder-UI, wird von Hand designt (Tage) · 🔵 wird aus dem UI-Baukasten zusammengesteckt (Stunden) · 🟠 Mischung aus beidem · 🟣 Basis · 🟡 Feinschliff\n\n**Marker:** 🌐 öffentlich sichtbar (höchster Anspruch) · 📱 Monteur-Handy, teils offline\n\n**Unter jeder Karte:** Slot für die verknüpften Paket-Canvases (Detail-Flows aus `02 Wireframes`) — Karte anklicken öffnet den Flow.\n\n**Pfeile:** orange = Hauptkette (Anfrage → Auftrag → Geld) · grau = klare Querverbindung. Gilt etwas für **alle** Features (Automationen, Aufgaben/Dateien, Benachrichtigungen, Verbindungs-Gerüst), steht es als Text auf der Karte statt als Pfeil.\n\nAbhaklisten & Details: [[HiveGrid Map]]","x":0,"y":-460,"width":1140,"height":380}, - {"id":"3e27875daca5713d","type":"text","text":"## Login, Registrierung & Workspace\n**Ticket:** `D-P2` · **Status:** ✅ validiert / in Subframe\n**Wo:** Login-Seiten + Einstellungen\n\n**Was drin ist:** Registrierung, Login + 2FA, Passwort vergessen/ändern, Workspace-Auswahl + neuer Workspace, Profil & Sicherheit, Mitarbeiter & Rollen (Admin)\n\n**Stand:** 9 Wireframe-Pakete fertig gebaut. Konto/Workspace löschen bewusst geparkt. → `02 Wireframes/P2 Auth/`","x":2777,"y":80,"width":460,"height":360,"color":"4"}, - {"id":"d53e7ea48a9b1e6c","type":"text","text":"## UI-Baukasten (Listen, Formulare, Modals …)\n**Ticket:** `D-D0b` · **Status:** ✅ validiert\n**Wo:** überall in der App\n\n**Was drin ist:** Fertige Bausteine: Listen mit Filter, Detail-Seiten, Formular-Felder (12 Typen), Dialoge/Wizards, Settings-Seiten, Leer-/Lade-/Fehler-Zustände + Kleinteile (Buttons, Tags, Charts, Unterschriften-Feld …)\n\n**Warum wichtig:** Einmal designen, überall wiederverwenden. Layout-Standards liegen in `04 Standards`. ✅ Bereits erledigt.","x":690,"y":80,"width":460,"height":360,"color":"4"}, - {"id":"c02969250252a3ab","type":"text","text":"## Feinschliff vor Launch\n**Ticket:** `D-POLISH` · **Status:** ⬜ offen\n**Wo:** 🌐 alles öffentlich Sichtbare\n\n**Was drin ist:** Letzter Polier-Durchgang: Terminbuchungs-Seite, öffentliche Formulare, Marketing-Mails · danach Screenshots als »So muss es aussehen«-Referenz einfrieren\n\n**Warum wichtig:** Kommt ganz am Ende, direkt vor dem Launch. Braucht Terminbuchung + Dashboard fertig.","x":1190,"y":80,"width":460,"height":360,"color":"3"}, - {"id":"903e3384b0a5e623","type":"text","text":"**Detail-Flows:** 9 Wireframe-Pakete mit eigenen Canvases in `02 Wireframes/P2 Auth/` (Login, Signup, Reset, Set Password, 2FA, RBAC …) — siehe Tracker","x":2777,"y":480,"width":460,"height":220}, - {"id":"d48196ed3e229be5","type":"text","text":"**Standards:** `04 Standards/Subframe UI Standards/` — validierte Layout-Regeln","x":690,"y":480,"width":460,"height":220}, - { - "id":"a4f86f7bfc24194b", - "type":"text", - "styleAttributes":{"border":"dashed"}, - "text":"# 📏 Canvas-Regelwerk\n**Karten:** 1 Karte = 1 Feature · Farbe = Aufwand/Status (siehe Legende links) · unter der Karte hängen die Paket-Canvases (Detail-Flows).\n\n**Verbindungen:**\n- 🟠 **durchgezogen** — Hauptkette: so fließt ein Auftrag durchs System\n- 🔵 **durchgezogen** — erzeugt Anfrage/Termin (Wege in den Lead-Eingang)\n- **grau, lang gestrichelt** — speist/beeinflusst (Daten fließen rüber)\n- **grau, kurz gestrichelt** — Werkzeug-Paar (gehört fachlich zusammen)\n- 🟣 **gepunktet** — Basis/Einstieg (Design-Grundlage, nach dem Login)\n- **kein Pfeil** — gilt für ALLE Features (steht als Text auf der Karte)\n\n**Pfadführung:** nur gerade (direkt) oder Standard-Kurve — keine verwinkelten Wege. Wenn ein ganzer Bereich zu einem anderen gehört, wird Gruppe↔Gruppe (oder Gruppe↔Karte) verbunden statt vieler Einzel-Pfeile.\n\n**Label-Regel:** Zwischen verbundenen Karten bleibt mindestens Label-Breite Platz (≈ 8 px pro Zeichen + Rand), sonst wird der Text abgeschnitten.", - "x":1350, - "y":-500, - "width":820, - "height":420 - }, - {"id":"md-hivegrid-map","type":"file","file":"05 HiveGrid Map/HiveGrid Map.md","x":-520,"y":-460,"width":460,"height":300}, - {"id":"8272764aa65537b0","type":"text","text":"## Lead-Eingang (Anfragen)\n**Ticket:** `D-P7` · **Status:** ⬜ offen\n**Wo:** `/leads`\n\n**Was drin ist:** Eingangs-Liste aller Anfragen (mit Quelle, Spam-Verdacht, Duplikat-Hinweis), Anfrage-Detail, »Zu Projekt machen«, Statistiken, Quellen-Verwaltung, Spam-Schutz-Einstellungen\n\n**So funktioniert's:** Alle Anfragen (Website, Formulare, Anrufe, Buchungen) landen hier. Wer sie bearbeiten darf (Freigabe = ja), macht daraus ein Projekt und hängt den Kontakt dran.","x":1990,"y":1040,"width":460,"height":360,"color":"5"}, - {"id":"d9868dadb782f253","type":"text","text":"## Kontakte & Organisationen\n**Ticket:** `D-CRM` · **Status:** ⬜ offen\n**Wo:** `/contacts`\n\n**Was drin ist:** Kontakt-Liste, Organisations-Liste, Kontakt-Detailseite (die Vorlage für ALLE Detailseiten), eigene Felder, Tags, Duplikate zusammenführen\n\n**So funktioniert's:** Ein Kontakt ist Privatperson oder Organisation und hat einen Status (Kontakt → Kunde → Bestandskunde). Auf der Detailseite sieht man alles: Projekte, Mails, Anrufe, Aufgaben, Dateien, Notizen.","x":3077,"y":1040,"width":460,"height":360,"color":"5"}, - {"id":"e10a35560a461111","type":"text","text":"## Kanban-Board & Pipelines (Projekte)\n**Ticket:** `D-P8` + `D-KANBAN` · **Status:** ⬜ offen\n**Wo:** `/projects` + Admin\n\n**Was drin ist:** Kanban-Board mit Spalten je Status (Karten ziehen = Status wechseln), Projekt-Liste, Projekt-Detailseite, Pipeline-Einstellungen (Spalten, Rechte, Pflichtfelder), Verlust-Gründe\n\n**So funktioniert's:** Ein Projekt wandert durch Boards — »Vertrieb« und »Auftrag« sind nur zwei Boards für denselben Datensatz. Gewonnen = wechselt aufs Auftrags-Board. Wer welche Felder sieht (z. B. Umsatz), ist einstellbar.","x":4037,"y":1040,"width":460,"height":360,"color":"2"}, - {"id":"4bb807ef5e3c8dee","type":"text","text":"## Projekt-Akte (Auftrag) 📱\n**Ticket:** `D-P9` · **Status:** ⬜ offen\n**Wo:** im Projekt-Detail\n\n**Was drin ist:** Reiter am Projekt: Team-Mitglieder, Termine, **Rechnungen (neu in v1)**, Checklisten & Mängel, Aufgaben, Dateien, Abnahmen · dazu Projekt-Vorlagen und Abnahme-Formular-Vorlagen\n\n**So funktioniert's:** Alles zum Auftrag an einem Ort. Am Handy reduziert: Stammdaten, heutige Aufgaben, Abnahme-Knopf, Foto direkt hochladen.","x":5077,"y":1040,"width":460,"height":360,"color":"2"}, - {"id":"3f83fa1a16ae69df","type":"text","text":"## Plantafel (Einsatzplanung) 📱\n**Ticket:** `D-PLAN` · **Status:** ⬜ offen\n**Wo:** `/projects/plantafel`\n\n**Was drin ist:** Planungs-Raster: Zeilen = Mitarbeiter, Spalten = Zeit. Einsätze per Ziehen verschieben/verlängern, Klick auf freien Slot = neuer Einsatz\n\n**So funktioniert's:** Warnt bei Konflikten (doppelt verplant, Urlaub/krank, außerhalb Arbeitszeit) — zuweisen geht trotzdem. Monteure sehen am Handy »Meine Termine heute« mit Adresse + Navi, auch offline.","x":5897,"y":1040,"width":460,"height":360,"color":"1"}, - {"id":"d9ad572ae83b4d0a","type":"text","text":"## Abnahme (Baustellen-Protokoll) 📱\n**Ticket:** `D-ABN` · **Status:** ⬜ offen\n**Wo:** im Projekt-Detail\n\n**Was drin ist:** Abnahme-Formular (Druckprobe, Funktionsprüfung, Zählerstände, übergebene Dokumente), Mängel mit Foto festhalten, Unterschrift Kunde + Monteur direkt am Handy, Liste aller Abnahmen je Projekt\n\n**So funktioniert's:** Nach dem Speichern unveränderbar (6 Jahre Aufbewahrung), PDF geht automatisch per Mail an den Kunden. Funktioniert offline, lädt später hoch. Mängel werden automatisch Aufgaben.","x":6767,"y":1040,"width":460,"height":360,"color":"1"}, - {"id":"e21930b7073823f8","type":"text","text":"## Aufgaben\n**Ticket:** `D-P4` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/tasks` + überall als Reiter\n\n**Was drin ist:** Aufgaben-Liste (Meine / von mir erstellt / Alle), Aufgabe mit Frist, Priorität, Zuständigem (Person oder Gruppe), Beobachtern und Verknüpfung (Kontakt/Projekt/…)\n\n**So funktioniert's:** Einmal gebaut, überall eingebettet — jede Detailseite hat einen Aufgaben-Reiter. Aufgaben können auch aus Chat, Formularen oder Automationen entstehen (Herkunft sichtbar). Erinnerung vor/nach Frist.","x":800,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"98798c9044c1d4bc","type":"file","file":"02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas","x":800,"y":3500,"width":460,"height":220}, - {"id":"036e2a807223753d","type":"text","text":"## Dateien\n**Ticket:** `D-P4` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/files` + überall als Reiter\n\n**Was drin ist:** Datei-Übersicht (Tabelle oder Kacheln, Filter, Mehrfach-Aktionen inkl. ZIP), Upload per Drag&Drop (mehrere gleichzeitig, mit Fortschritt), Datei-Detail mit Vorschau\n\n**So funktioniert's:** Dateien hängen an Kontakten/Projekten/… mit Rolle (z. B. »Angebot«). iPhone-Fotos (HEIC) werden automatisch zu JPG. Versionen kommen in v2.","x":1450,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"a1328943a7cef3b2","type":"file","file":"02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas","x":1450,"y":3500,"width":460,"height":220}, - {"id":"5c72e7b04059503a","type":"text","text":"## Integrationen (Apps verbinden)\n**Ticket:** `D-P5` · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/admin/integrations`\n\n**Was drin ist:** App-Katalog (nach Kategorie, mit Status-Ampel), Verbindung einrichten per Schritt-für-Schritt-Assistent, Verbindungs-Zustand + Sync-Verlauf in Klartext\n\n**So funktioniert's:** Das gemeinsame Gerüst für alle Anbindungen — E-Mail, Telefonie, Kalender, Signatur nutzen alle dieselben Verbindungs-Karten.","x":5537,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"b334f15bdd19d9ad","type":"text","text":"## Erste Schritte & Demo-Daten\n**Ticket:** `D-P20` (Teil) · **Status:** ⬜ offen\n**Wo:** `/onboarding` + Admin\n\n**Was drin ist:** Erste-Schritte-Checkliste (mit Direkt-Links, abhakbar, ausblendbar), Beispieldaten-Knopf (anlegen, zählen, wieder löschen, »Demo ausblenden«-Filter), Hell/Dunkel-Umschalter\n\n**So funktioniert's:** Kein Einrichtungs-Assistent — beim Registrieren wird alles SHK-typisch vorbefüllt, die Checkliste führt danach durch.","x":5537,"y":3760,"width":460,"height":360,"color":"5"}, - {"id":"0f6acf7087283c0c","type":"text","text":"## Aktivitäts-Protokoll (Audit-Log)\n**Ticket:** `D-P3` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/admin/audit`\n\n**Was drin ist:** Wer hat wann was geändert — als deutscher Klartext-Satz, mit Filter und Vorher/Nachher-Vergleich, Export mit Zweck-Angabe\n\n**So funktioniert's:** Der gleiche Verlauf ist auch an jedem Datensatz einblendbar (»Verlauf dieses Objekts«). Unterscheidet Mensch / Automation / Agent / Admin.","x":6037,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"3864f1b74d665e1a","type":"file","file":"02 Wireframes/P3 Querschnitt/WF-P3 Audit Log/WF-P3 Audit Log.canvas","x":6037,"y":3500,"width":460,"height":220}, - {"id":"6b3c0929759a607b","type":"text","text":"## Abo & Rechnungen (für HiveGrid)\n**Ticket:** `D-P20` (Teil) · **Status:** ⚠️ Ticket braucht Recut\n**Wo:** `/admin/subscription`\n\n**Was drin ist:** Abo-Übersicht (Plan, Plätze, gebuchte Module, Test-Countdown), Verbrauchs-Balken (Automations-Läufe, Speicher), Rechnungen + Zahlungsstatus\n\n**Achtung:** Das Ticket wird gerade umgeschnitten (neuer Abrechnungs-Unterbau) — erst planen, wenn der Brief neu steht. Kein Selbst-Upgrade in v1.","x":6537,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"6533d410b309a48f","type":"text","text":"## Datenschutz (Export & Löschung)\n**Ticket:** `D-P21` (Teil) · **Status:** ⬜ offen\n**Wo:** `/admin/privacy` + Einstellungen\n\n**Was drin ist:** Daten-Export als ZIP (für einen Nutzer oder den ganzen Workspace), Workspace-Löschung (mehrstufig, 30 Tage Schonfrist, Passwort + 2FA), Konto-Löschung, Liste der Unterauftragsverarbeiter, AVV-Vertrag\n\n**So funktioniert's:** Letzter Baustein vor dem Launch. DSGVO-Auskunftsanfragen laufen in v1 als manuelle Anleitung, ohne eigenen Assistenten.","x":6037,"y":3760,"width":460,"height":360,"color":"5"}, - {"id":"db76161d24fb0c1d","type":"text","text":"## Feedback & Hilfe\n**Ticket:** `D-P21` (Teil) · **Status:** ⬜ offen\n**Wo:** überall + `/help`\n\n**Was drin ist:** Schwebender Feedback-Knopf (Fehler melden / Idee / Frage, optional mit Screenshot), kleine FAQ-Seite\n\n**So funktioniert's:** Meldungen landen direkt in unserer Support-Inbox im Plattform-Admin.","x":6537,"y":3760,"width":460,"height":360,"color":"5"}, - {"id":"c8d8914e45e1497e","type":"text","text":"## Plattform-Admin\n**Ticket:** `D-ADMIN` · **Status:** ⬜ offen\n**Wo:** admin.hivegrid.de\n\n**Was drin ist:** Eigener Login (2FA Pflicht), Übersichts-Dashboard (Kunden, Nutzer, Umsatz, System-Zustand), Kunden-Verwaltung (Module freischalten = Abo-Baukasten, Test verlängern, »als Kunde einloggen« mit Begründung), Nutzer-Hilfen (2FA-Reset), Feature-Schalter, Warteschlangen-Monitor, Support-Inbox, Protokoll\n\n**So funktioniert's:** Komplett eigene Welt für uns als Betreiber — Kunden sehen davon nichts. Muss funktionieren, nicht hübsch sein.","x":7237,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"abf5f779c1463715","type":"text","text":"## Hinweis\nDieses eine Ticket enthält viele kleine Features (Kunden, Schalter, Support …).\n\nBeim atomaren Durchgehen behandeln wir es als eigenen Bereich und teilen es bei Bedarf in Unter-Pakete auf. Priorität liegt aber hinter der Vertriebs-/Auftrags-Kette.","x":7237,"y":3760,"width":460,"height":360,"color":"5"}, - {"id":"03e8e03ef11606a0","type":"text","text":"## HR-Bereich 📱\n**Ticket:** `D-HR` · **Status:** ⬜ offen\n**Wo:** `/hr` + HR-Admin\n\n**Was drin ist:** Startseite (Ankündigungen, offene Anträge, wer ist heute da), Urlaub & Krankmeldung (mit Genehmigung), Lohnabrechnungen, Anträge (Spesen, Hardware …), Passwort-Safe, Umfragen, Mitarbeiter-Verzeichnis, Standorte, eigene Dokumente\n\n**So funktioniert's:** Mitarbeiter-Sicht und HR-Verwaltung sind strikt getrennt; sensible Daten verschlüsselt, jedes Aufdecken protokolliert. Urlaub/krank fließt direkt in die Plantafel-Konflikte.","x":8017,"y":3100,"width":460,"height":360,"color":"5"}, - {"id":"77ebfde5a3a05b8a","type":"text","text":"## Online-Terminbuchung 🌐\n**Ticket:** `D-BOOK` + `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** 🌐 Buchungslink + `/bookings`\n\n**Was drin ist:** 🌐 Buchungs-Seite für Kunden (freien Termin wählen → Formular → Bestätigung mit Kalender-Datei), intern: Buchungs-Liste (verschieben, stornieren, No-Show), Buchungsseiten-Editor, Verfügbarkeits-Zeiten\n\n**So funktioniert's:** Kunde bucht selbst, der erste freie Mitarbeiter bekommt den Termin, die Anfrage landet im Lead-Eingang. Muss am schönsten aussehen — ist öffentlich.","x":3067,"y":2160,"width":460,"height":360,"color":"2"}, - {"id":"28bd46ecb4eaa069","type":"text","text":"## Kalender\n**Ticket:** `D-BOOK` + `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** `/calendar` + Einstellungen\n\n**Was drin ist:** Monats-/Wochen-Ansicht mit allen Terminen (Google-Kalender + Buchungen + Plantafel, je mit Herkunfts-Marker), Google-Kalender verbinden, Konflikt-Übersicht\n\n**So funktioniert's:** Läuft in beide Richtungen mit Google (Outlook kommt in v2). Fremde private Termine erscheinen nur als »belegt«.","x":3837,"y":2160,"width":460,"height":360,"color":"2"}, - {"id":"b789fc765f833f45","type":"text","text":"## Digital unterschreiben (E-Signatur)\n**Ticket:** `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** im Projekt-Detail\n\n**Was drin ist:** Angebot als PDF hochladen → Unterzeichner festlegen → Kunde unterschreibt per Link (mit SMS/Mail-Code) oder direkt auf dem Gerät → Status je Unterzeichner, Erinnerung, Widerruf\n\n**So funktioniert's:** Hängt direkt am Projekt (»Angebot zur Signatur senden«). Eigene Lösung, kein Pflicht-Drittanbieter.","x":4337,"y":2160,"width":460,"height":360,"color":"5"}, - {"id":"8f3127f03a5bab96","type":"text","text":"## Automations-Baukasten (Flow-Editor)\n**Ticket:** `D-FLOW` · **Status:** ⬜ offen\n**Wo:** `/automations/:id/edit`\n\n**Was drin ist:** Zeichenfläche mit Bausteinen: Auslöser (neue Anfrage, Formular abgeschickt, Zeitplan …) und Aktionen (Aufgabe anlegen, Mail senden, Wenn-Dann, Warten …) per Ziehen verbinden\n\n**So funktioniert's:** Alles in verständlichem Deutsch beschriftet. Vor dem Aktivieren zeigt eine Probe-Vorschau »trifft X Datensätze« — erst bestätigen, dann läuft's. Warnt vor Endlos-Schleifen. **Aufwendigste UI der ganzen App.**","x":2150,"y":3100,"width":460,"height":360,"color":"1"}, - {"id":"6b8c7d3bc3ee7449","type":"text","text":"## Formulare (Baukasten) 🌐\n**Ticket:** `D-FORM` + `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** `/forms` + öffentlicher Link\n\n**Was drin ist:** Formular-Baukasten (Felder per Ziehen anordnen, Wenn-Dann-Logik »zeige Feld X wenn …«, Live-Vorschau), 🌐 öffentliches Formular zum Teilen (Link, QR-Code, Einbetten), Antworten-Übersicht\n\n**So funktioniert's:** Was nach dem Absenden passiert, ist einstellbar: Anfrage/Aufgabe anlegen, Mail senden, Automation starten. Dieselben Formulare stecken auch in HR-Anträgen und der Terminbuchung.","x":2560,"y":2160,"width":460,"height":360,"color":"1"}, - {"id":"ab16fe58ff28c0ac","type":"text","text":"## Kampagnen & Empfängerlisten\n**Ticket:** `D-KAMP` · **Status:** ⬜ offen\n**Wo:** `/email-marketing`\n\n**Was drin ist:** Kampagne erstellen in 6 Schritten (Absender → Inhalt → Empfänger → Test-Mail → Zeitpunkt → Check) · Empfängerlisten (Segmente) mit Filtern bauen\n\n**So funktioniert's:** Vor dem Versand prüft eine Checkliste alles Rechtliche (Domain bestätigt? Abmelde-Link? Impressum?) — bei Rot wird nicht gesendet.","x":1200,"y":2160,"width":460,"height":360,"color":"2"}, - {"id":"4cce52e2e3bd8823","type":"text","text":"## Versand-Technik & Statistiken 🌐\n**Ticket:** `D-P14` · **Status:** ⬜ offen\n**Wo:** `/email-marketing` + Einstellungen\n\n**Was drin ist:** Eigene Absender-Domain einrichten (mit Copy-Paste-Anleitung), Kampagnen-Übersicht + Statistiken (zugestellt/geöffnet/geklickt), gesperrte Empfänger, Vorlagen, 🌐 Abmelde-Seite\n\n**So funktioniert's:** Mails an Kunden tauchen automatisch am Kontakt auf (BCC-Trick, kein Postfach-Anschluss nötig — der kommt in v2).","x":1850,"y":2160,"width":460,"height":360,"color":"2"}, - {"id":"401d8270854bebac","type":"text","text":"## Team-Chat 📱\n**Ticket:** `D-CHAT` · **Status:** ⬜ offen\n**Wo:** `/chat`\n\n**Was drin ist:** Channel-Liste, Chat-Verlauf (Antwort-Threads, Emoji-Reaktionen, gelesen-von, Anhänge), Erwähnungen mit @, angepinnte Nachrichten, Suche, Direktnachrichten\n\n**So funktioniert's:** Jedes Projekt kann seinen eigenen Channel haben (Team wird automatisch synchron gehalten). Monteure: vereinfachte Handy-Ansicht mit Foto-Direktupload. Admin kann DMs nur mit Begründung einsehen.","x":5077,"y":2160,"width":460,"height":360,"color":"2"}, - {"id":"29ca06733a9b243b","type":"text","text":"## Telefonie (Anrufe)\n**Ticket:** `D-P15` · **Status:** ⬜ offen\n**Wo:** `/calls` + Einstellungen\n\n**Was drin ist:** AirCall verbinden (Telefon-Nutzer zuordnen), Anruf-Liste + Detail (Notiz, Aufnahme), Anruf-Knopf direkt an Kontakt/Anfrage/Projekt\n\n**So funktioniert's:** Anrufe werden automatisch dem richtigen Kontakt zugeordnet. Unbekannte Nummer ruft an → wird automatisch eine Anfrage im Lead-Eingang.","x":5577,"y":2160,"width":460,"height":360,"color":"5"}, - {"id":"50945ed6e43505ce","type":"text","text":"## Benachrichtigungen\n**Ticket:** `D-P3` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** Glocke oben + Einstellungen\n\n**Was drin ist:** Glocke mit Ungelesen-Zähler + aufklappbare Liste (Klick springt zur Sache), eigene Seite mit allen Meldungen, Einstellungen: pro Ereignis-Typ wählen ob In-App und/oder E-Mail\n\n**So funktioniert's:** Wird von allen Features gespeist (neue Anfrage, Aufgabe fällig, Antrag genehmigt …). Master-Schalter »alle E-Mails aus«.","x":6077,"y":2160,"width":460,"height":360,"color":"5"}, - {"id":"43a26561f03f72da","type":"file","file":"02 Wireframes/P3 Querschnitt/WF-P3 Benachrichtigungen/WF-P3 Benachrichtigungen.canvas","x":6077,"y":2560,"width":460,"height":220}, - {"id":"b3cad562971d30a5","type":"text","text":"## App-Gerüst (Sidebar, Topbar & Design)\n**Ticket:** `D-D0a` · **Status:** ✅ gebaut (David, in Subframe)\n**Wo:** überall in der App\n\n**Was drin ist:** Sidebar (Module ein-/ausblendbar je Abo, Handy-Variante 📱), Topbar (Workspace-Wechsler, Suche, Glocke, Profil-Menü), Breadcrumb, Warn-Banner (z. B. »Zahlung offen«), Erfolgs-/Fehlermeldungen\n\n**Stand:** Bereits gebaut und validiert. Der Rahmen, in dem jedes Feature steckt — inkl. Farben, Schriften, Hell/Dunkel.","x":-100,"y":80,"width":460,"height":360,"color":"4"}, - {"id":"ce5632682989a6ca","type":"text","text":"## Website (Landing & Demo-Anfrage)\n**Ticket:** `D-WEB` · **Status:** ⬜ offen\n**Wo:** 🌐 hivegrid.de\n\n**Was drin ist:** Startseite, Features-Seite, Preise-Teaser, Demo-Anfrage-Formular\n\n**Warum wichtig:** Der erste Eindruck nach außen. Farben/Schriften sind dieselben wie in der App. Demo-Anfragen landen im Lead-Eingang.","x":2007,"y":80,"width":460,"height":360,"color":"2"}, - {"id":"e6d8c36a0f89d954","type":"text","text":"## Automationen: Übersicht & Verläufe\n**Ticket:** `D-P12` · **Status:** ⬜ offen\n**Wo:** `/automations`\n\n**Was drin ist:** Liste aller Automationen (aktiv/pausiert/Entwurf), Lauf-Protokolle Schritt für Schritt in Klartext, Vorlagen-Katalog (SHK-Vorlagen + eigene)\n\n**So funktioniert's:** Jeder Lauf ist nachvollziehbar; 24 h lang rückgängig machbar (Countdown-Knopf), fehlgeschlagene Schritte neu anstoßen.","x":3067,"y":3100,"width":460,"height":360,"color":"2"}, - {"id":"89c0813f7e139a88","type":"text","text":"## Dashboard (Startseite)\n**Ticket:** `D-DASH` (Teil) · **Status:** ⬜ offen\n**Wo:** `/dashboard`\n\n**Was drin ist:** 3 feste Ansichten je Rolle: Chef (Umsatz, Projekte, Auslastung) · Büro (Projekte, Aufgaben, Anrufe) · Monteur 📱 (meine Termine, Projekte, Aufgaben)\n\n**So funktioniert's:** Kacheln mit Zahlen, Listen und Trend-Charts, live aktualisiert. Kein freies Umbauen in v1 — nur Filter/Zeitraum einstellbar.","x":4037,"y":80,"width":460,"height":360,"color":"2"}, - {"id":"4a4e5be847a54e5f","type":"text","text":"## Suche (Cmd+K)\n**Ticket:** `D-DASH` (Teil) · **Status:** ⬜ offen\n**Wo:** überall + `/search`\n\n**Was drin ist:** Such-Fenster per Tastenkürzel: tippen, Treffer nach Typ gruppiert, mit Pfeiltasten navigieren · dazu große Such-Seite mit Filtern\n\n**So funktioniert's:** Findet Kontakte, Projekte, Dateien usw. — zeigt nur, was man sehen darf.","x":4537,"y":80,"width":460,"height":360,"color":"1"}, - {"id":"a-integrationen-pkg","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas","x":5537,"y":3500,"width":460,"height":220} - ], - "edges":[ - { - "id":"4ab78034e8253353", - "styleAttributes":{"path":"dotted","pathfindingMethod":"direct"}, - "fromNode":"b3cad562971d30a5", - "fromSide":"right", - "toNode":"d53e7ea48a9b1e6c", - "toSide":"left", - "color":"6", - "label":"Design-Grundlage" - }, - { - "id":"493a2823934c45bb", - "styleAttributes":{"path":"dotted","pathfindingMethod":"direct"}, - "fromNode":"3e27875daca5713d", - "fromSide":"right", - "toNode":"89c0813f7e139a88", - "toSide":"left", - "color":"6", - "label":"nach dem Login" - }, - { - "id":"ec751d558a1aef74", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"8272764aa65537b0", - "fromSide":"right", - "toNode":"d9868dadb782f253", - "toSide":"left", - "color":"2", - "label":"Kontakt anlegen/verknüpfen" - }, - { - "id":"154e632b2e5a645b", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"d9868dadb782f253", - "fromSide":"right", - "toNode":"e10a35560a461111", - "toSide":"left", - "color":"2", - "label":"Kontakt hängt am Projekt" - }, - { - "id":"0c0d0ba4b21da4ee", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"e10a35560a461111", - "fromSide":"right", - "toNode":"4bb807ef5e3c8dee", - "toSide":"left", - "color":"2", - "label":"gewonnen → Auftrags-Board" - }, - { - "id":"b43edef178d41dd6", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"4bb807ef5e3c8dee", - "fromSide":"right", - "toNode":"3f83fa1a16ae69df", - "toSide":"left", - "color":"2", - "label":"Termine einplanen" - }, - { - "id":"c45adb9c0c551e38", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"3f83fa1a16ae69df", - "fromSide":"right", - "toNode":"d9ad572ae83b4d0a", - "toSide":"left", - "color":"2", - "label":"Ausführung → Abnahme" - }, - { - "id":"47be96e20dcfa86a", - "styleAttributes":{ - "pathfindingMethod":null - }, - "fromFloating":false, - "fromNode":"d9ad572ae83b4d0a", - "fromSide":"bottom", - "toNode":"4bb807ef5e3c8dee", - "toSide":"bottom", - "color":"2", - "label":"Mängel → Aufgaben · dann Rechnung" - }, - { - "id":"2ec97abebcf1dcce", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"ce5632682989a6ca", - "fromSide":"bottom", - "toNode":"8272764aa65537b0", - "toSide":"top", - "color":"5", - "label":"Demo-Anfrage" - }, - { - "id":"4b89b1105393e48f", - "styleAttributes":{"pathfindingMethod":"direct"}, - "toFloating":false, - "fromNode":"6b8c7d3bc3ee7449", - "fromSide":"top", - "toNode":"8272764aa65537b0", - "toSide":"bottom", - "color":"5", - "label":"Formular → Anfrage" - }, - { - "id":"bc139947ce483198", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromNode":"77ebfde5a3a05b8a", - "fromSide":"top", - "toNode":"8272764aa65537b0", - "toSide":"bottom", - "color":"5", - "label":"Buchung → Anfrage/Termin" - }, - { - "id":"57a256b64d1a2d76", - "styleAttributes":{"pathfindingMethod":"direct"}, - "fromFloating":false, - "fromNode":"29ca06733a9b243b", - "fromSide":"top", - "toNode":"8272764aa65537b0", - "toSide":"bottom", - "color":"5", - "label":"Anruf von unbekannt → Anfrage" - }, - { - "id":"78fca84da3e723b6", - "styleAttributes":{"path":"long-dashed","pathfindingMethod":"direct"}, - "fromNode":"00d6b92d3845c185", - "fromSide":"top", - "toNode":"d9868dadb782f253", - "toSide":"bottom", - "label":"E-Mails am Kontakt sichtbar (ganzer Bereich)" - }, - { - "id":"8792d0c809babff2", - "styleAttributes":{ - "path":"long-dashed", - "pathfindingMethod":null - }, - "fromFloating":false, - "fromNode":"03e8e03ef11606a0", - "fromSide":"top", - "toNode":"3f83fa1a16ae69df", - "toSide":"bottom", - "label":"Urlaub/krank → Konflikt-Warnung" - }, - { - "id":"ce4441bfdc6a11cc", - "styleAttributes":{"path":"long-dashed","pathfindingMethod":"direct"}, - "fromNode":"28bd46ecb4eaa069", - "fromSide":"top", - "toNode":"3f83fa1a16ae69df", - "toSide":"bottom", - "label":"Kalender-Abgleich" - }, - { - "id":"77081523e546eebe", - "styleAttributes":{"path":"long-dashed","pathfindingMethod":"direct"}, - "fromFloating":false, - "fromNode":"b789fc765f833f45", - "fromSide":"top", - "toNode":"4bb807ef5e3c8dee", - "toSide":"bottom", - "label":"hängt an der Projekt-Akte" - }, - { - "id":"e6c0f9dda77f8d85", - "styleAttributes":{"path":"long-dashed","pathfindingMethod":"direct"}, - "fromNode":"401d8270854bebac", - "fromSide":"top", - "toNode":"4bb807ef5e3c8dee", - "toSide":"bottom", - "label":"Projekt-Channel im Projekt" - }, - { - "id":"65bd180bf263096e", - "styleAttributes":{"path":"long-dashed","pathfindingMethod":"direct"}, - "fromNode":"e10a35560a461111", - "fromSide":"top", - "toNode":"89c0813f7e139a88", - "toSide":"bottom", - "label":"Zahlen fürs Dashboard" - }, - { - "id":"dc15b80a5a4410c9", - "styleAttributes":{"path":"long-dashed","pathfindingMethod":"direct"}, - "fromFloating":false, - "fromNode":"db76161d24fb0c1d", - "fromSide":"right", - "toNode":"c8d8914e45e1497e", - "toSide":"left", - "label":"Feedback → Support-Inbox" - }, - { - "id":"0bb07aa23fe6a9f2", - "styleAttributes":{"path":"short-dashed","pathfindingMethod":"direct"}, - "fromNode":"28bd46ecb4eaa069", - "fromSide":"left", - "toNode":"77ebfde5a3a05b8a", - "toSide":"right", - "label":"freie Zeiten" - }, - { - "id":"cc8ccd69ae4f9435", - "styleAttributes":{"path":"short-dashed","pathfindingMethod":"direct"}, - "fromNode":"8f3127f03a5bab96", - "fromSide":"right", - "toNode":"e6d8c36a0f89d954", - "toSide":"left", - "label":"Baukasten ↔ Übersicht" - } - ], - "metadata":{ - "version":"1.0-1.0", - "frontmatter":{} - } + "nodes": [ + { + "id": "904c5ece127e2e4c", + "type": "group", + "x": 5497, + "y": 3020, + "width": 1540, + "height": 1400, + "label": "VERWALTUNG (WORKSPACE-EINSTELLUNGEN)" + }, + { + "id": "88792c50986c93db", + "type": "group", + "x": 1950, + "y": 960, + "width": 2587, + "height": 740, + "color": "2", + "label": "VERTRIEB — vom Anruf zum Auftrag" + }, + { + "id": "77c19412215a977c", + "type": "group", + "x": 5037, + "y": 960, + "width": 2260, + "height": 740, + "color": "2", + "label": "AUFTRAG & BAUSTELLE" + }, + { + "id": "41b8d85d3bb8d47d", + "type": "group", + "x": -160, + "y": 0, + "width": 1850, + "height": 740, + "color": "6", + "label": "BASIS — gilt für alle Features" + }, + { + "id": "ca7223940f6e1d29", + "type": "group", + "x": 2520, + "y": 2080, + "width": 2317, + "height": 520, + "label": "TERMINE & FORMULARE" + }, + { + "id": "e97e13901e405fcd", + "type": "group", + "x": 5037, + "y": 2080, + "width": 1540, + "height": 740, + "label": "KOMMUNIKATION" + }, + { + "id": "8acc5d7d61317076", + "type": "group", + "x": 2110, + "y": 3020, + "width": 1450, + "height": 740, + "label": "AUTOMATIONEN" + }, + { + "id": "070f258760fab4e9", + "type": "group", + "x": 760, + "y": 3020, + "width": 1190, + "height": 740, + "label": "AUFGABEN & DATEIEN — stecken in jedem Feature" + }, + { + "id": "db7d9db3cd7939b0", + "type": "group", + "x": 3997, + "y": 0, + "width": 1040, + "height": 740, + "label": "SUCHE & DASHBOARD" + }, + { + "id": "c3172228336521df", + "type": "group", + "x": 7197, + "y": 3020, + "width": 540, + "height": 1400, + "label": "PLATTFORM-ADMIN — unsere interne Verwaltung" + }, + { + "id": "00d6b92d3845c185", + "type": "group", + "x": 1160, + "y": 2080, + "width": 1190, + "height": 520, + "label": "E-MAIL-MARKETING" + }, + { + "id": "7a26f88c260892eb", + "type": "group", + "x": 1950, + "y": 0, + "width": 557, + "height": 740, + "color": "3", + "label": "WEBSITE 🌐" + }, + { + "id": "2025c7621bb63c98", + "type": "group", + "x": 2737, + "y": 0, + "width": 540, + "height": 740, + "color": "4", + "label": "LOGIN & ZUGÄNGE" + }, + { + "id": "3c6e5b1ea4a27913", + "type": "group", + "x": 7977, + "y": 3020, + "width": 540, + "height": 740, + "label": "HR (MITARBEITER)" + }, + { + "id": "e21930b7073823f8", + "type": "text", + "text": "## Aufgaben\n**Ticket:** `D-P4` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/tasks` + überall als Reiter\n\n**Was drin ist:** Aufgaben-Liste (Meine / von mir erstellt / Alle), Aufgabe mit Frist, Priorität, Zuständigem (Person oder Gruppe), Beobachtern und Verknüpfung (Kontakt/Projekt/…)\n\n**So funktioniert's:** Einmal gebaut, überall eingebettet — jede Detailseite hat einen Aufgaben-Reiter. Aufgaben können auch aus Chat, Formularen oder Automationen entstehen (Herkunft sichtbar). Erinnerung vor/nach Frist.", + "x": 800, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "036e2a807223753d", + "type": "text", + "text": "## Dateien\n**Ticket:** `D-P4` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/files` + überall als Reiter\n\n**Was drin ist:** Datei-Übersicht (Tabelle oder Kacheln, Filter, Mehrfach-Aktionen inkl. ZIP), Upload per Drag&Drop (mehrere gleichzeitig, mit Fortschritt), Datei-Detail mit Vorschau\n\n**So funktioniert's:** Dateien hängen an Kontakten/Projekten/… mit Rolle (z. B. »Angebot«). iPhone-Fotos (HEIC) werden automatisch zu JPG. Versionen kommen in v2.", + "x": 1450, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "a1328943a7cef3b2", + "type": "file", + "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas", + "x": 1450, + "y": 3500, + "width": 460, + "height": 220 + }, + { + "id": "98798c9044c1d4bc", + "type": "file", + "file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas", + "x": 800, + "y": 3500, + "width": 460, + "height": 220 + }, + { + "id": "8f3127f03a5bab96", + "type": "text", + "text": "## Automations-Baukasten (Flow-Editor)\n**Ticket:** `D-FLOW` · **Status:** ⬜ offen\n**Wo:** `/automations/:id/edit`\n\n**Was drin ist:** Zeichenfläche mit Bausteinen: Auslöser (neue Anfrage, Formular abgeschickt, Zeitplan …) und Aktionen (Aufgabe anlegen, Mail senden, Wenn-Dann, Warten …) per Ziehen verbinden\n\n**So funktioniert's:** Alles in verständlichem Deutsch beschriftet. Vor dem Aktivieren zeigt eine Probe-Vorschau »trifft X Datensätze« — erst bestätigen, dann läuft's. Warnt vor Endlos-Schleifen. **Aufwendigste UI der ganzen App.**", + "x": 2150, + "y": 3100, + "width": 460, + "height": 360, + "color": "1" + }, + { + "id": "e6d8c36a0f89d954", + "type": "text", + "text": "## Automationen: Übersicht & Verläufe\n**Ticket:** `D-P12` · **Status:** ⬜ offen\n**Wo:** `/automations`\n\n**Was drin ist:** Liste aller Automationen (aktiv/pausiert/Entwurf), Lauf-Protokolle Schritt für Schritt in Klartext, Vorlagen-Katalog (SHK-Vorlagen + eigene)\n\n**So funktioniert's:** Jeder Lauf ist nachvollziehbar; 24 h lang rückgängig machbar (Countdown-Knopf), fehlgeschlagene Schritte neu anstoßen.", + "x": 3067, + "y": 3100, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "77ebfde5a3a05b8a", + "type": "text", + "text": "## Online-Terminbuchung 🌐\n**Ticket:** `D-BOOK` + `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** 🌐 Buchungslink + `/bookings`\n\n**Was drin ist:** 🌐 Buchungs-Seite für Kunden (freien Termin wählen → Formular → Bestätigung mit Kalender-Datei), intern: Buchungs-Liste (verschieben, stornieren, No-Show), Buchungsseiten-Editor, Verfügbarkeits-Zeiten\n\n**So funktioniert's:** Kunde bucht selbst, der erste freie Mitarbeiter bekommt den Termin, die Anfrage landet im Lead-Eingang. Muss am schönsten aussehen — ist öffentlich.", + "x": 3067, + "y": 2160, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "28bd46ecb4eaa069", + "type": "text", + "text": "## Kalender\n**Ticket:** `D-BOOK` + `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** `/calendar` + Einstellungen\n\n**Was drin ist:** Monats-/Wochen-Ansicht mit allen Terminen (Google-Kalender + Buchungen + Plantafel, je mit Herkunfts-Marker), Google-Kalender verbinden, Konflikt-Übersicht\n\n**So funktioniert's:** Läuft in beide Richtungen mit Google (Outlook kommt in v2). Fremde private Termine erscheinen nur als »belegt«.", + "x": 3837, + "y": 2160, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "b789fc765f833f45", + "type": "text", + "text": "## Digital unterschreiben (E-Signatur)\n**Ticket:** `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** im Projekt-Detail\n\n**Was drin ist:** Angebot als PDF hochladen → Unterzeichner festlegen → Kunde unterschreibt per Link (mit SMS/Mail-Code) oder direkt auf dem Gerät → Status je Unterzeichner, Erinnerung, Widerruf\n\n**So funktioniert's:** Hängt direkt am Projekt (»Angebot zur Signatur senden«). Eigene Lösung, kein Pflicht-Drittanbieter.", + "x": 4337, + "y": 2160, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "6b8c7d3bc3ee7449", + "type": "text", + "text": "## Formulare (Baukasten) 🌐\n**Ticket:** `D-FORM` + `D-P16` (Teil) · **Status:** ⬜ offen\n**Wo:** `/forms` + öffentlicher Link\n\n**Was drin ist:** Formular-Baukasten (Felder per Ziehen anordnen, Wenn-Dann-Logik »zeige Feld X wenn …«, Live-Vorschau), 🌐 öffentliches Formular zum Teilen (Link, QR-Code, Einbetten), Antworten-Übersicht\n\n**So funktioniert's:** Was nach dem Absenden passiert, ist einstellbar: Anfrage/Aufgabe anlegen, Mail senden, Automation starten. Dieselben Formulare stecken auch in HR-Anträgen und der Terminbuchung.", + "x": 2560, + "y": 2160, + "width": 460, + "height": 360, + "color": "1" + }, + { + "id": "ab16fe58ff28c0ac", + "type": "text", + "text": "## Kampagnen & Empfängerlisten\n**Ticket:** `D-KAMP` · **Status:** ⬜ offen\n**Wo:** `/email-marketing`\n\n**Was drin ist:** Kampagne erstellen in 6 Schritten (Absender → Inhalt → Empfänger → Test-Mail → Zeitpunkt → Check) · Empfängerlisten (Segmente) mit Filtern bauen\n\n**So funktioniert's:** Vor dem Versand prüft eine Checkliste alles Rechtliche (Domain bestätigt? Abmelde-Link? Impressum?) — bei Rot wird nicht gesendet.", + "x": 1200, + "y": 2160, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "4cce52e2e3bd8823", + "type": "text", + "text": "## Versand-Technik & Statistiken 🌐\n**Ticket:** `D-P14` · **Status:** ⬜ offen\n**Wo:** `/email-marketing` + Einstellungen\n\n**Was drin ist:** Eigene Absender-Domain einrichten (mit Copy-Paste-Anleitung), Kampagnen-Übersicht + Statistiken (zugestellt/geöffnet/geklickt), gesperrte Empfänger, Vorlagen, 🌐 Abmelde-Seite\n\n**So funktioniert's:** Mails an Kunden tauchen automatisch am Kontakt auf (BCC-Trick, kein Postfach-Anschluss nötig — der kommt in v2).", + "x": 1850, + "y": 2160, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "401d8270854bebac", + "type": "text", + "text": "## Team-Chat 📱\n**Ticket:** `D-CHAT` · **Status:** ⬜ offen\n**Wo:** `/chat`\n\n**Was drin ist:** Channel-Liste, Chat-Verlauf (Antwort-Threads, Emoji-Reaktionen, gelesen-von, Anhänge), Erwähnungen mit @, angepinnte Nachrichten, Suche, Direktnachrichten\n\n**So funktioniert's:** Jedes Projekt kann seinen eigenen Channel haben (Team wird automatisch synchron gehalten). Monteure: vereinfachte Handy-Ansicht mit Foto-Direktupload. Admin kann DMs nur mit Begründung einsehen.", + "x": 5077, + "y": 2160, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "5c72e7b04059503a", + "type": "text", + "text": "## Integrationen (Apps verbinden)\n**Ticket:** `D-P5` · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/admin/integrations`\n\n**Was drin ist:** App-Katalog (nach Kategorie, mit Status-Ampel), Verbindung einrichten per Schritt-für-Schritt-Assistent, Verbindungs-Zustand + Sync-Verlauf in Klartext\n\n**So funktioniert's:** Das gemeinsame Gerüst für alle Anbindungen — E-Mail, Telefonie, Kalender, Signatur nutzen alle dieselben Verbindungs-Karten.", + "x": 5537, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "b334f15bdd19d9ad", + "type": "text", + "text": "## Erste Schritte & Demo-Daten\n**Ticket:** `D-P20` (Teil) · **Status:** ⬜ offen\n**Wo:** `/onboarding` + Admin\n\n**Was drin ist:** Erste-Schritte-Checkliste (mit Direkt-Links, abhakbar, ausblendbar), Beispieldaten-Knopf (anlegen, zählen, wieder löschen, »Demo ausblenden«-Filter), Hell/Dunkel-Umschalter\n\n**So funktioniert's:** Kein Einrichtungs-Assistent — beim Registrieren wird alles SHK-typisch vorbefüllt, die Checkliste führt danach durch.", + "x": 5537, + "y": 3760, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "a-integrationen-pkg", + "type": "file", + "file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas", + "x": 5537, + "y": 3500, + "width": 460, + "height": 220 + }, + { + "id": "29ca06733a9b243b", + "type": "text", + "text": "## Telefonie (Anrufe)\n**Ticket:** `D-P15` · **Status:** ⬜ offen\n**Wo:** `/calls` + Einstellungen\n\n**Was drin ist:** AirCall verbinden (Telefon-Nutzer zuordnen), Anruf-Liste + Detail (Notiz, Aufnahme), Anruf-Knopf direkt an Kontakt/Anfrage/Projekt\n\n**So funktioniert's:** Anrufe werden automatisch dem richtigen Kontakt zugeordnet. Unbekannte Nummer ruft an → wird automatisch eine Anfrage im Lead-Eingang.", + "x": 5577, + "y": 2160, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "0f6acf7087283c0c", + "type": "text", + "text": "## Aktivitäts-Protokoll (Audit-Log)\n**Ticket:** `D-P3` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/admin/audit`\n\n**Was drin ist:** Wer hat wann was geändert — als deutscher Klartext-Satz, mit Filter und Vorher/Nachher-Vergleich, Export mit Zweck-Angabe\n\n**So funktioniert's:** Der gleiche Verlauf ist auch an jedem Datensatz einblendbar (»Verlauf dieses Objekts«). Unterscheidet Mensch / Automation / Agent / Admin.", + "x": 6037, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "3864f1b74d665e1a", + "type": "file", + "file": "02 Wireframes/P3 Querschnitt/WF-P3 Audit Log/WF-P3 Audit Log.canvas", + "x": 6037, + "y": 3500, + "width": 460, + "height": 220 + }, + { + "id": "6533d410b309a48f", + "type": "text", + "text": "## Datenschutz (Export & Löschung)\n**Ticket:** `D-P21` (Teil) · **Status:** ⬜ offen\n**Wo:** `/admin/privacy` + Einstellungen\n\n**Was drin ist:** Daten-Export als ZIP (für einen Nutzer oder den ganzen Workspace), Workspace-Löschung (mehrstufig, 30 Tage Schonfrist, Passwort + 2FA), Konto-Löschung, Liste der Unterauftragsverarbeiter, AVV-Vertrag\n\n**So funktioniert's:** Letzter Baustein vor dem Launch. DSGVO-Auskunftsanfragen laufen in v1 als manuelle Anleitung, ohne eigenen Assistenten.", + "x": 6037, + "y": 3760, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "50945ed6e43505ce", + "type": "text", + "text": "## Benachrichtigungen\n**Ticket:** `D-P3` (Teil) · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** Glocke oben + Einstellungen\n\n**Was drin ist:** Glocke mit Ungelesen-Zähler + aufklappbare Liste (Klick springt zur Sache), eigene Seite mit allen Meldungen, Einstellungen: pro Ereignis-Typ wählen ob In-App und/oder E-Mail\n\n**So funktioniert's:** Wird von allen Features gespeist (neue Anfrage, Aufgabe fällig, Antrag genehmigt …). Master-Schalter »alle E-Mails aus«.", + "x": 6077, + "y": 2160, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "43a26561f03f72da", + "type": "file", + "file": "02 Wireframes/P3 Querschnitt/WF-P3 Benachrichtigungen/WF-P3 Benachrichtigungen.canvas", + "x": 6077, + "y": 2560, + "width": 460, + "height": 220 + }, + { + "id": "6b3c0929759a607b", + "type": "text", + "text": "## Abo & Rechnungen (für HiveGrid)\n**Ticket:** `D-P20` (Teil) · **Status:** ⚠️ Ticket braucht Recut\n**Wo:** `/admin/subscription`\n\n**Was drin ist:** Abo-Übersicht (Plan, Plätze, gebuchte Module, Test-Countdown), Verbrauchs-Balken (Automations-Läufe, Speicher), Rechnungen + Zahlungsstatus\n\n**Achtung:** Das Ticket wird gerade umgeschnitten (neuer Abrechnungs-Unterbau) — erst planen, wenn der Brief neu steht. Kein Selbst-Upgrade in v1.", + "x": 6537, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "db76161d24fb0c1d", + "type": "text", + "text": "## Feedback & Hilfe\n**Ticket:** `D-P21` (Teil) · **Status:** ⬜ offen\n**Wo:** überall + `/help`\n\n**Was drin ist:** Schwebender Feedback-Knopf (Fehler melden / Idee / Frage, optional mit Screenshot), kleine FAQ-Seite\n\n**So funktioniert's:** Meldungen landen direkt in unserer Support-Inbox im Plattform-Admin.", + "x": 6537, + "y": 3760, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "c8d8914e45e1497e", + "type": "text", + "text": "## Plattform-Admin\n**Ticket:** `D-ADMIN` · **Status:** ⬜ offen\n**Wo:** admin.hivegrid.de\n\n**Was drin ist:** Eigener Login (2FA Pflicht), Übersichts-Dashboard (Kunden, Nutzer, Umsatz, System-Zustand), Kunden-Verwaltung (Module freischalten = Abo-Baukasten, Test verlängern, »als Kunde einloggen« mit Begründung), Nutzer-Hilfen (2FA-Reset), Feature-Schalter, Warteschlangen-Monitor, Support-Inbox, Protokoll\n\n**So funktioniert's:** Komplett eigene Welt für uns als Betreiber — Kunden sehen davon nichts. Muss funktionieren, nicht hübsch sein.", + "x": 7237, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "abf5f779c1463715", + "type": "text", + "text": "## Hinweis\nDieses eine Ticket enthält viele kleine Features (Kunden, Schalter, Support …).\n\nBeim atomaren Durchgehen behandeln wir es als eigenen Bereich und teilen es bei Bedarf in Unter-Pakete auf. Priorität liegt aber hinter der Vertriebs-/Auftrags-Kette.", + "x": 7237, + "y": 3760, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "d9868dadb782f253", + "type": "text", + "text": "## Kontakte & Organisationen\n**Ticket:** `D-CRM` · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/contacts`\n\n**Was drin ist:** Kontakt-Liste, Organisations-Liste, Kontakt-Detailseite (die Vorlage für ALLE Detailseiten), eigene Felder, Tags, Duplikate zusammenführen\n\n**So funktioniert's:** Ein Kontakt ist Privatperson oder Organisation und hat einen Status (Kontakt → Kunde → Bestandskunde). Auf der Detailseite sieht man alles: Projekte, Mails, Anrufe, Aufgaben, Dateien, Notizen.", + "x": 3077, + "y": 1040, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "e10a35560a461111", + "type": "text", + "text": "## Kanban-Board & Pipelines (Projekte)\n**Ticket:** `D-P8` + `D-KANBAN` · **Status:** ⬜ offen\n**Wo:** `/projects` + Admin\n\n**Was drin ist:** Kanban-Board mit Spalten je Status (Karten ziehen = Status wechseln), Projekt-Liste, Projekt-Detailseite, Pipeline-Einstellungen (Spalten, Rechte, Pflichtfelder), Verlust-Gründe\n\n**So funktioniert's:** Ein Projekt wandert durch Boards — »Vertrieb« und »Auftrag« sind nur zwei Boards für denselben Datensatz. Gewonnen = wechselt aufs Auftrags-Board. Wer welche Felder sieht (z. B. Umsatz), ist einstellbar.", + "x": 4037, + "y": 1040, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "4bb807ef5e3c8dee", + "type": "text", + "text": "## Projekt-Akte (Auftrag) 📱\n**Ticket:** `D-P9` · **Status:** ⬜ offen\n**Wo:** im Projekt-Detail\n\n**Was drin ist:** Reiter am Projekt: Team-Mitglieder, Termine, **Rechnungen (neu in v1)**, Checklisten & Mängel, Aufgaben, Dateien, Abnahmen · dazu Projekt-Vorlagen und Abnahme-Formular-Vorlagen\n\n**So funktioniert's:** Alles zum Auftrag an einem Ort. Am Handy reduziert: Stammdaten, heutige Aufgaben, Abnahme-Knopf, Foto direkt hochladen.", + "x": 5077, + "y": 1040, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "3f83fa1a16ae69df", + "type": "text", + "text": "## Plantafel (Einsatzplanung) 📱\n**Ticket:** `D-PLAN` · **Status:** ⬜ offen\n**Wo:** `/projects/plantafel`\n\n**Was drin ist:** Planungs-Raster: Zeilen = Mitarbeiter, Spalten = Zeit. Einsätze per Ziehen verschieben/verlängern, Klick auf freien Slot = neuer Einsatz\n\n**So funktioniert's:** Warnt bei Konflikten (doppelt verplant, Urlaub/krank, außerhalb Arbeitszeit) — zuweisen geht trotzdem. Monteure sehen am Handy »Meine Termine heute« mit Adresse + Navi, auch offline.", + "x": 5897, + "y": 1040, + "width": 460, + "height": 360, + "color": "1" + }, + { + "id": "d9ad572ae83b4d0a", + "type": "text", + "text": "## Abnahme (Baustellen-Protokoll) 📱\n**Ticket:** `D-ABN` · **Status:** ⬜ offen\n**Wo:** im Projekt-Detail\n\n**Was drin ist:** Abnahme-Formular (Druckprobe, Funktionsprüfung, Zählerstände, übergebene Dokumente), Mängel mit Foto festhalten, Unterschrift Kunde + Monteur direkt am Handy, Liste aller Abnahmen je Projekt\n\n**So funktioniert's:** Nach dem Speichern unveränderbar (6 Jahre Aufbewahrung), PDF geht automatisch per Mail an den Kunden. Funktioniert offline, lädt später hoch. Mängel werden automatisch Aufgaben.", + "x": 6767, + "y": 1040, + "width": 460, + "height": 360, + "color": "1" + }, + { + "id": "903e3384b0a5e623", + "type": "text", + "text": "**Detail-Flows:** 9 Wireframe-Pakete mit eigenen Canvases in `02 Wireframes/P2 Auth/` (Login, Signup, Reset, Set Password, 2FA, RBAC …) — siehe Tracker", + "x": 2777, + "y": 480, + "width": 460, + "height": 220 + }, + { + "id": "3e27875daca5713d", + "type": "text", + "text": "## Login, Registrierung & Workspace\n**Ticket:** `D-P2` · **Status:** ✅ validiert / in Subframe\n**Wo:** Login-Seiten + Einstellungen\n\n**Was drin ist:** Registrierung, Login + 2FA, Passwort vergessen/ändern, Workspace-Auswahl + neuer Workspace, Profil & Sicherheit, Mitarbeiter & Rollen (Admin)\n\n**Stand:** 9 Wireframe-Pakete fertig gebaut. Konto/Workspace löschen bewusst geparkt. → `02 Wireframes/P2 Auth/`", + "x": 2777, + "y": 80, + "width": 460, + "height": 360, + "color": "4" + }, + { + "id": "89c0813f7e139a88", + "type": "text", + "text": "## Dashboard (Startseite)\n**Ticket:** `D-DASH` (Teil) · **Status:** ⬜ offen\n**Wo:** `/dashboard`\n\n**Was drin ist:** 3 feste Ansichten je Rolle: Chef (Umsatz, Projekte, Auslastung) · Büro (Projekte, Aufgaben, Anrufe) · Monteur 📱 (meine Termine, Projekte, Aufgaben)\n\n**So funktioniert's:** Kacheln mit Zahlen, Listen und Trend-Charts, live aktualisiert. Kein freies Umbauen in v1 — nur Filter/Zeitraum einstellbar.", + "x": 4037, + "y": 80, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "4a4e5be847a54e5f", + "type": "text", + "text": "## Suche (Cmd+K)\n**Ticket:** `D-DASH` (Teil) · **Status:** ⬜ offen\n**Wo:** überall + `/search`\n\n**Was drin ist:** Such-Fenster per Tastenkürzel: tippen, Treffer nach Typ gruppiert, mit Pfeiltasten navigieren · dazu große Such-Seite mit Filtern\n\n**So funktioniert's:** Findet Kontakte, Projekte, Dateien usw. — zeigt nur, was man sehen darf.", + "x": 4537, + "y": 80, + "width": 460, + "height": 360, + "color": "1" + }, + { + "id": "ce5632682989a6ca", + "type": "text", + "text": "## Website (Landing & Demo-Anfrage)\n**Ticket:** `D-WEB` · **Status:** ⬜ offen\n**Wo:** 🌐 hivegrid.de\n\n**Was drin ist:** Startseite, Features-Seite, Preise-Teaser, Demo-Anfrage-Formular\n\n**Warum wichtig:** Der erste Eindruck nach außen. Farben/Schriften sind dieselben wie in der App. Demo-Anfragen landen im Lead-Eingang.", + "x": 2007, + "y": 80, + "width": 460, + "height": 360, + "color": "2" + }, + { + "id": "c02969250252a3ab", + "type": "text", + "text": "## Feinschliff vor Launch\n**Ticket:** `D-POLISH` · **Status:** ⬜ offen\n**Wo:** 🌐 alles öffentlich Sichtbare\n\n**Was drin ist:** Letzter Polier-Durchgang: Terminbuchungs-Seite, öffentliche Formulare, Marketing-Mails · danach Screenshots als »So muss es aussehen«-Referenz einfrieren\n\n**Warum wichtig:** Kommt ganz am Ende, direkt vor dem Launch. Braucht Terminbuchung + Dashboard fertig.", + "x": 1190, + "y": 80, + "width": 460, + "height": 360, + "color": "3" + }, + { + "id": "d48196ed3e229be5", + "type": "text", + "text": "**Standards:** `04 Standards/Subframe UI Standards/` — validierte Layout-Regeln", + "x": 690, + "y": 480, + "width": 460, + "height": 220 + }, + { + "id": "d53e7ea48a9b1e6c", + "type": "text", + "text": "## UI-Baukasten (Listen, Formulare, Modals …)\n**Ticket:** `D-D0b` · **Status:** ✅ validiert\n**Wo:** überall in der App\n\n**Was drin ist:** Fertige Bausteine: Listen mit Filter, Detail-Seiten, Formular-Felder (12 Typen), Dialoge/Wizards, Settings-Seiten, Leer-/Lade-/Fehler-Zustände + Kleinteile (Buttons, Tags, Charts, Unterschriften-Feld …)\n\n**Warum wichtig:** Einmal designen, überall wiederverwenden. Layout-Standards liegen in `04 Standards`. ✅ Bereits erledigt.", + "x": 690, + "y": 80, + "width": 460, + "height": 360, + "color": "4" + }, + { + "id": "b3cad562971d30a5", + "type": "text", + "text": "## App-Gerüst (Sidebar, Topbar & Design)\n**Ticket:** `D-D0a` · **Status:** ✅ gebaut (David, in Subframe)\n**Wo:** überall in der App\n\n**Was drin ist:** Sidebar (Module ein-/ausblendbar je Abo, Handy-Variante 📱), Topbar (Workspace-Wechsler, Suche, Glocke, Profil-Menü), Breadcrumb, Warn-Banner (z. B. »Zahlung offen«), Erfolgs-/Fehlermeldungen\n\n**Stand:** Bereits gebaut und validiert. Der Rahmen, in dem jedes Feature steckt — inkl. Farben, Schriften, Hell/Dunkel.", + "x": -100, + "y": 80, + "width": 460, + "height": 360, + "color": "4" + }, + { + "id": "8272764aa65537b0", + "type": "text", + "text": "## Lead-Eingang (Anfragen)\n**Ticket:** `D-P7` · **Status:** 🟡 vorgeplant (Screens validiert, Subframe offen)\n**Wo:** `/leads`\n\n**Was drin ist:** Eingangs-Liste aller Anfragen (mit Quelle, Spam-Verdacht, Duplikat-Hinweis), Anfrage-Detail, »Zu Projekt machen«, Statistiken, Quellen-Verwaltung, Spam-Schutz-Einstellungen\n\n**So funktioniert's:** Alle Anfragen (Website, Formulare, Anrufe, Buchungen) landen hier. Wer sie bearbeiten darf (Freigabe = ja), macht daraus ein Projekt und hängt den Kontakt dran.", + "x": 2007, + "y": 1040, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "03e8e03ef11606a0", + "type": "text", + "text": "## HR-Bereich 📱\n**Ticket:** `D-HR` · **Status:** ⬜ offen\n**Wo:** `/hr` + HR-Admin\n\n**Was drin ist:** Startseite (Ankündigungen, offene Anträge, wer ist heute da), Urlaub & Krankmeldung (mit Genehmigung), Lohnabrechnungen, Anträge (Spesen, Hardware …), Passwort-Safe, Umfragen, Mitarbeiter-Verzeichnis, Standorte, eigene Dokumente\n\n**So funktioniert's:** Mitarbeiter-Sicht und HR-Verwaltung sind strikt getrennt; sensible Daten verschlüsselt, jedes Aufdecken protokolliert. Urlaub/krank fließt direkt in die Plantafel-Konflikte.", + "x": 8017, + "y": 3100, + "width": 460, + "height": 360, + "color": "5" + }, + { + "id": "d5d3db1765287eef", + "type": "text", + "text": "# 🗺 HiveGrid Feature Map (v1)\nJede Karte = **ein Feature**. Das Ticket steht nur als Referenz dran. Übergreifende Sachen (App-Gerüst, UI-Baukasten, Feinschliff) liegen unter **Basis**.\n\n**Farben:**\n🟢 fertig/validiert · 🔴 Sonder-UI, wird von Hand designt (Tage) · 🔵 wird aus dem UI-Baukasten zusammengesteckt (Stunden) · 🟠 Mischung aus beidem · 🟣 Basis · 🟡 Feinschliff\n\n**Marker:** 🌐 öffentlich sichtbar (höchster Anspruch) · 📱 Monteur-Handy, teils offline\n\n**Unter jeder Karte:** Slot für die verknüpften Paket-Canvases (Detail-Flows aus `02 Wireframes`) — Karte anklicken öffnet den Flow.\n\n**Pfeile:** orange = Hauptkette (Anfrage → Auftrag → Geld) · grau = klare Querverbindung. Gilt etwas für **alle** Features (Automationen, Aufgaben/Dateien, Benachrichtigungen, Verbindungs-Gerüst), steht es als Text auf der Karte statt als Pfeil.\n\nAbhaklisten & Details: [[HiveGrid Map]]", + "x": -163, + "y": -600, + "width": 1140, + "height": 380 + }, + { + "id": "a4f86f7bfc24194b", + "type": "text", + "styleAttributes": { + "border": "dashed" + }, + "text": "# 📏 Canvas-Regelwerk\n**Karten:** 1 Karte = 1 Feature · Farbe = Aufwand/Status (siehe Legende links) · unter der Karte hängen die Paket-Canvases (Detail-Flows).\n\n**Verbindungen:**\n- 🟠 **durchgezogen** — Hauptkette: so fließt ein Auftrag durchs System\n- 🔵 **durchgezogen** — erzeugt Anfrage/Termin (Wege in den Lead-Eingang)\n- **grau, lang gestrichelt** — speist/beeinflusst (Daten fließen rüber)\n- **grau, kurz gestrichelt** — Werkzeug-Paar (gehört fachlich zusammen)\n- 🟣 **gepunktet** — Basis/Einstieg (Design-Grundlage, nach dem Login)\n- **kein Pfeil** — gilt für ALLE Features (steht als Text auf der Karte)\n\n**Pfadführung:** nur gerade (direkt) oder Standard-Kurve — keine verwinkelten Wege. Wenn ein ganzer Bereich zu einem anderen gehört, wird Gruppe↔Gruppe (oder Gruppe↔Karte) verbunden statt vieler Einzel-Pfeile.\n\n**Label-Regel:** Zwischen verbundenen Karten bleibt mindestens Label-Breite Platz (≈ 8 px pro Zeichen + Rand), sonst wird der Text abgeschnitten.", + "x": 1187, + "y": -640, + "width": 820, + "height": 420 + }, + { + "id": "md-hivegrid-map", + "type": "file", + "file": "05 HiveGrid Map/HiveGrid Map.md", + "x": -683, + "y": -600, + "width": 460, + "height": 300 + }, + { + "id": "a-kontakte-pkg", + "type": "file", + "file": "02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas", + "x": 3077, + "y": 1440, + "width": 460, + "height": 220 + }, + { + "id": "a-leads-pkg", + "type": "file", + "file": "02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas", + "x": 2007, + "y": 1440, + "width": 460, + "height": 220 + } + ], + "edges": [ + { + "id": "4ab78034e8253353", + "styleAttributes": { + "path": "dotted", + "pathfindingMethod": "direct" + }, + "fromNode": "b3cad562971d30a5", + "fromSide": "right", + "toNode": "d53e7ea48a9b1e6c", + "toSide": "left", + "color": "6", + "label": "Design-Grundlage" + }, + { + "id": "493a2823934c45bb", + "styleAttributes": { + "path": "dotted", + "pathfindingMethod": "direct" + }, + "fromNode": "3e27875daca5713d", + "fromSide": "right", + "toNode": "89c0813f7e139a88", + "toSide": "left", + "color": "6", + "label": "nach dem Login" + }, + { + "id": "ec751d558a1aef74", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "8272764aa65537b0", + "fromSide": "right", + "toNode": "d9868dadb782f253", + "toSide": "left", + "color": "2", + "label": "Kontakt anlegen/verknüpfen" + }, + { + "id": "154e632b2e5a645b", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "d9868dadb782f253", + "fromSide": "right", + "toNode": "e10a35560a461111", + "toSide": "left", + "color": "2", + "label": "Kontakt hängt am Projekt" + }, + { + "id": "0c0d0ba4b21da4ee", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "e10a35560a461111", + "fromSide": "right", + "toNode": "4bb807ef5e3c8dee", + "toSide": "left", + "color": "2", + "label": "gewonnen → Auftrags-Board" + }, + { + "id": "b43edef178d41dd6", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "4bb807ef5e3c8dee", + "fromSide": "right", + "toNode": "3f83fa1a16ae69df", + "toSide": "left", + "color": "2", + "label": "Termine einplanen" + }, + { + "id": "c45adb9c0c551e38", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "3f83fa1a16ae69df", + "fromSide": "right", + "toNode": "d9ad572ae83b4d0a", + "toSide": "left", + "color": "2", + "label": "Ausführung → Abnahme" + }, + { + "id": "47be96e20dcfa86a", + "styleAttributes": { + "pathfindingMethod": null + }, + "fromFloating": false, + "fromNode": "d9ad572ae83b4d0a", + "fromSide": "bottom", + "toNode": "4bb807ef5e3c8dee", + "toSide": "bottom", + "color": "2", + "label": "Mängel → Aufgaben · dann Rechnung" + }, + { + "id": "2ec97abebcf1dcce", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "ce5632682989a6ca", + "fromSide": "bottom", + "toNode": "8272764aa65537b0", + "toSide": "top", + "color": "5", + "label": "Demo-Anfrage" + }, + { + "id": "4b89b1105393e48f", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "toFloating": false, + "fromNode": "6b8c7d3bc3ee7449", + "fromSide": "top", + "toNode": "8272764aa65537b0", + "toSide": "bottom", + "color": "5", + "label": "Formular → Anfrage" + }, + { + "id": "bc139947ce483198", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromNode": "77ebfde5a3a05b8a", + "fromSide": "top", + "toNode": "8272764aa65537b0", + "toSide": "bottom", + "color": "5", + "label": "Buchung → Anfrage/Termin" + }, + { + "id": "57a256b64d1a2d76", + "styleAttributes": { + "pathfindingMethod": "direct" + }, + "fromFloating": false, + "fromNode": "29ca06733a9b243b", + "fromSide": "top", + "toNode": "8272764aa65537b0", + "toSide": "bottom", + "color": "5", + "label": "Anruf von unbekannt → Anfrage" + }, + { + "id": "78fca84da3e723b6", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "00d6b92d3845c185", + "fromSide": "top", + "toNode": "d9868dadb782f253", + "toSide": "bottom", + "label": "E-Mails am Kontakt sichtbar (ganzer Bereich)" + }, + { + "id": "8792d0c809babff2", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": null + }, + "fromFloating": false, + "toFloating": false, + "fromNode": "03e8e03ef11606a0", + "fromSide": "top", + "toNode": "3f83fa1a16ae69df", + "toSide": "bottom", + "label": "Urlaub/krank → Konflikt-Warnung" + }, + { + "id": "ce4441bfdc6a11cc", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "28bd46ecb4eaa069", + "fromSide": "top", + "toNode": "3f83fa1a16ae69df", + "toSide": "bottom", + "label": "Kalender-Abgleich" + }, + { + "id": "77081523e546eebe", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": "direct" + }, + "fromFloating": false, + "fromNode": "b789fc765f833f45", + "fromSide": "top", + "toNode": "4bb807ef5e3c8dee", + "toSide": "bottom", + "label": "hängt an der Projekt-Akte" + }, + { + "id": "e6c0f9dda77f8d85", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "401d8270854bebac", + "fromSide": "top", + "toNode": "4bb807ef5e3c8dee", + "toSide": "bottom", + "label": "Projekt-Channel im Projekt" + }, + { + "id": "65bd180bf263096e", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "e10a35560a461111", + "fromSide": "top", + "toNode": "89c0813f7e139a88", + "toSide": "bottom", + "label": "Zahlen fürs Dashboard" + }, + { + "id": "dc15b80a5a4410c9", + "styleAttributes": { + "path": "long-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "db76161d24fb0c1d", + "fromSide": "right", + "toNode": "c8d8914e45e1497e", + "toSide": "left", + "label": "Feedback → Support-Inbox" + }, + { + "id": "0bb07aa23fe6a9f2", + "styleAttributes": { + "path": "short-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "28bd46ecb4eaa069", + "fromSide": "left", + "toNode": "77ebfde5a3a05b8a", + "toSide": "right", + "label": "freie Zeiten" + }, + { + "id": "cc8ccd69ae4f9435", + "styleAttributes": { + "path": "short-dashed", + "pathfindingMethod": "direct" + }, + "fromNode": "8f3127f03a5bab96", + "fromSide": "right", + "toNode": "e6d8c36a0f89d954", + "toSide": "left", + "label": "Baukasten ↔ Übersicht" + } + ], + "metadata": { + "version": "1.0-1.0", + "frontmatter": {} + } } \ No newline at end of file diff --git a/05 HiveGrid Map/HiveGrid Map.md b/05 HiveGrid Map/HiveGrid Map.md index f622d0da..4454c7a0 100644 --- a/05 HiveGrid Map/HiveGrid Map.md +++ b/05 HiveGrid Map/HiveGrid Map.md @@ -43,8 +43,8 @@ Gesamtkarte aller HiveGrid-v1-Features. Eine Karte = **ein Feature** (so benannt | Login, Registrierung & Workspace | Login & Zugänge | D-P2 | 🔵 | ✅ validiert | | Dashboard (Startseite) | Suche & Dashboard | D-DASH (Teil) | 🔵 | ⬜ offen | | Suche (Cmd+K) | Suche & Dashboard | D-DASH (Teil) | 🔴 klein | ⬜ offen | -| Lead-Eingang (Anfragen) | Vertrieb | D-P7 | 🔵 | ⬜ offen | -| Kontakte & Organisationen | Vertrieb | D-CRM | 🔵 | ⬜ offen | +| Lead-Eingang (Anfragen) | Vertrieb | D-P7 | 🔵 | 🟡 vorgeplant | +| Kontakte & Organisationen | Vertrieb | D-CRM | 🔵 | 🟡 vorgeplant | | Kanban-Board & Pipelines (Projekte) | Vertrieb | D-P8 + D-KANBAN | 🟠 | ⬜ offen | | Projekt-Akte (Auftrag) 📱 | Auftrag & Baustelle | D-P9 | 🟠 | ⬜ offen | | Plantafel (Einsatzplanung) 📱 | Auftrag & Baustelle | D-PLAN | 🔴 | ⬜ offen | @@ -193,25 +193,29 @@ Abhaken = in der groben Planung berücksichtigt (Screens/Flow verortet). Quelle: ### Vertrieb -#### Lead-Eingang (Anfragen) — `D-P7` — ⬜ offen -- [ ] Eingangs-Liste (Quelle, Status, Freigabe ja/nein/unklar, Duplikat-/Spam-Marker, Schnell-Aktionen, Mehrfach-Aktionen, live) -- [ ] Anfrage-Detail (Quelle im Detail, Spam-Wert mit Begründung, »könnte dieser Kontakt sein«-Hinweise, Verlauf bei Mehrfach-Anfragen) -- [ ] »Zu Projekt machen« (Daten-Übernahme-Vorschau, Ziel-Board + Start-Spalte wählen, Kontakt anlegen oder verknüpfen) -- [ ] Statistiken (eingegangen, Umwandlungsquote, Reaktionszeit, je Quelle) -- [ ] Quellen-Verwaltung (inkl. Webhook-Link für Fremd-Websites) -- [ ] Spam-Schutz-Einstellungen (Limits, automatische Markierung, Quarantäne, Auto-Löschfristen) -- [ ] Anfrage von Hand anlegen (mit Duplikat-Check beim Tippen) +#### Lead-Eingang (Anfragen) — `D-P7` — 🟡 vorgeplant (2026-07-08) +- [x] Eingangs-Liste (Quelle, Status, Freigabe ja/nein/unklar, Duplikat-/Spam-Marker, Schnell-Aktionen, Mehrfach-Aktionen, live) +- [x] Anfrage-Detail (Quelle im Detail, Spam-Wert mit Begründung, »könnte dieser Kontakt sein«-Hinweise, Verlauf bei Mehrfach-Anfragen) +- [x] »Zu Projekt machen« als großes Modal (Daten-Übernahme-Vorschau, Ziel-Board + Start-Spalte, Kontakt anlegen oder verknüpfen) — auch als Bulk (Massen-Konvertierung, Davids Ergänzung) +- [x] Statistiken (eingegangen, Umwandlungsquote, Reaktionszeit, je Quelle, Drill-Down in gefilterte Inbox) +- [x] Quellen-Verwaltung (inkl. Webhook-Link für Fremd-Websites) +- [x] Spam-Schutz-Einstellungen (Limits, automatische Markierung, Quarantäne, Auto-Löschfristen) +- [x] Anfrage von Hand anlegen als Modal (mit Duplikat-Check beim Tippen); Inline-Anlegen als Später-Muster +- Davids Delta: **CSV-Import-Wizard** (Datei → Spalten zuordnen → Vorschau → Import) — Change-Request an Dev +- Paket: `02 Wireframes/P7 Leads/WF-P7 Leads/` (Screens validiert; Subframe steht aus) -#### Kontakte & Organisationen — `D-CRM` — ⬜ offen -- [ ] Kontakt-Liste (Filter, Mehrfach-Aktionen, CSV-Export) -- [ ] Organisations-Liste (heißt »Organisation«, nicht »Unternehmen«) -- [ ] Kontakt-Detailseite = **Vorlage für alle Detailseiten** (direkt editierbar, Reiter: Projekte/Dateien/Aufgaben, eigene Felder, Notizen, kompletter Verlauf inkl. Mails + Anrufe, Schnell-Aktionen) -- [ ] Organisations-Detailseite (verknüpfte Kontakte mit Rolle, Hauptkontakt markiert) -- [ ] Eigene Felder verwalten (je Datentyp, SHK-Vorlagen vorbefüllt) -- [ ] Tags verwalten (Farbe, zusammenführen) -- [ ] Duplikate nebeneinander vergleichen und Feld für Feld zusammenführen -- [ ] Kontakt-Logik: Typ (Privatperson/Organisation) · Status (Kontakt/Kunde/Bestandskunde) · Rolle bei Verknüpfung -- [ ] Duplikat-Warnung schon beim Anlegen +#### Kontakte & Organisationen — `D-CRM` — 🟡 vorgeplant (2026-07-08) +- [x] Kontakt-Liste (Filter, Mehrfach-Aktionen, CSV-Export) +- [x] Organisations-Liste (heißt »Organisation«, nicht »Unternehmen«) +- [x] Kontakt-Karteikarte = **Vorlage für alle Detailseiten** — validiertes Grundgerüst: Zweispalter + Reiter (links Stammdaten/Felder/Tags/Verknüpfungen, rechts Verlauf/Projekte/Aufgaben/Dateien/Notizen, Schnell-Aktionen im Kopf) +- [x] Organisations-Karteikarte (verknüpfte Kontakte mit Rolle, Hauptkontakt markiert) +- [x] Eigene Felder verwalten (je Datentyp, SHK-Vorlagen vorbefüllt) +- [x] Tags verwalten (Farbe, zusammenführen) +- [x] Duplikate nebeneinander vergleichen und Feld für Feld zusammenführen +- [x] Kontakt-Logik: Typ (Privatperson/Organisation) · Status (Kontakt/Kunde/Bestandskunde) · Rolle bei Verknüpfung +- [x] Duplikat-Warnung schon beim Anlegen (Anlegen als Modal, nur Name Pflicht) +- Davids Idee dokumentiert (Später): Inline-Anlegen in der Liste (Notion-Stil) +- Paket: `02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/` (Screens validiert; Subframe steht aus) #### Kanban-Board & Pipelines (Projekte) — `D-P8` + `D-KANBAN` — ⬜ offen - [ ] Kanban-Board: Spalten = Status, Karten ziehen = Status wechseln; Spaltenkopf mit Anzahl + Summe