From 13639333874000d576f2beb2570ee1ee1df2a1ce Mon Sep 17 00:00:00 2001 From: davetoolctrl Date: Wed, 8 Jul 2026 16:15:45 +0200 Subject: [PATCH] Add HiveGrid feature map (canvas + overview with checklists) Co-Authored-By: Claude Fable 5 --- .agents/skills/json-canvas/SKILL.md | 244 +++++++ .../skills/json-canvas/references/EXAMPLES.md | 329 +++++++++ 05 HiveGrid Map/HiveGrid Map.canvas | 691 ++++++++++++++++++ 05 HiveGrid Map/HiveGrid Map.md | 444 +++++++++++ skills-lock.json | 11 + 5 files changed, 1719 insertions(+) create mode 100644 .agents/skills/json-canvas/SKILL.md create mode 100644 .agents/skills/json-canvas/references/EXAMPLES.md create mode 100644 05 HiveGrid Map/HiveGrid Map.canvas create mode 100644 05 HiveGrid Map/HiveGrid Map.md create mode 100644 skills-lock.json diff --git a/.agents/skills/json-canvas/SKILL.md b/.agents/skills/json-canvas/SKILL.md new file mode 100644 index 00000000..8fb2c9de --- /dev/null +++ b/.agents/skills/json-canvas/SKILL.md @@ -0,0 +1,244 @@ +--- +name: json-canvas +description: Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian. +--- + +# JSON Canvas Skill + +## File Structure + +A canvas file (`.canvas`) contains two top-level arrays following the [JSON Canvas Spec 1.0](https://jsoncanvas.org/spec/1.0/): + +```json +{ + "nodes": [], + "edges": [] +} +``` + +- `nodes` (optional): Array of node objects +- `edges` (optional): Array of edge objects connecting nodes + +## Common Workflows + +### 1. Create a New Canvas + +1. Create a `.canvas` file with the base structure `{"nodes": [], "edges": []}` +2. Generate unique 16-character hex IDs for each node (e.g., `"6f0ad84f44ce9c17"`) +3. Add nodes with required fields: `id`, `type`, `x`, `y`, `width`, `height` +4. Add edges referencing valid node IDs via `fromNode` and `toNode` +5. **Validate**: Parse the JSON to confirm it is valid. Verify all `fromNode`/`toNode` values exist in the nodes array + +### 2. Add a Node to an Existing Canvas + +1. Read and parse the existing `.canvas` file +2. Generate a unique ID that does not collide with existing node or edge IDs +3. Choose position (`x`, `y`) that avoids overlapping existing nodes (leave 50-100px spacing) +4. Append the new node object to the `nodes` array +5. Optionally add edges connecting the new node to existing nodes +6. **Validate**: Confirm all IDs are unique and all edge references resolve to existing nodes + +### 3. Connect Two Nodes + +1. Identify the source and target node IDs +2. Generate a unique edge ID +3. Set `fromNode` and `toNode` to the source and target IDs +4. Optionally set `fromSide`/`toSide` (top, right, bottom, left) for anchor points +5. Optionally set `label` for descriptive text on the edge +6. Append the edge to the `edges` array +7. **Validate**: Confirm both `fromNode` and `toNode` reference existing node IDs + +### 4. Edit an Existing Canvas + +1. Read and parse the `.canvas` file as JSON +2. Locate the target node or edge by `id` +3. Modify the desired attributes (text, position, color, etc.) +4. Write the updated JSON back to the file +5. **Validate**: Re-check all ID uniqueness and edge reference integrity after editing + +## Nodes + +Nodes are objects placed on the canvas. Array order determines z-index: first node = bottom layer, last node = top layer. + +### Generic Node Attributes + +| Attribute | Required | Type | Description | +|-----------|----------|------|-------------| +| `id` | Yes | string | Unique 16-char hex identifier | +| `type` | Yes | string | `text`, `file`, `link`, or `group` | +| `x` | Yes | integer | X position in pixels | +| `y` | Yes | integer | Y position in pixels | +| `width` | Yes | integer | Width in pixels | +| `height` | Yes | integer | Height in pixels | +| `color` | No | canvasColor | Preset `"1"`-`"6"` or hex (e.g., `"#FF0000"`) | + +### Text Nodes + +| Attribute | Required | Type | Description | +|-----------|----------|------|-------------| +| `text` | Yes | string | Plain text with Markdown syntax | + +```json +{ + "id": "6f0ad84f44ce9c17", + "type": "text", + "x": 0, + "y": 0, + "width": 400, + "height": 200, + "text": "# Hello World\n\nThis is **Markdown** content." +} +``` + +**Newline pitfall**: Use `\n` for line breaks in JSON strings. Do **not** use the literal `\\n` -- Obsidian renders that as the characters `\` and `n`. + +### File Nodes + +| Attribute | Required | Type | Description | +|-----------|----------|------|-------------| +| `file` | Yes | string | Path to file within the system | +| `subpath` | No | string | Link to heading or block (starts with `#`) | + +```json +{ + "id": "a1b2c3d4e5f67890", + "type": "file", + "x": 500, + "y": 0, + "width": 400, + "height": 300, + "file": "Attachments/diagram.png" +} +``` + +### Link Nodes + +| Attribute | Required | Type | Description | +|-----------|----------|------|-------------| +| `url` | Yes | string | External URL | + +```json +{ + "id": "c3d4e5f678901234", + "type": "link", + "x": 1000, + "y": 0, + "width": 400, + "height": 200, + "url": "https://obsidian.md" +} +``` + +### Group Nodes + +Groups are visual containers for organizing other nodes. Position child nodes inside the group's bounds. + +| Attribute | Required | Type | Description | +|-----------|----------|------|-------------| +| `label` | No | string | Text label for the group | +| `background` | No | string | Path to background image | +| `backgroundStyle` | No | string | `cover`, `ratio`, or `repeat` | + +```json +{ + "id": "d4e5f6789012345a", + "type": "group", + "x": -50, + "y": -50, + "width": 1000, + "height": 600, + "label": "Project Overview", + "color": "4" +} +``` + +## Edges + +Edges connect nodes via `fromNode` and `toNode` IDs. + +| Attribute | Required | Type | Default | Description | +|-----------|----------|------|---------|-------------| +| `id` | Yes | string | - | Unique identifier | +| `fromNode` | Yes | string | - | Source node ID | +| `fromSide` | No | string | - | `top`, `right`, `bottom`, or `left` | +| `fromEnd` | No | string | `none` | `none` or `arrow` | +| `toNode` | Yes | string | - | Target node ID | +| `toSide` | No | string | - | `top`, `right`, `bottom`, or `left` | +| `toEnd` | No | string | `arrow` | `none` or `arrow` | +| `color` | No | canvasColor | - | Line color | +| `label` | No | string | - | Text label | + +```json +{ + "id": "0123456789abcdef", + "fromNode": "6f0ad84f44ce9c17", + "fromSide": "right", + "toNode": "a1b2c3d4e5f67890", + "toSide": "left", + "toEnd": "arrow", + "label": "leads to" +} +``` + +## Colors + +The `canvasColor` type accepts either a hex string or a preset number: + +| Preset | Color | +|--------|-------| +| `"1"` | Red | +| `"2"` | Orange | +| `"3"` | Yellow | +| `"4"` | Green | +| `"5"` | Cyan | +| `"6"` | Purple | + +Preset color values are intentionally undefined -- applications use their own brand colors. + +## ID Generation + +Generate 16-character lowercase hexadecimal strings (64-bit random value): + +``` +"6f0ad84f44ce9c17" +"a3b2c1d0e9f8a7b6" +``` + +## Layout Guidelines + +- Coordinates can be negative (canvas extends infinitely) +- `x` increases right, `y` increases down; position is the top-left corner +- Space nodes 50-100px apart; leave 20-50px padding inside groups +- Align to grid (multiples of 10 or 20) for cleaner layouts + +| Node Type | Suggested Width | Suggested Height | +|-----------|-----------------|------------------| +| Small text | 200-300 | 80-150 | +| Medium text | 300-450 | 150-300 | +| Large text | 400-600 | 300-500 | +| File preview | 300-500 | 200-400 | +| Link preview | 250-400 | 100-200 | + +## Validation Checklist + +After creating or editing a canvas file, verify: + +1. All `id` values are unique across both nodes and edges +2. Every `fromNode` and `toNode` references an existing node ID +3. Required fields are present for each node type (`text` for text nodes, `file` for file nodes, `url` for link nodes) +4. `type` is one of: `text`, `file`, `link`, `group` +5. `fromSide`/`toSide` values are one of: `top`, `right`, `bottom`, `left` +6. `fromEnd`/`toEnd` values are one of: `none`, `arrow` +7. Color presets are `"1"` through `"6"` or valid hex (e.g., `"#FF0000"`) +8. JSON is valid and parseable + +If validation fails, check for duplicate IDs, dangling edge references, or malformed JSON strings (especially unescaped newlines in text content). + +## Complete Examples + +See [references/EXAMPLES.md](references/EXAMPLES.md) for full canvas examples including mind maps, project boards, research canvases, and flowcharts. + +## References + +- [JSON Canvas Spec 1.0](https://jsoncanvas.org/spec/1.0/) +- [JSON Canvas GitHub](https://github.com/obsidianmd/jsoncanvas) diff --git a/.agents/skills/json-canvas/references/EXAMPLES.md b/.agents/skills/json-canvas/references/EXAMPLES.md new file mode 100644 index 00000000..c94f9964 --- /dev/null +++ b/.agents/skills/json-canvas/references/EXAMPLES.md @@ -0,0 +1,329 @@ +# JSON Canvas Complete Examples + +## Simple Canvas with Text and Connections + +```json +{ + "nodes": [ + { + "id": "8a9b0c1d2e3f4a5b", + "type": "text", + "x": 0, + "y": 0, + "width": 300, + "height": 150, + "text": "# Main Idea\n\nThis is the central concept." + }, + { + "id": "1a2b3c4d5e6f7a8b", + "type": "text", + "x": 400, + "y": -100, + "width": 250, + "height": 100, + "text": "## Supporting Point A\n\nDetails here." + }, + { + "id": "2b3c4d5e6f7a8b9c", + "type": "text", + "x": 400, + "y": 100, + "width": 250, + "height": 100, + "text": "## Supporting Point B\n\nMore details." + } + ], + "edges": [ + { + "id": "3c4d5e6f7a8b9c0d", + "fromNode": "8a9b0c1d2e3f4a5b", + "fromSide": "right", + "toNode": "1a2b3c4d5e6f7a8b", + "toSide": "left" + }, + { + "id": "4d5e6f7a8b9c0d1e", + "fromNode": "8a9b0c1d2e3f4a5b", + "fromSide": "right", + "toNode": "2b3c4d5e6f7a8b9c", + "toSide": "left" + } + ] +} +``` + +## Project Board with Groups + +```json +{ + "nodes": [ + { + "id": "5e6f7a8b9c0d1e2f", + "type": "group", + "x": 0, + "y": 0, + "width": 300, + "height": 500, + "label": "To Do", + "color": "1" + }, + { + "id": "6f7a8b9c0d1e2f3a", + "type": "group", + "x": 350, + "y": 0, + "width": 300, + "height": 500, + "label": "In Progress", + "color": "3" + }, + { + "id": "7a8b9c0d1e2f3a4b", + "type": "group", + "x": 700, + "y": 0, + "width": 300, + "height": 500, + "label": "Done", + "color": "4" + }, + { + "id": "8b9c0d1e2f3a4b5c", + "type": "text", + "x": 20, + "y": 50, + "width": 260, + "height": 80, + "text": "## Task 1\n\nImplement feature X" + }, + { + "id": "9c0d1e2f3a4b5c6d", + "type": "text", + "x": 370, + "y": 50, + "width": 260, + "height": 80, + "text": "## Task 2\n\nReview PR #123", + "color": "2" + }, + { + "id": "0d1e2f3a4b5c6d7e", + "type": "text", + "x": 720, + "y": 50, + "width": 260, + "height": 80, + "text": "## Task 3\n\n~~Setup CI/CD~~" + } + ], + "edges": [] +} +``` + +## Research Canvas with Files and Links + +```json +{ + "nodes": [ + { + "id": "1e2f3a4b5c6d7e8f", + "type": "text", + "x": 300, + "y": 200, + "width": 400, + "height": 200, + "text": "# Research Topic\n\n## Key Questions\n\n- How does X affect Y?\n- What are the implications?", + "color": "5" + }, + { + "id": "2f3a4b5c6d7e8f9a", + "type": "file", + "x": 0, + "y": 0, + "width": 250, + "height": 150, + "file": "Literature/Paper A.pdf" + }, + { + "id": "3a4b5c6d7e8f9a0b", + "type": "file", + "x": 0, + "y": 200, + "width": 250, + "height": 150, + "file": "Notes/Meeting Notes.md", + "subpath": "#Key Insights" + }, + { + "id": "4b5c6d7e8f9a0b1c", + "type": "link", + "x": 0, + "y": 400, + "width": 250, + "height": 100, + "url": "https://example.com/research" + }, + { + "id": "5c6d7e8f9a0b1c2d", + "type": "file", + "x": 750, + "y": 150, + "width": 300, + "height": 250, + "file": "Attachments/diagram.png" + } + ], + "edges": [ + { + "id": "6d7e8f9a0b1c2d3e", + "fromNode": "2f3a4b5c6d7e8f9a", + "fromSide": "right", + "toNode": "1e2f3a4b5c6d7e8f", + "toSide": "left", + "label": "supports" + }, + { + "id": "7e8f9a0b1c2d3e4f", + "fromNode": "3a4b5c6d7e8f9a0b", + "fromSide": "right", + "toNode": "1e2f3a4b5c6d7e8f", + "toSide": "left", + "label": "informs" + }, + { + "id": "8f9a0b1c2d3e4f5a", + "fromNode": "4b5c6d7e8f9a0b1c", + "fromSide": "right", + "toNode": "1e2f3a4b5c6d7e8f", + "toSide": "left", + "toEnd": "arrow", + "color": "6" + }, + { + "id": "9a0b1c2d3e4f5a6b", + "fromNode": "1e2f3a4b5c6d7e8f", + "fromSide": "right", + "toNode": "5c6d7e8f9a0b1c2d", + "toSide": "left", + "label": "visualized by" + } + ] +} +``` + +## Flowchart + +```json +{ + "nodes": [ + { + "id": "a0b1c2d3e4f5a6b7", + "type": "text", + "x": 200, + "y": 0, + "width": 150, + "height": 60, + "text": "**Start**", + "color": "4" + }, + { + "id": "b1c2d3e4f5a6b7c8", + "type": "text", + "x": 200, + "y": 100, + "width": 150, + "height": 60, + "text": "Step 1:\nGather data" + }, + { + "id": "c2d3e4f5a6b7c8d9", + "type": "text", + "x": 200, + "y": 200, + "width": 150, + "height": 80, + "text": "**Decision**\n\nIs data valid?", + "color": "3" + }, + { + "id": "d3e4f5a6b7c8d9e0", + "type": "text", + "x": 400, + "y": 200, + "width": 150, + "height": 60, + "text": "Process data" + }, + { + "id": "e4f5a6b7c8d9e0f1", + "type": "text", + "x": 0, + "y": 200, + "width": 150, + "height": 60, + "text": "Request new data", + "color": "1" + }, + { + "id": "f5a6b7c8d9e0f1a2", + "type": "text", + "x": 400, + "y": 320, + "width": 150, + "height": 60, + "text": "**End**", + "color": "4" + } + ], + "edges": [ + { + "id": "a6b7c8d9e0f1a2b3", + "fromNode": "a0b1c2d3e4f5a6b7", + "fromSide": "bottom", + "toNode": "b1c2d3e4f5a6b7c8", + "toSide": "top" + }, + { + "id": "b7c8d9e0f1a2b3c4", + "fromNode": "b1c2d3e4f5a6b7c8", + "fromSide": "bottom", + "toNode": "c2d3e4f5a6b7c8d9", + "toSide": "top" + }, + { + "id": "c8d9e0f1a2b3c4d5", + "fromNode": "c2d3e4f5a6b7c8d9", + "fromSide": "right", + "toNode": "d3e4f5a6b7c8d9e0", + "toSide": "left", + "label": "Yes", + "color": "4" + }, + { + "id": "d9e0f1a2b3c4d5e6", + "fromNode": "c2d3e4f5a6b7c8d9", + "fromSide": "left", + "toNode": "e4f5a6b7c8d9e0f1", + "toSide": "right", + "label": "No", + "color": "1" + }, + { + "id": "e0f1a2b3c4d5e6f7", + "fromNode": "e4f5a6b7c8d9e0f1", + "fromSide": "top", + "fromEnd": "none", + "toNode": "b1c2d3e4f5a6b7c8", + "toSide": "left", + "toEnd": "arrow" + }, + { + "id": "f1a2b3c4d5e6f7a8", + "fromNode": "d3e4f5a6b7c8d9e0", + "fromSide": "bottom", + "toNode": "f5a6b7c8d9e0f1a2", + "toSide": "top" + } + ] +} +``` diff --git a/05 HiveGrid Map/HiveGrid Map.canvas b/05 HiveGrid Map/HiveGrid Map.canvas new file mode 100644 index 00000000..ea65399d --- /dev/null +++ b/05 HiveGrid Map/HiveGrid Map.canvas @@ -0,0 +1,691 @@ +{ + "nodes": [ + { + "id": "d5d3db1765287eef", + "type": "text", + "x": 0, + "y": -460, + "width": 1140, + "height": 380, + "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**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]]" + }, + { + "id": "41b8d85d3bb8d47d", + "type": "group", + "x": 0, + "y": 0, + "width": 1540, + "height": 480, + "label": "BASIS — gilt für alle Features", + "color": "6" + }, + { + "id": "b3cad562971d30a5", + "type": "text", + "x": 40, + "y": 80, + "width": 460, + "height": 360, + "text": "## App-Gerüst (Sidebar, Topbar & Design)\n**Ticket:** `D-D0a` · **Status:** ⬜ offen\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**Warum wichtig:** Der Rahmen, in dem jedes Feature steckt — inkl. Farben, Schriften, Hell/Dunkel. **Ohne das geht fast nichts anderes.**", + "color": "6" + }, + { + "id": "d53e7ea48a9b1e6c", + "type": "text", + "x": 540, + "y": 80, + "width": 460, + "height": 360, + "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.", + "color": "4" + }, + { + "id": "c02969250252a3ab", + "type": "text", + "x": 1040, + "y": 80, + "width": 460, + "height": 360, + "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.", + "color": "3" + }, + { + "id": "7a26f88c260892eb", + "type": "group", + "x": 1700, + "y": 0, + "width": 540, + "height": 480, + "label": "WEBSITE 🌐", + "color": "3" + }, + { + "id": "ce5632682989a6ca", + "type": "text", + "x": 1740, + "y": 80, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "2025c7621bb63c98", + "type": "group", + "x": 2400, + "y": 0, + "width": 540, + "height": 480, + "label": "LOGIN & ZUGÄNGE", + "color": "4" + }, + { + "id": "3e27875daca5713d", + "type": "text", + "x": 2440, + "y": 80, + "width": 460, + "height": 360, + "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/`", + "color": "4" + }, + { + "id": "db7d9db3cd7939b0", + "type": "group", + "x": 3100, + "y": 0, + "width": 1040, + "height": 480, + "label": "SUCHE & DASHBOARD" + }, + { + "id": "89c0813f7e139a88", + "type": "text", + "x": 3140, + "y": 80, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "4a4e5be847a54e5f", + "type": "text", + "x": 3640, + "y": 80, + "width": 460, + "height": 360, + "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.", + "color": "1" + }, + { + "id": "88792c50986c93db", + "type": "group", + "x": 1700, + "y": 680, + "width": 1540, + "height": 480, + "label": "VERTRIEB — vom Anruf zum Auftrag", + "color": "2" + }, + { + "id": "8272764aa65537b0", + "type": "text", + "x": 1740, + "y": 760, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "d9868dadb782f253", + "type": "text", + "x": 2240, + "y": 760, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "e10a35560a461111", + "type": "text", + "x": 2740, + "y": 760, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "77c19412215a977c", + "type": "group", + "x": 3500, + "y": 680, + "width": 1540, + "height": 480, + "label": "AUFTRAG & BAUSTELLE", + "color": "2" + }, + { + "id": "4bb807ef5e3c8dee", + "type": "text", + "x": 3540, + "y": 760, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "3f83fa1a16ae69df", + "type": "text", + "x": 4040, + "y": 760, + "width": 460, + "height": 360, + "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.", + "color": "1" + }, + { + "id": "d9ad572ae83b4d0a", + "type": "text", + "x": 4540, + "y": 760, + "width": 460, + "height": 360, + "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.", + "color": "1" + }, + { + "id": "00d6b92d3845c185", + "type": "group", + "x": 0, + "y": 1400, + "width": 1040, + "height": 480, + "label": "E-MAIL-MARKETING" + }, + { + "id": "ab16fe58ff28c0ac", + "type": "text", + "x": 40, + "y": 1480, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "4cce52e2e3bd8823", + "type": "text", + "x": 540, + "y": 1480, + "width": 460, + "height": 360, + "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).", + "color": "2" + }, + { + "id": "ca7223940f6e1d29", + "type": "group", + "x": 1700, + "y": 1400, + "width": 2040, + "height": 480, + "label": "TERMINE & FORMULARE" + }, + { + "id": "6b8c7d3bc3ee7449", + "type": "text", + "x": 1740, + "y": 1480, + "width": 460, + "height": 360, + "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.", + "color": "1" + }, + { + "id": "77ebfde5a3a05b8a", + "type": "text", + "x": 2240, + "y": 1480, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "28bd46ecb4eaa069", + "type": "text", + "x": 2740, + "y": 1480, + "width": 460, + "height": 360, + "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«.", + "color": "2" + }, + { + "id": "b789fc765f833f45", + "type": "text", + "x": 3240, + "y": 1480, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "e97e13901e405fcd", + "type": "group", + "x": 4200, + "y": 1400, + "width": 1540, + "height": 480, + "label": "KOMMUNIKATION" + }, + { + "id": "401d8270854bebac", + "type": "text", + "x": 4240, + "y": 1480, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "29ca06733a9b243b", + "type": "text", + "x": 4740, + "y": 1480, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "50945ed6e43505ce", + "type": "text", + "x": 5240, + "y": 1480, + "width": 460, + "height": 360, + "text": "## Benachrichtigungen\n**Ticket:** `D-P3` (Teil) · **Status:** ⬜ 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«.", + "color": "5" + }, + { + "id": "070f258760fab4e9", + "type": "group", + "x": 0, + "y": 2120, + "width": 1040, + "height": 480, + "label": "AUFGABEN & DATEIEN — stecken in jedem Feature" + }, + { + "id": "e21930b7073823f8", + "type": "text", + "x": 40, + "y": 2200, + "width": 460, + "height": 360, + "text": "## Aufgaben\n**Ticket:** `D-P4` (Teil) · **Status:** ⬜ 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.", + "color": "5" + }, + { + "id": "036e2a807223753d", + "type": "text", + "x": 540, + "y": 2200, + "width": 460, + "height": 360, + "text": "## Dateien\n**Ticket:** `D-P4` (Teil) · **Status:** ⬜ 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.", + "color": "5" + }, + { + "id": "8acc5d7d61317076", + "type": "group", + "x": 1200, + "y": 2120, + "width": 1040, + "height": 480, + "label": "AUTOMATIONEN" + }, + { + "id": "8f3127f03a5bab96", + "type": "text", + "x": 1240, + "y": 2200, + "width": 460, + "height": 360, + "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.**", + "color": "1" + }, + { + "id": "e6d8c36a0f89d954", + "type": "text", + "x": 1740, + "y": 2200, + "width": 460, + "height": 360, + "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.", + "color": "2" + }, + { + "id": "3c6e5b1ea4a27913", + "type": "group", + "x": 3700, + "y": 2120, + "width": 540, + "height": 480, + "label": "HR (MITARBEITER)" + }, + { + "id": "03e8e03ef11606a0", + "type": "text", + "x": 3740, + "y": 2200, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "904c5ece127e2e4c", + "type": "group", + "x": 4400, + "y": 2120, + "width": 1540, + "height": 880, + "label": "VERWALTUNG (WORKSPACE-EINSTELLUNGEN)" + }, + { + "id": "5c72e7b04059503a", + "type": "text", + "x": 4440, + "y": 2200, + "width": 460, + "height": 360, + "text": "## Integrationen (Apps verbinden)\n**Ticket:** `D-P5` · **Status:** ⬜ 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.", + "color": "5" + }, + { + "id": "0f6acf7087283c0c", + "type": "text", + "x": 4940, + "y": 2200, + "width": 460, + "height": 360, + "text": "## Aktivitäts-Protokoll (Audit-Log)\n**Ticket:** `D-P3` (Teil) · **Status:** ⬜ 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.", + "color": "5" + }, + { + "id": "6b3c0929759a607b", + "type": "text", + "x": 5440, + "y": 2200, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "b334f15bdd19d9ad", + "type": "text", + "x": 4440, + "y": 2600, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "6533d410b309a48f", + "type": "text", + "x": 4940, + "y": 2600, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "db76161d24fb0c1d", + "type": "text", + "x": 5440, + "y": 2600, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "c3172228336521df", + "type": "group", + "x": 6100, + "y": 2120, + "width": 540, + "height": 880, + "label": "PLATTFORM-ADMIN — unsere interne Verwaltung" + }, + { + "id": "c8d8914e45e1497e", + "type": "text", + "x": 6140, + "y": 2200, + "width": 460, + "height": 360, + "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.", + "color": "5" + }, + { + "id": "abf5f779c1463715", + "type": "text", + "x": 6140, + "y": 2600, + "width": 460, + "height": 360, + "color": "5", + "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." + } + ], + "edges": [ + { + "id": "4ab78034e8253353", + "fromNode": "b3cad562971d30a5", + "fromSide": "right", + "toNode": "d53e7ea48a9b1e6c", + "toSide": "left", + "toEnd": "arrow", + "label": "Design-Grundlage" + }, + { + "id": "493a2823934c45bb", + "fromNode": "3e27875daca5713d", + "fromSide": "right", + "toNode": "89c0813f7e139a88", + "toSide": "left", + "toEnd": "arrow", + "label": "nach dem Login" + }, + { + "id": "ec751d558a1aef74", + "fromNode": "8272764aa65537b0", + "fromSide": "right", + "toNode": "d9868dadb782f253", + "toSide": "left", + "toEnd": "arrow", + "label": "Kontakt anlegen/verknüpfen", + "color": "2" + }, + { + "id": "154e632b2e5a645b", + "fromNode": "d9868dadb782f253", + "fromSide": "right", + "toNode": "e10a35560a461111", + "toSide": "left", + "toEnd": "arrow", + "label": "Kontakt hängt am Projekt", + "color": "2" + }, + { + "id": "0c0d0ba4b21da4ee", + "fromNode": "e10a35560a461111", + "fromSide": "right", + "toNode": "4bb807ef5e3c8dee", + "toSide": "left", + "toEnd": "arrow", + "label": "gewonnen → Auftrags-Board", + "color": "2" + }, + { + "id": "b43edef178d41dd6", + "fromNode": "4bb807ef5e3c8dee", + "fromSide": "right", + "toNode": "3f83fa1a16ae69df", + "toSide": "left", + "toEnd": "arrow", + "label": "Termine einplanen", + "color": "2" + }, + { + "id": "c45adb9c0c551e38", + "fromNode": "3f83fa1a16ae69df", + "fromSide": "right", + "toNode": "d9ad572ae83b4d0a", + "toSide": "left", + "toEnd": "arrow", + "label": "Ausführung → Abnahme", + "color": "2" + }, + { + "id": "47be96e20dcfa86a", + "fromNode": "d9ad572ae83b4d0a", + "fromSide": "bottom", + "toNode": "4bb807ef5e3c8dee", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Mängel → Aufgaben · dann Rechnung", + "color": "2" + }, + { + "id": "2ec97abebcf1dcce", + "fromNode": "ce5632682989a6ca", + "fromSide": "bottom", + "toNode": "8272764aa65537b0", + "toSide": "top", + "toEnd": "arrow", + "label": "Demo-Anfrage" + }, + { + "id": "4b89b1105393e48f", + "fromNode": "6b8c7d3bc3ee7449", + "fromSide": "top", + "toNode": "8272764aa65537b0", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Formular → Anfrage" + }, + { + "id": "bc139947ce483198", + "fromNode": "77ebfde5a3a05b8a", + "fromSide": "top", + "toNode": "8272764aa65537b0", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Buchung → Anfrage/Termin" + }, + { + "id": "57a256b64d1a2d76", + "fromNode": "29ca06733a9b243b", + "fromSide": "top", + "toNode": "8272764aa65537b0", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Anruf von unbekannt → Anfrage" + }, + { + "id": "78fca84da3e723b6", + "fromNode": "ab16fe58ff28c0ac", + "fromSide": "top", + "toNode": "d9868dadb782f253", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Mails am Kontakt sichtbar" + }, + { + "id": "8792d0c809babff2", + "fromNode": "03e8e03ef11606a0", + "fromSide": "top", + "toNode": "3f83fa1a16ae69df", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Urlaub/krank → Konflikt-Warnung" + }, + { + "id": "ce4441bfdc6a11cc", + "fromNode": "28bd46ecb4eaa069", + "fromSide": "top", + "toNode": "3f83fa1a16ae69df", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Kalender-Abgleich" + }, + { + "id": "77081523e546eebe", + "fromNode": "b789fc765f833f45", + "fromSide": "top", + "toNode": "4bb807ef5e3c8dee", + "toSide": "bottom", + "toEnd": "arrow", + "label": "hängt an der Projekt-Akte" + }, + { + "id": "e6c0f9dda77f8d85", + "fromNode": "401d8270854bebac", + "fromSide": "top", + "toNode": "4bb807ef5e3c8dee", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Projekt-Channel im Projekt" + }, + { + "id": "65bd180bf263096e", + "fromNode": "e10a35560a461111", + "fromSide": "top", + "toNode": "89c0813f7e139a88", + "toSide": "bottom", + "toEnd": "arrow", + "label": "Zahlen fürs Dashboard" + }, + { + "id": "0bb07aa23fe6a9f2", + "fromNode": "28bd46ecb4eaa069", + "fromSide": "left", + "toNode": "77ebfde5a3a05b8a", + "toSide": "right", + "toEnd": "arrow", + "label": "freie Zeiten" + }, + { + "id": "cc8ccd69ae4f9435", + "fromNode": "8f3127f03a5bab96", + "fromSide": "right", + "toNode": "e6d8c36a0f89d954", + "toSide": "left", + "toEnd": "arrow", + "label": "Baukasten ↔ Übersicht" + }, + { + "id": "dc15b80a5a4410c9", + "fromNode": "db76161d24fb0c1d", + "fromSide": "right", + "toNode": "c8d8914e45e1497e", + "toSide": "left", + "toEnd": "arrow", + "label": "Feedback → Support-Inbox" + } + ] +} \ No newline at end of file diff --git a/05 HiveGrid Map/HiveGrid Map.md b/05 HiveGrid Map/HiveGrid Map.md new file mode 100644 index 00000000..7fb16a08 --- /dev/null +++ b/05 HiveGrid Map/HiveGrid Map.md @@ -0,0 +1,444 @@ +--- +kind: map +project: HiveGrid Screen Project +area: HiveGrid Map +status: active +stand: 2026-07-08 +--- + +# HiveGrid Map + +Gesamtkarte aller HiveGrid-v1-Features. Eine Karte = **ein Feature** (so benannt, wie man es im Alltag nennen würde). Die Tickets stehen nur als Referenz dran. Ziel: alles Wichtige ist drin und verortet, der grobe Userflow steht, und pro Feature ist abhakbar, was laut Ticket rein muss. + +- Visuelle Karte: [Canvas]() +- Quelle der Wahrheit: `03 Quellen und Referenzen/hivegrid-cloud/.planning/ticket-docs/D-*.md` + `SCREEN-MAP.md` +- Detailarbeit je Feature passiert atomar als Wireframe-Paket in `02 Wireframes` (bestehende Struktur). Diese Datei bleibt High-Level. + +## Arbeitsweise + +1. Feature auswählen (atomar, eines nach dem anderen). +2. Grob beschreiben, was wo sein soll (Screens, grober Flow) — Checkliste hier abhaken. +3. Einzelne Modals/Detailzustände bewusst NICHT jetzt (kommen im v2-Durchgang). Alles bleibt `vorgeplant/unfertig`, Screens können trotzdem gebaut werden. +4. Ergebnis je Feature: Wireframe-Paket in `02 Wireframes//WF- /` + Tracker-Zeilen + Update hier. + +## Status-Legende + +| Status | Bedeutung | +|---|---| +| ✅ validiert | bearbeitet und validiert (Handoff in `Tickets/Fertige Tickets/`) | +| 🟡 vorgeplant | in dieser Map-Runde grob durchgeplant, Screens baubar, Modals offen | +| ⬜ offen | noch nicht angefasst | +| ⚠️ Recut | Ticket selbst wird gerade neu geschnitten — warten | + +**Aufwands-Typen:** 🔴 Sonder-UI (wird von Hand designt, Tage) · 🔵 aus dem UI-Baukasten zusammengesteckt (Stunden) · 🟠 Mischung. + +## Feature-Übersicht + +| Feature | Bereich | Ticket(s) | Aufwand | Status | +|---|---|---|---|---| +| App-Gerüst (Sidebar, Topbar & Design) | Basis | D-D0a | 🔴 | ⬜ offen | +| UI-Baukasten (Listen, Formulare, Modals …) | Basis | D-D0b | 🔴 | ✅ validiert | +| Feinschliff vor Launch | Basis | D-POLISH | 🟡 Politur | ⬜ offen | +| Website (Landing & Demo-Anfrage) 🌐 | Website | D-WEB | 🟠 | ⬜ offen | +| 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 | +| 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 | +| Abnahme (Baustellen-Protokoll) 📱 | Auftrag & Baustelle | D-ABN | 🔴 | ⬜ offen | +| Kampagnen & Empfängerlisten | E-Mail-Marketing | D-KAMP | 🟠 | ⬜ offen | +| Versand-Technik & Statistiken 🌐 | E-Mail-Marketing | D-P14 | 🟠 | ⬜ offen | +| Formulare (Baukasten) 🌐 | Termine & Formulare | D-FORM + D-P16 (Teil) | 🔴 | ⬜ offen | +| Online-Terminbuchung 🌐 | Termine & Formulare | D-BOOK + D-P16 (Teil) | 🟠 | ⬜ offen | +| Kalender | Termine & Formulare | D-BOOK + D-P16 (Teil) | 🔴 mittel | ⬜ offen | +| Digital unterschreiben (E-Signatur) | Termine & Formulare | D-P16 (Teil) | 🔵 | ⬜ offen | +| Team-Chat 📱 | Kommunikation | D-CHAT | 🟠 | ⬜ offen | +| Telefonie (Anrufe) | Kommunikation | D-P15 | 🔵 | ⬜ offen | +| Benachrichtigungen | Kommunikation | D-P3 (Teil) | 🔵 | ⬜ offen | +| Aufgaben | Aufgaben & Dateien | D-P4 (Teil) | 🔵 | ⬜ offen | +| Dateien | Aufgaben & Dateien | D-P4 (Teil) | 🔵 | ⬜ offen | +| Automations-Baukasten (Flow-Editor) | Automationen | D-FLOW | 🔴 schwerste UI | ⬜ offen | +| Automationen: Übersicht & Verläufe | Automationen | D-P12 | 🟠 | ⬜ offen | +| HR-Bereich 📱 | HR | D-HR | 🔵 breit | ⬜ offen | +| Integrationen (Apps verbinden) | Verwaltung | D-P5 | 🔵 | ⬜ offen | +| Aktivitäts-Protokoll (Audit-Log) | Verwaltung | D-P3 (Teil) | 🔵 | ⬜ offen | +| Abo & Rechnungen (für HiveGrid) | Verwaltung | D-P20 (Teil) | 🔵 | ⚠️ Recut | +| Erste Schritte & Demo-Daten | Verwaltung | D-P20 (Teil) | 🔵 | ⬜ offen | +| Datenschutz (Export & Löschung) | Verwaltung | D-P21 (Teil) | 🔵 | ⬜ offen | +| Feedback & Hilfe | Verwaltung | D-P21 (Teil) | 🔵 klein | ⬜ offen | +| Plattform-Admin | Plattform-Admin | D-ADMIN | 🔵 eigene Welt | ⬜ offen | + +## Ticket → Feature (wo finde ich was) + +| Ticket | steckt in Feature(s) | +|---|---| +| D-D0a | App-Gerüst | +| D-D0b | UI-Baukasten ✅ | +| D-WEB | Website | +| D-P2 | Login, Registrierung & Workspace ✅ | +| D-P3 | Benachrichtigungen · Aktivitäts-Protokoll | +| D-P4 | Aufgaben · Dateien | +| D-P5 | Integrationen | +| D-CRM | Kontakte & Organisationen | +| D-P7 | Lead-Eingang | +| D-P8, D-KANBAN | Kanban-Board & Pipelines | +| D-P9 | Projekt-Akte (Auftrag) | +| D-PLAN | Plantafel | +| D-ABN | Abnahme | +| D-CHAT | Team-Chat | +| D-P15 | Telefonie | +| D-KAMP | Kampagnen & Empfängerlisten | +| D-P14 | Versand-Technik & Statistiken | +| D-FORM | Formulare | +| D-BOOK | Online-Terminbuchung · Kalender | +| D-P16 | Formulare · Online-Terminbuchung · Kalender · E-Signatur | +| D-FLOW | Automations-Baukasten | +| D-P12 | Automationen: Übersicht & Verläufe | +| D-HR | HR-Bereich | +| D-DASH | Dashboard · Suche | +| D-P20 | Abo & Rechnungen ⚠️ · Erste Schritte & Demo-Daten | +| D-P21 | Datenschutz · Feedback & Hilfe | +| D-ADMIN | Plattform-Admin | +| D-POLISH | Feinschliff vor Launch | + +## Grober Userflow (die Kette vom Anruf zum Geld) + +``` +Wege rein: Website-Demo ─┐ + Formular ─────┤ + Terminbuchung ┼──▶ Lead-Eingang ──▶ Kontakt anlegen/verknüpfen + Anruf ────────┘ │ + │ Freigabe = ja → wird Projekt + ▼ + Kanban-Board (Vertriebs-Board) ── gewonnen ──▶ Auftrags-Board + │ + ▼ + Projekt-Akte (Termine, Checklisten, Rechnung) ──▶ Plantafel ──▶ Abnahme + ▲ ▲ │ + HR (Urlaub/krank) ────────┼── Konflikt-Warnung ──────┘ │ + └───────── Mängel werden Aufgaben ◀──────┘ +``` + +Überall dabei: App-Gerüst + UI-Baukasten (Basis), Aufgaben-/Dateien-Reiter auf jeder Detailseite, Benachrichtigungen, Aktivitäts-Protokoll, Automationen (können in allen Features auslösen und handeln), Suche + Dashboard. + +**Vier Grundsatz-Entscheidungen, die überall gelten:** +- **Ein Projekt-Datensatz** (AD-20): »Deal« und »Auftrag« sind nur zwei Boards auf dasselbe Projekt — nichts wird kopiert oder übergeben. +- **Keine KI in v1** (AD-26): Sprach-zu-Automation, KI-Widgets, AI-Credits sind raus; HiveGrid wird stattdessen von außen per MCP ansteuerbar. +- **Billing neu geschnitten** (AD-27): eigener Abrechnungs-Unterbau (Lago + Mollie) — betrifft das Feature »Abo & Rechnungen«. +- **PWA statt App-Store** (AD-17): alles läuft im Browser, 📱-Features sind fürs Monteur-Handy gebaut, teils offline. + +--- + +## Abhaklisten je Feature + +Abhaken = in der groben Planung berücksichtigt (Screens/Flow verortet). Quelle: jeweilige Ticket-Doc. + +### Basis + +#### App-Gerüst (Sidebar, Topbar & Design) — `D-D0a` — ⬜ offen +- [ ] Design-Grundlagen: Farben, Schriften, Abstände, Hell/Dunkel ohne Aufblitzen +- [ ] Sidebar: Module je Abo ein-/ausblendbar, Bereiche »Arbeit« + »Verwaltung«, einklappbar, Handy-Variante 📱 +- [ ] Topbar: Workspace-Wechsler, Such-Knopf (Cmd+K), Benachrichtigungs-Glocke, Profil-Menü +- [ ] Breadcrumb (Pfad-Anzeige bis zum Datensatz) +- [ ] Warn-Banner-System (Zahlung offen / eingefroren / Löschung geplant / gesperrt — stapelbar) +- [ ] Erfolgs-/Fehlermeldungen in Klartext mit Lösungs-Knopf + +#### UI-Baukasten (Listen, Formulare, Modals …) — `D-D0b` — ✅ validiert +- [x] Bausteine: Liste, Detailseite (mit Aktivitäts-Verlauf), Formular-Felder (12 Typen), Dialog/Wizard, Settings-Seite, Zustands-Set (leer/laden/Fehler/kein Zugriff/offline) +- [x] Kleinteile: Buttons, Tags, Avatare, Tabs, Zahlen-Kacheln, Charts, Markdown, Datei-Dropzone, Unterschriften-Feld, Emoji, @-Erwähnung +- [x] Layout-Standards dokumentiert → `04 Standards/Subframe UI Standards/` + +#### Feinschliff vor Launch — `D-POLISH` — ⬜ offen +- [ ] Terminbuchungs-Seite, öffentliche Formulare, Marketing-Mails polieren (Branding, alle Zustände, Handy, Micro-Interactions) +- [ ] Hell/Dunkel + Handy-Varianten der öffentlichen Seiten final +- [ ] Farb-/Schrift-Abgleich gegen Website und App-Gerüst (kein Auseinanderlaufen) +- [ ] »So muss es aussehen«-Screenshots je öffentlicher Seite einfrieren (vor dem Freeze) + +### Website 🌐 + +#### Website (Landing & Demo-Anfrage) — `D-WEB` — ⬜ offen +- [ ] Startseite (Aufmacher, Nutzenversprechen, Referenz-Plätze, Haupt-Knopf Demo/Registrieren) +- [ ] Features-Seite (Abschnitte je Modul, Screenshots) +- [ ] Preise-Teaser (Baukasten-Prinzip andeuten, kein Selbst-Kauf) +- [ ] Demo-Anfrage-Formular (Spam-Schutz) → landet im Lead-Eingang +- [ ] Marken-Design (Farben/Schriften/Logo) als gemeinsame Quelle für Website UND App +- [ ] Hell/Dunkel + Handy-tauglich + +### Login & Zugänge + +#### Login, Registrierung & Workspace — `D-P2` — ✅ validiert / in Subframe +- [x] Registrierung, Login + 2FA, Passwort vergessen/ändern, zentraler »Passwort setzen«-Flow +- [x] Workspace-Auswahl + neuen Workspace anlegen, Profil & Sicherheit, 2FA verwalten +- [x] Mitarbeiter & Rollen (einladen, deaktivieren, Rollen anlegen/duplizieren/bearbeiten) +- [x] Konto/Workspace löschen → bewusst geparkt (Backlog) +- Details: `02 Wireframes/P2 Auth/` + `Tickets/Fertige Tickets/D-P2 Auth Wireframes.md` + +### Suche & Dashboard + +#### Dashboard (Startseite) — `D-DASH` (Teil) — ⬜ offen +- [ ] 3 feste Ansichten je Rolle: Chef / Büro / Monteur 📱 (kein freies Umbauen in v1) +- [ ] Bausteine: Zahlen-Kachel, Liste, Trend-Chart — live aktualisiert, pausierbar +- [ ] Nur Filter/Zeitraum je Baustein einstellbar; »zuletzt aktualisiert vor X Min« +- [ ] Dashboard-Wechsler (je nach Rolle) + +#### Suche (Cmd+K) — `D-DASH` (Teil) — ⬜ offen +- [ ] Such-Fenster per Tastenkürzel: Live-Suche, Treffer nach Typ gruppiert, Treffer-Hervorhebung, Pfeiltasten-Bedienung +- [ ] Leer-Zustand mit letzten Suchen +- [ ] Große Such-Seite mit Filter-Leiste (Typ, Datum, Zuständiger, Tags) und Sortierung +- [ ] Zeigt nur Erlaubtes; Hinweis »weitere Treffer, die du nicht siehst« + +### 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) + +#### 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 + +#### Kanban-Board & Pipelines (Projekte) — `D-P8` + `D-KANBAN` — ⬜ offen +- [ ] Kanban-Board: Spalten = Status, Karten ziehen = Status wechseln; Spaltenkopf mit Anzahl + Summe +- [ ] Karten: Titel, Summe (nur für Berechtigte), Avatar, Termin, max. 3 Tags, »hängt fest«-Marker +- [ ] Gewonnen = kurze Bestätigung · Verloren = Grund ist Pflicht +- [ ] Board-Wechsler (Vertrieb / Auftrag / eigene), Filter + »nur meine«, live +- [ ] Projekt-Liste über alle Boards (Filter, CSV) +- [ ] Projekt-Detailseite (klickbare Status-Leiste, Status-Verlauf, Herkunft »kam aus Anfrage X«, Gewonnen/Verloren-Banner mit 24-h-Rückgängig) +- [ ] Board-Einstellungen (Spalten anlegen/sortieren/färben, Zugriff je Rolle, Pflichtfelder + Sichtbarkeit je Feld) +- [ ] Verlust-Gründe verwalten (SHK-Vorlagen vorbefüllt) +- [ ] Zahlen-Grundlage fürs Dashboard (Prognose, Abschlussquoten) — kein eigener Screen +- Merken: Ein Projekt-Datensatz, Boards sind nur Sichten (AD-20). + +### Auftrag & Baustelle + +#### Projekt-Akte (Auftrag) 📱 — `D-P9` — ⬜ offen +- [ ] Reiter am Projekt: Team-Mitglieder / Termine / **Rechnungen (neu)** / Checklisten inkl. Mängel / Aufgaben / Dateien / Abnahmen +- [ ] Rechnung am Projekt (Nummer, Betrag, Status: Entwurf → gestellt → bezahlt/storniert, PDF) +- [ ] Board-Einstellung »Abnahme Pflicht vor Status X« + Auto-Archiv nach N Tagen +- [ ] Abnahme-Formular-Vorlagen (aus dem Formular-Baukasten, SHK-Vorlage vorbefüllt) +- [ ] Projekt-Vorlagen (Standard-Board, Team, Aufgaben, Termine vorbefüllt) +- [ ] Banner »offene Mängel«; Handy-Ansicht (Stammdaten, heutige Aufgaben, Abnahme-Knopf, Foto-Upload) +- v2: Material, Zeiterfassung, Leistungspositionen, KWP. + +#### Plantafel (Einsatzplanung) 📱 — `D-PLAN` — ⬜ offen +- [ ] Planungs-Raster: Zeilen = Mitarbeiter, Spalten = Zeit (Tag/Woche/Monat), Einsätze ziehen/verlängern +- [ ] Klick auf freien Slot = neuer Einsatz; Status-Kette geplant → bestätigt → unterwegs → fertig; mehrere auf einmal umplanen +- [ ] Konflikt-Warnung (doppelt verplant, Urlaub/krank, außerhalb Arbeitszeit) mit »Trotzdem zuweisen?« +- [ ] Kalender-Abgleich-Anzeige je Einsatz +- [ ] Monteur-Handy-Modus »Meine Termine heute« / »Meine Woche« (Adresse + Navi-Link, Status per Tipp, offline) + +#### Abnahme (Baustellen-Protokoll) 📱 — `D-ABN` — ⬜ offen +- [ ] Abnahme-Formular (Datum, Anwesende, Druckprobe, Funktionsprüfung, Zählerstände, übergebene Dokumente, Bemerkungen) +- [ ] Mängel einzeln erfassen, je mit Foto + Einstufung (kritisch/klein/kosmetisch) +- [ ] Mit Mängeln abgenommen → Mängel werden Aufgaben · Abgelehnt → zurück in Ausführung + Meldung an Projektleiter +- [ ] Unterschrift Kunde + Monteur direkt auf dem Gerät +- [ ] PDF + automatische Mail an den Kunden; danach unveränderbar (6 Jahre) +- [ ] Offline ausfüllbar, lädt später hoch; mehrere (Teil-)Abnahmen je Projekt + Übersichts-Liste + +### E-Mail-Marketing + +#### Kampagnen & Empfängerlisten — `D-KAMP` — ⬜ offen +- [ ] Kampagne in 6 Schritten: Absender → Inhalt (Editor, Platzhalter wie {Vorname}, Pflicht-Fußzeile, Desktop-/Handy-Vorschau) → Empfänger → Test-Mail (max. 5) → Zeitpunkt → letzter Check +- [ ] Letzter Check blockiert Versand bei Rot (Domain bestätigt? Abmelde-Link? Impressum? Tageslimit?) +- [ ] Empfänger-Vorschau zeigt, wer rausfällt und warum (abgemeldet, unzustellbar, gesperrt) +- [ ] Empfängerlisten (Segmente): Filter kombinierbar (und/oder), Live-Anzahl, Stichproben-Vorschau, dynamisch oder eingefroren + +#### Versand-Technik & Statistiken 🌐 — `D-P14` — ⬜ offen +- [ ] Eigene Absender-Domain einrichten (DNS-Einträge mit Kopier-Knopf, Status-Ampel, Auto-Prüfung alle 5 Min) +- [ ] Mail-Mitschnitt per BCC (Schalter + angezeigte BCC-Adresse, »Mails erscheinen am Kontakt«) +- [ ] Kampagnen-Übersicht + Statistik-Seite (zugestellt/geöffnet/geklickt/abgemeldet, welche Links geklickt, je Empfänger) +- [ ] Absender-Verwaltung + Sperrliste (mit Grund) +- [ ] Vorlagen-Liste +- [ ] 🌐 Abmelde-Seite (ein Klick, optional Grund, Firmen-Branding) +- v2: echtes Postfach in HiveGrid (Inbox, Antworten). + +### Termine & Formulare + +#### Formulare (Baukasten) 🌐 — `D-FORM` + `D-P16` (Teil) — ⬜ offen +- [ ] Formular-Baukasten: Felder per Ziehen anordnen (12 Feld-Typen), Feld-Einstellungen, Live-Vorschau +- [ ] Wenn-Dann-Logik (»zeige Feld X, wenn Y = Z«) +- [ ] Veröffentlichen + Teilen: Link, QR-Code, Website-Einbettung +- [ ] Nach dem Absenden: Anfrage/Kontakt/Projekt/Aufgabe anlegen, Mail senden, Webhook, Automation starten (mit Feld-Zuordnung) +- [ ] 🌐 Öffentliches Formular (Logik live, Spam-Schutz, Firmen-Logo, alle Zustände) +- [ ] Formular-Liste + Antworten-Übersicht (Tabelle, Filter, CSV, PDF-Export, Aktions-Protokoll mit »nochmal ausführen«) +- [ ] Renderer wiederverwendbar (steckt auch in HR-Anträgen, Buchungs-Fragen, Abnahme-Vorlagen) + +#### Online-Terminbuchung 🌐 — `D-BOOK` + `D-P16` (Teil) — ⬜ offen +- [ ] 🌐 Buchungs-Seite: freien Termin wählen (Zeitzonen-fest) → Fragen-Formular → Bestätigung + Kalender-Datei (.ics); einbettbar +- [ ] Buchung erzeugt Anfrage oder hängt sich an bestehenden Kontakt + Bestätigungs-Mail; kein Doppel-Buchen möglich +- [ ] Intern: Buchungs-Liste (Reiter anstehend/vergangen/storniert, CSV) + Detail (stattgefunden/No-Show, stornieren mit Grund + Auto-Mail, verschieben, anderen Mitarbeiter zuweisen) +- [ ] Buchungsseiten-Editor (Dauer, Puffer, Vorlauf, Mitarbeiter, Fragen-Formular, Bestätigungs-Mail, Einbett-Code) +- [ ] Verfügbarkeits-Zeiten (Wochen-Regeln + Ausnahme-Tage) +- v1: Vergabe nur »erster freier Mitarbeiter«. + +#### Kalender — `D-BOOK` + `D-P16` (Teil) — ⬜ offen +- [ ] Monats-/Wochen-Ansicht mit allen Terminen (Google + Buchungen + Plantafel, je mit Herkunfts-Marker) +- [ ] Google-Kalender verbinden (Kalender auswählen, Richtung des Abgleichs, sauber trennen) +- [ ] Konflikt-Übersicht in Klartext (was kollidierte, wie gelöst) +- [ ] Fremde private Termine nur als »belegt« sichtbar +- v2: Outlook. + +#### Digital unterschreiben (E-Signatur) — `D-P16` (Teil) — ⬜ offen +- [ ] Assistent am Projekt: PDF hochladen → Unterzeichner + Reihenfolge → senden +- [ ] Kunde unterschreibt per Link (mit Code-Bestätigung) oder direkt auf dem Gerät vor Ort +- [ ] Status je Unterzeichner (gesendet/angesehen/unterschrieben/abgelehnt), Erinnerung, Zurückziehen +- [ ] Original-PDF, unterschriebenes PDF + Abschluss-Nachweis herunterladbar +- Eigene Lösung; PandaDoc nur optional mit eigenem Schlüssel. + +### Kommunikation + +#### Team-Chat 📱 — `D-CHAT` — ⬜ offen +- [ ] Channel-Liste (Ungelesen-Zähler, @-Marker, anpinnen/stummschalten, Projekt-Status bei Projekt-Chats) +- [ ] Chat-Verlauf (Antwort-Threads, Emoji-Reaktionen, Anhänge, bearbeitet-Marker, »gelesen von X von Y«) +- [ ] Schreibfeld (Formatierung, Emoji, @-Erwähnung mit Vorschlägen, Anhänge, Entwurf bleibt erhalten), »tippt gerade …« +- [ ] Angepinnte Nachrichten, alle meine Erwähnungen, Suche über alle Channels +- [ ] Neuer Channel / Direktnachricht; Channel-Einstellungen (Mitglieder, archivieren) +- [ ] Projekt-Channels: Team wird automatisch synchron gehalten, Chat erscheint im Projekt +- [ ] Admin-Einsicht in DMs nur mit Pflicht-Begründung + sichtbarem Hinweis-Banner +- [ ] Monteur-Handy-Ansicht (vereinfacht, Foto-Direktupload, Push) + +#### Telefonie (Anrufe) — `D-P15` — ⬜ offen +- [ ] AirCall verbinden (Status-Ampel, Telefon-Nutzer ↔ HiveGrid-Nutzer zuordnen mit Auto-Vorschlag, »Verbindung testen«) +- [ ] Anruf-Liste (Richtung, Dauer, erkannter Kontakt, verpasst-Marker) +- [ ] Anruf-Detail (Zuordnung korrigieren, Notiz, Aufnahme anhören) +- [ ] Anruf-Knopf an Kontakt/Anfrage/Projekt (bei mehreren Nummern: Auswahl; ohne Anbindung: normaler Telefon-Link) +- [ ] Meldung bei eingehendem Anruf; unbekannte Nummer → automatisch neue Anfrage +- v2: HalloPetra (KI-Telefonassistent). + +#### Benachrichtigungen — `D-P3` (Teil) — ⬜ offen +- [ ] Glocke mit Ungelesen-Zähler + Aufklapp-Liste (Klick springt direkt zur Sache) +- [ ] Eigene Seite mit allen Meldungen (Reiter Alle/Ungelesen, als gelesen markieren, aufräumen) +- [ ] Einstellungen: je Ereignis-Typ wählbar In-App und/oder E-Mail, Master-Schalter »alle E-Mails aus« +- [ ] Klartext-Hinweis, wenn Mails nicht ankommen +- v2: Ruhezeiten, Zusammenfassen, Push. + +### Aufgaben & Dateien + +#### Aufgaben — `D-P4` (Teil) — ⬜ offen +- [ ] Aufgaben-Liste (Meine / von mir erstellt / Alle, Filter, Mehrfach-Aktionen, Schnell-Aktionen in der Zeile) +- [ ] Aufgabe: Frist (überfällig = rot), Priorität, zuständig Person ODER Gruppe, Beobachter, Verknüpfung zu Kontakt/Projekt/… +- [ ] Herkunft sichtbar: von Hand / aus Chat / aus Formular / aus Automation — mit Link zur Quelle +- [ ] Neue Aufgabe als Dialog (auch vorbefüllt aus einer Detailseite heraus) +- [ ] Als Reiter in jeder Detailseite eingebettet (»Aufgabe anlegen« direkt dort) +- [ ] Erinnerungs-Hinweise (vor / bei / nach Frist), Auto-Archiv nach 30 Tagen + +#### Dateien — `D-P4` (Teil) — ⬜ offen +- [ ] Datei-Übersicht (Tabelle/Kacheln, Filter nach Verknüpfung/Typ/Tags, Mehrfach-Aktionen inkl. ZIP-Download) +- [ ] Upload per Drag&Drop (mehrere gleichzeitig, Fortschritt je Datei, Fehler + erneut versuchen) +- [ ] Datei-Detail (Vorschau Bild/PDF, iPhone-Fotos werden automatisch JPG, Tags, Notizen, Verknüpfungen mit Rolle) +- [ ] Als vorgefilterte Sektion in jeder Detailseite eingebettet +- v2: Datei-Versionen, Office-/Video-Vorschau, Texterkennung. + +### Automationen + +#### Automations-Baukasten (Flow-Editor) — `D-FLOW` — ⬜ offen +- [ ] Zeichenfläche: Bausteine setzen, verbinden, verschieben, duplizieren; rückgängig/wiederholen; Mini-Übersichtskarte; automatisch anordnen +- [ ] Baustein-Katalog nach Modul: Auslöser (neue Anfrage, Status-Wechsel, Formular, Buchung, Zeitplan, Webhook …) + Aktionen (Aufgabe, Mail, Benachrichtigung, Wenn-Dann, Warten, Schleife, HTTP) +- [ ] Einstellungs-Panel je Baustein, alles in verständlichem Deutsch, mit Fehler-Hinweisen (nicht verbunden, unvollständig) +- [ ] Probelauf-Vorschau: »trifft X Datensätze« + Beispiele — ab Schwelle Pflicht-Bestätigung vor dem Aktivieren +- [ ] Schleifen-Warnung mit Abhängigkeits-Bild + »Beheben«-Knopf; Auto-Pause bei Anomalien +- Sprach-Eingabe → gestrichen (keine KI in v1). **Aufwendigste UI der App, früh anfangen.** + +#### Automationen: Übersicht & Verläufe — `D-P12` — ⬜ offen +- [ ] Liste aller Automationen (aktiv/pausiert/Entwurf, Läufe der letzten 30 Tage, »nur meine«) +- [ ] Lauf-Liste + Lauf-Detail: Schritt für Schritt in Klartext (was, womit, wie lange, Ergebnis) +- [ ] 24 h rückgängig (Countdown-Knopf), fehlgeschlagenen Schritt neu anstoßen, ab Schritt X fortsetzen +- [ ] Vorlagen-Katalog (SHK-Vorlagen + eigene aus bestehender Automation erstellen) +- [ ] Baustein-Einstellungs-Inhalte (werden im Flow-Editor eingeblendet) + +### HR + +#### HR-Bereich 📱 — `D-HR` — ⬜ offen +- [ ] HR-Startseite (angepinnte Ankündigungen, offene Pflichten, meine Anträge, wer ist heute da, Geburtstage, Schnell-Knöpfe »krank melden / Urlaub beantragen«) +- [ ] Ankündigungen (Bestätigungs-Knopf + Lese-Nachweis, Reaktionen, Kommentare) + Verwaltung +- [ ] Urlaub & Krankmeldung (Reiter Meine/Genehmigungen/Team, Genehmigen mit Konflikt-Hinweis aus der Plantafel, Krankschreibung verschlüsselt hochladen, Monats-Kalender für Admin) +- [ ] Lohnabrechnungen (eigene ansehen; Admin: Sammel-Upload mit automatischer Zuordnungs-Vorschau) +- [ ] Anträge (Spesen, Hardware, Schulung, Zeugnis … mit Genehmiger und Kommentaren) + Vorlagen-Verwaltung +- [ ] Passwort-Safe (Werte nie offen sichtbar, Aufdecken wird protokolliert, Kopieren löscht sich nach 30 s) +- [ ] Umfragen (Teilnahme + Auswertung, anonym möglich) +- [ ] Mitarbeiter-Verzeichnis + Profil, Standorte, eigene Dokumente, Upload-Erinnerungen +- Wichtig: Mitarbeiter-Sicht und HR-Verwaltung strikt getrennt; Urlaub/krank fließt in die Plantafel. + +### Verwaltung + +#### Integrationen (Apps verbinden) — `D-P5` — ⬜ offen +- [ ] App-Katalog (nach Kategorie, Logo, Status-Ampel, aktive Verbindungen) +- [ ] Verbindung einrichten: Schritt-für-Schritt (Voraussetzungen → Zugangsdaten → Test → erster Abgleich) +- [ ] Verbindungs-Verwaltung (mehrere je App, neu verbinden, trennen mit Nachfrage) +- [ ] Abgleich-Verlauf in Klartext (»32 Kontakte aktualisiert, 2 Fehler«) mit Detail-Ansicht +- [ ] Zustands-Ampel (läuft / hakt / kaputt / getrennt) mit Lösungs-Hinweisen +- Gemeinsames Gerüst für: E-Mail, Telefonie, Kalender, Signatur. KWP-Oberfläche → v2. + +#### Aktivitäts-Protokoll (Audit-Log) — `D-P3` (Teil) — ⬜ offen +- [ ] Protokoll-Liste: wer (Mensch/Automation/Agent/Admin), wann, was — als deutscher Klartext-Satz, mit Filtern +- [ ] Detail-Ansicht mit Vorher/Nachher-Vergleich Feld für Feld +- [ ] Export mit Pflicht-Angabe des Zwecks (Jobs mit Status + Download) +- [ ] »Verlauf dieses Objekts« als einblendbare Leiste an jeder Detailseite +- v2: Aufbewahrungs-Regeln, gespeicherte Ansichten. + +#### Abo & Rechnungen (für HiveGrid) — `D-P20` (Teil) — ⚠️ Ticket braucht Recut (AD-27) +- [ ] Abo-Übersicht nur lesend (Plan, Plätze, gebuchte Module, Test-Countdown) +- [ ] Verbrauchs-Balken (Automations-Läufe, Speicher) — Transparenz, keine Abrechnung nach Verbrauch +- [ ] Rechnungen + Zahlungsstatus mit Klartext-Hilfe bei Problemen +- ⚠️ Erst planen, wenn der Brief nach dem Billing-Umbau neu geschnitten ist. Kein Selbst-Upgrade in v1. + +#### Erste Schritte & Demo-Daten — `D-P20` (Teil) — ⬜ offen +- [ ] Erste-Schritte-Checkliste (Status wird automatisch erkannt, Direkt-Link je Punkt, abhakbar, ausblendbar, auch als Dashboard-Kachel) +- [ ] Beispieldaten: Knopf »anlegen« (mit Liste, was kommt), Zähler, alles wieder löschbar, »Demo ausblenden«-Filter in allen Listen +- [ ] Warn-Banner (Test läuft ab / Zahlung offen / eingefroren) + Hinweis-Toast bei gesperrtem Schreiben +- [ ] Hell/Dunkel-Umschalter (sofort, ohne Aufblitzen) + +#### Datenschutz (Export & Löschung) — `D-P21` (Teil) — ⬜ offen +- [ ] Datenschutz-Übersicht als Einstieg +- [ ] Daten-Export als ZIP (einzelner Nutzer + ganzer Workspace, Fortschritt, Download-Link 72 h gültig) +- [ ] Workspace-Löschung mehrstufig (Erklärung mit 30 Tagen Schonfrist, Export-Angebot, Passwort + 2FA, Workspace-Name als Bestätigung, Countdown mit Abbruch) +- [ ] Konto-Löschung (mehrstufig, 24 h rückgängig) +- [ ] Liste der Unterauftragsverarbeiter (EU-Marker, Vertrags-Links, Export) + AVV (PDF, Zustimmungs-Verlauf) +- Auskunftsanfragen: manuelle Anleitung statt Assistent (v2). + +#### Feedback & Hilfe — `D-P21` (Teil) — ⬜ offen +- [ ] Schwebender Feedback-Knopf → kleines Formular (Fehler/Idee/Frage, Text, optional Screenshot) +- [ ] Landet in der Support-Inbox im Plattform-Admin +- [ ] Kleine FAQ-Seite (gruppierte Fragen, optional Suchfeld) + +### Plattform-Admin + +#### Plattform-Admin — `D-ADMIN` — ⬜ offen +- [ ] Eigener Login auf admin.hivegrid.de (2FA Pflicht, kein Magic-Link) +- [ ] Übersicht: Kunden, aktive Nutzer, Umsatz, System-Ampel, Warteschlangen +- [ ] Kunden-Liste + Kunden-Akte (Status ändern mit Pflicht-Begründung, **Module freischalten = Abo-Baukasten**, Test verlängern, Notizen, »als Kunde einloggen« max. 30 Min mit Begründung + sichtbarem Banner) +- [ ] Kunde von Hand anlegen +- [ ] Nutzer-Hilfen (2FA zurücksetzen, Sitzungen beenden, deaktivieren) +- [ ] Abo-Verwaltung (Sonderpreise mit Begründung, Abgleich anstoßen, Erstattung) +- [ ] Feature-Schalter (je Plan, je Kunde mit Ablaufdatum) +- [ ] System-Zustand + Warteschlangen-Monitor (hängende Jobs neu anstoßen, pausieren) +- [ ] Support-Inbox (gespeist vom Feedback-Knopf) + Ticket-Detail +- [ ] Admin-Protokoll (über alle Kunden, nur lesend, Export) +- [ ] Unterauftragsverarbeiter + AVV-Versionen pflegen (Betreiber-Seite) +- Eigene Welt, eigene Sidebar. Muss funktionieren, nicht hübsch sein. v2: eigenes Admin-Rollensystem. + +--- + +## Offene globale Punkte + +| # | Punkt | Status | +|---|---|---| +| 1 | Dashboard: nur 3 Rollen-Ansichten beschlossen (Spec nennt 7) — Rest v2 oder nachschieben? | offen (Raffael) | +| 2 | Benachrichtigungs-Test-Knopf für Admins (Mini-Feature für Demos) — drin lassen? | offen | +| 3 | »Abo & Rechnungen«-Brief nach Billing-Umbau (AD-27) neu schneiden | offen | +| 4 | D-D0a (App-Gerüst) offiziell abschließen? Layout-Standards sind validiert, das Shell-Ticket steht noch auf »geplant« | offen (David) | diff --git a/skills-lock.json b/skills-lock.json new file mode 100644 index 00000000..0bef4ee0 --- /dev/null +++ b/skills-lock.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "skills": { + "json-canvas": { + "source": "kepano/obsidian-skills", + "sourceType": "github", + "skillPath": "skills/json-canvas/SKILL.md", + "computedHash": "56cbac74a93e4fba97f4d44bccfdeaae89e545b223f47df392c7705e01e6c543" + } + } +}