# Post 6 · Team-Chat Fünfter Beitrag der Produktreihe, Termin **Mi 26.08.** laut Redaktionsplan (von Mo 24.08. verschoben). Stichwort dort: „Ein Kanal pro Projekt, Foto rein, Aufgabe raus." Hell, Theme `modern`, Punktgrund, Text zentriert — dieselbe Anlage wie Post 4 und 5. Datei `post6.html`, Stand in `state/post6.json`, erreichbar über das Projektmenü jeder Seite und über `uebersicht.html`. **Vier Slides.** Fünf waren erlaubt; der fünfte Punkt wäre DSGVO und deutsche Server gewesen, und dafür gibt es keinen Bildschirm. Er steht in der Bildunterschrift, wo eine Aussage ohne Bild hingehört. --- ## 1. Die vier Slides | # | Tag | Überschrift | Was zu sehen ist | |---|---|---|---| | 1 | Team-Chat | Büro und Baustelle, **endlich im selben Chat.** | Kanalliste und Verlauf nebeneinander, mit Filterzeile und Eingabefeld | | 2 | Die Kanäle | Ein Kanal **pro Projekt.** | Die Chatliste groß: Projektkanäle, Direktnachrichten, Gruppe | | 3 | Die Aufgabe | Foto rein, **Aufgabe raus.** | Baustellenfotos, die Aufgabe daraus, die Bestätigung im Projekt | | 4 | Das Pluszeichen | Nicht nur **Text.** | Das Menü hinter dem Plus im Eingabefeld | **Slide 3 ist der Kern.** Der Redaktionsplan verlangt „Foto rein, Aufgabe raus", und genau das liegt im Werkzeug als Abfolge vor: Tobias schickt die Baustellenfotos, darauf folgt eine Nachricht mit angehängter Aufgabe, darauf eine Systemzeile „Aufgabe „Materialliste prüfen" im Projekt erstellt". Die letzte Zeile macht den Unterschied: die Aufgabe liegt danach im Projekt und nicht nur im Verlauf. Slide 1 trägt den ganzen Chat, weil sie im Profilraster eine Kachel von rund 150 px ist. Dort ist kein Wort lesbar; was ankommt, sind zwei Spalten mit Blasen. --- ## 2. Die Bildunterschrift ``` Im Handwerk läuft die halbe Baustelle über WhatsApp. Das Foto von letzter Woche findet trotzdem keiner wieder. In HiveGrid hat jedes Projekt seinen eigenen Kanal, mit Projektnummer. Daneben stehen Direktnachrichten und Gruppen, aber eben nicht alles in einem Verlauf. Ein Foto von der Baustelle geht rein, alle sehen es sofort. Aus „mach das mal“ wird mit einem Klick eine echte Aufgabe: mit Frist, mit Namen, im Projekt. Dokument, Sprachnachricht, Kontakt, Termin. Was sonst im Chat-Verlauf verschwindet, hängt hier am Projekt. Kundendaten gehören nicht in eine WhatsApp-Gruppe. Bei HiveGrid liegen sie verschlüsselt auf deutschen Servern. #handwerk #shk #handwerksbetrieb #digitalisierungimhandwerk #teamchat #baustelle #kommunikation #hivegrid ``` | Vorgabe | Ist | |---|---| | Haken in den ersten 125 Zeichen | erster Absatz, 110 | | 300 bis 800 Zeichen | 644 | | 5 bis 10 Hashtags, unten abgesetzt | 8 | | Suchwörter zusätzlich im Fließtext | Handwerk, Baustelle, Projekt, Kanal, Aufgabe, Chat, Kontakt, Termin | Der letzte Absatz steht **wörtlich** so als Merkmal „DSGVO-konform" in `lib/produkt-daten.ts` der Website. „Aus „mach das mal" wird mit einem Klick eine echte Aufgabe" ebenfalls, als Merkmal „Aufgaben-Integration". --- ## 3. Woher die Angaben kommen Quelle ist `components/general/GeneralTeamChatPage.tsx` aus dem Pitch-Paket (*fertig bombo · Kundentermin 30.07.2026*). | Was | Woher | |---|---| | Alle acht Kanäle: Titel, Vorschau, Zeit, Zuordnung, Nadel, Ungelesen | `CHATS`, wörtlich | | Der Verlauf: Autoren, Texte, Zeiten, Anhänge | `INITIAL_MESSAGES.waermepumpe`, wörtlich | | Aufbau einer Listenzeile (drei Zeilen) | die Zeilen 170 bis 172 der Quelle | | Aufbau einer Nachricht, Anhangkarte, Systemzeile | `MessageBubble` und `AttachmentCard` | | Sinnbild je Kanalsorte (Koffer, Personen, Kürzel) | `ChatAvatar` | | Kopfzeile „P-2026-0042 · 8 Mitglieder · aktiv" | `ChatHeader` | | Filterzeile Alle / Projekte / Direkt / Ungelesen | der Typ `ChatFilter` | | Das Menü hinter dem Plus, samt Trenner | `Composer` | | Eingabefeld „Nachricht schreiben …" | derselbe Ort | | Farben, Ränder, Plättchentöne | `ui/theme.css` | | Alle Symbole | `@subframe/core`, Pfade aus dem Paket kopiert | | „Büro und Baustelle, endlich im selben Chat." | Überschrift in `lib/produkt-daten.ts` | **Vom Chat gibt es nur eine Fassung.** Anders als bei der Pipeline, die mit Board, Liste, Detail und Schablone vier eigene SHK-Bildschirme hat, liegt der Chat allein unter `/allgemein/team-chat`. Die Inhalte darin sind trotzdem aus dem Gewerk: Wärmepumpe Müller, Montagetermin, Baustellenfotos. --- ## 4. Wo bewusst abgewichen wird **Slide 1 zeigt drei von sechs Nachrichten, Slide 2 fünf von acht Kanälen.** Was nicht ins Bild passt, fällt weg; ein Chat und eine Liste scrollen beide. Slide 2 behält alle drei Sorten: Projektkanal, Direktnachricht, Gruppe. **Die Bildergalerie ist eine Anhangkarte, kein Bild.** Im Werkzeug zeigt `GalleryPreview` zwei Fotos, geladen von Unsplash. Fremde Fotos in einen Beitrag zu setzen, der von der eigenen Baustelle spricht, wäre eine Behauptung über Material, das wir nicht haben. Stattdessen steht dort die Karte „2 Baustellenfotos · Galerie · heute" — der Text ist der der Quelle. --- ## 5. Stand der Dinge | | | |---|---| | Slides | 4 | | Format | 1080 × 1350, Ausgabe zweifach: 2160 × 2700 | | Luft zwischen Text und Zeichnung | 102 / 61 / 254 / 141 px (Grenze 40) | | Zeichnung ragt über die Seite | nein, alle innerhalb der 92-px-Schutzzone | | Breiteste Überschriftzeile | 818 px von 896 | | Stylesheet vollständig | 214 Regeln, `[data-edit]` vorhanden | | Konsole | keine Fehler | | Ausgabeweg | geprüft, `01-chat-hell.png` bis `04-menue-hell.png` | Geprüft wird mit den Hilfsskripten aus dem Sitzungsordner: `pruef.mjs` misst über `getBBox()` die tatsächlich gezeichnete Fläche je Slide und die Breite jeder Überschriftzeile, zählt die Regeln im Stylesheet und liest die Konsole mit; `schuss.mjs` rendert einzelne Slides; `export.mjs` fährt den echten Ausgabeweg und fängt `/save` ab. --- ## 6. Drei Fallen aus diesem Bau **Die Listenzeile hat drei Zeilen, nicht zwei.** Der erste Anlauf setzte Titel und Vorschau untereinander und schob Nadel und Ungelesen-Punkt rechts neben die Vorschau. Dort stießen sie an den Text — und die Zuordnung fehlte ganz. Im Original steht sie als dritte Zeile: `P-2026-0042` links, die Nadel rechts. Das war nicht nur ein Layoutfehler: der Fließtext behauptete „Jeder Kanal hängt an seiner Projektnummer", und die Nummer war nirgends zu sehen. **Eine feste Obergrenze für die Blasenbreite hat ein Zitat gekürzt.** Für die Titelslide musste sie klein sein, damit die Unterhaltung neben die Liste passt. Auf Slide 3 stand deshalb „Materialliste prüfen · fälli…" statt „… · fällig 31.07.2026". Die Grenze hängt jetzt an der Spalte, in der die Blase steht. **Beinahe hätte ich ein Zitat ohne Grund gekürzt.** Die Website-Überschrift lautet „Büro und Baustelle, endlich im selben Chat." Ich hatte das „endlich" gestrichen mit der Begründung, die Zeile laufe sonst über die Schutzzone, und diese Begründung sogar mit einer Zahl versehen, die ich nicht gemessen hatte. Nachgemessen sind es 818 px von 896 erlaubten: sie passt. Das Wort ist wieder drin. Dafür gibt es jetzt `breite.mjs`, das eine Formulierung misst, bevor sie in die Datei kommt. **Das Prüfskript nahm eine leere Slide auf.** `schuss.mjs` stellte für eine einzelne Slide ein Fenster von 1400 px. Im durchgehenden Blatt liegt Seite 3 aber bei x = 2160, und `captureBeyondViewport` fing das nicht zuverlässig ab. Die Bühne steht jetzt immer auf 7000 px.