12 Commits
Author SHA1 Message Date
dejanandClaude Opus 5.5 07deacde41 Post 9: Varianten überarbeitet, Variante 6 und 7 nach Noahs Arbeitsheft
- Variante 2/3: Webinar statt HiveGrid, Noahs Satz zum Kopf des Chefs,
  vorher und heute am Beispiel „Angebot nachfassen“ als Schema
- Variante 4/5: drei verschiedene Grafiken, Wabenanimation gelb dann rot,
  Titel mit Wabenwelle animiert
- Variante 6/7: Aussagen, Zeichnungen und Schriften aus „Jede Frage lief
  über meinen Tisch“, Titel dunkel, Pfeile werden gezeichnet (Test)
- post9-hub.mjs legt alle Varianten als Bilder und Videos ins Marketing-Hub
- Menüs aller Posts und Übersicht mit Variante 6 und 7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 21:51:51 +01:00
dejanandClaude Opus 5.5 5b768537a2 Post 9: Format 1:1 für die Anzeige und vier neue Varianten
- Format-Schalter 4:5 / 1:1 in Post 9, Stand auf 1:1 (Meta nimmt ein
  Carousel mit Video als Anzeige nur quadratisch), Video in 1:1
- animation.mjs baut das Format der Seite, Datei mit -1x1
- Variante 2/3: Kundengeschichte nach dem weclapp-Karussell, hell und dunkel
- Variante 4/5: Zahlen-Karussell nach HERO Insights mit KfW- und
  Bitkom-Zahlen, Noah als Teaser, hell und dunkel
- post9-varianten.html zeigt alle Varianten untereinander
- Menüs und Übersicht um die Varianten ergänzt, Regel zu 1:1 in rules.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 18:55:03 +01:00
dejanandClaude Opus 5.5 76ac3e4cce Pruefung der Texte: weniger Ausnahmen, Geviertstriche, Navigation bis Post 9
ae/oe/ue gilt hinter einem Vokal nicht mehr als fehlender Umlaut, Mailadressen
und Domains sind ausgenommen, Geviertstriche werden gemeldet. Das Menue nennt
Post 8 und Post 9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 15:55:49 +02:00
dejanandClaude Opus 5 4d227a01c9 Post 7: Form Builder, mit dem Bewegtbild als Titelelement
Anders als die Beitraege davor: das Bewegtbild ist das ERSTE Element im
Carousel und kein Anhang am Ende. Ein Form Builder ist ein Werkzeug, das
man bedient -- was er kann, sieht man am Bauen und nicht an einem
Standbild davon. Die drei Slides erklaeren danach, was das Gebaute
leistet, und tragen deshalb alle Ueberschrift und Fliesstext.

  animForm   Das Formular baust du selbst.       6 s, der Editor beim Bauen
  1          Frag genau das, was du wissen musst. die fuenf Fragen mit ihren Typen
  2          Fragen, die nur kommen, wenn sie
             noetig sind.                         das bedingte Feld
  3          Aus der Antwort wird ein Lead.       das Hinweisfeld mit Pipeline

Zwei Folgen davon, die man wissen muss: die Kachel im Profilraster ist
jetzt das erste Bild der Animation und nicht mehr eine eigens dafuer
gebaute Slide -- Bild 0 zeigt deshalb schon ein Formular mit zwei Fragen
und keine leere Flaeche. Und die Ueberschrift des Bewegtbilds ist die
Ueberschrift des Beitrags.

QUELLE
S02EinfacherFragenEditor.tsx aus dem Pitch-Paket, derselbe Bildschirm wie
assets/screens/form-builder.png. Die fuenf Fragen, ihre Feldtypen, die
Marke "Bedingt sichtbar" und der Satz im Hinweisfeld stehen woertlich
dort. Die Farben des Hinweisfelds sind ueber die Token-Kette aufgeloest
(surface-feedback-subtle-information -> feedback-information-100 ->
ocean-100 = #E1F4FD), nicht aus dem Bild geschaetzt. Elf zusaetzliche
Zeichen aus demselben Phosphor-bold-Satz.

ABWEICHUNGEN, ALLE DOKUMENTIERT
Die Quelle schreibt {general ? "Website-Anfragen" : "Vertrieb SHK"} --
hier steht Vertrieb SHK, weil der Beitrag durchgehend das Gewerk zeigt.
"Sanitaer" und "Klima / Lueftung" stehen mit Umlaut. "Deaktivieren" ist
weg, weil ein Ausschalter nichts zur Aussage beitraegt und dem
Pipeline-Satz den Platz nahm.

DREI SACHEN, DIE ERST AM GERENDERTEN BLATT AUFFIELEN
Die Karte wuchs und schrumpfte zugleich: der Kasten wurde mit dem Inhalt
hoeher, und bei fester Breite skaliert die Zeichnung dabei kleiner. Die
Animation hat jetzt eine feste Kastenhoehe.

Der Pipeline-Satz lief unter den Knopf und endete bei "Vertrieb S".
Jetzt zweizeilig statt gekuerzt -- der Pipelinename ist die halbe
Aussage des Felds.

Eine Ueberschrift mass 936 px und lief 45 px ueber die Schutzzone. Am
gerenderten Bild nachgemessen, nicht geschaetzt; die kuerzere Fassung
liegt bei 846.

Erreichbar ueber die Toolbar in allen Projekten und in uebersicht.html.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
2026-09-01 19:46:34 +02:00
dejanandClaude Opus 5 344645cb77 Umlaute: der Export prueft sie, statt sich aufs Erinnern zu verlassen
Auf einer Slide stand "Sanitaer" und "Klima / Lueftung". Beides kam
woertlich aus dem Klickdummy, wo es schludrig eingetippt ist, und beides
las sich im fertigen Beitrag wie ein Fehler -- weil es einer ist.
Gefunden hat es niemand beim Bauen, sondern jemand, der auf den fertigen
Post geschaut hat.

Ein reines Muster genuegt als Pruefung nicht: Deutsch schreibt "neue",
"Dauer" und "Michael" voellig zu Recht mit ae/oe/ue. Nachgezaehlt ueber
den gezeichneten Text aller sieben Projekte sind es aber nur acht solche
Woerter, alle davon richtig oder gewollt (die Kanal-Handles). Also
Muster plus kurze Ausnahmeliste -- null Fehlalarme, "Sanitaer" faellt
trotzdem auf.

Bei ss ist es umgekehrt: 15 Treffer im gezeichneten Text, alle richtig
(dass, Schluss, Netzanschluss). Deshalb dort eine Liste der wenigen
Woerter, die ein scharfes s brauchen, statt eines Musters.

Geprueft wird an zwei Stellen, weil es zwei Wege zum fertigen Bild gibt:

  renderSlide()   bricht ab, bevor ein PNG entsteht
  animation.mjs   an 24 Stellen ueber den Ablauf

Der zweite Punkt war ein eigener Fehler: der erste Anlauf prueft nur den
Anfangszustand und fand nichts, weil die falschen Woerter dort erst ab
t = 0,4 erscheinen. Der Text einer Animation aendert sich mit der Zeit,
die Pruefung muss es auch.

Beide Tore sind mit absichtlich wieder eingebautem "Sanitaer" scheitern
gesehen worden. Eine Pruefung, die man nie hat scheitern sehen, ist
keine -- der erste Test lief durch, weil mein Testskript htmlToImage
direkt aufruft und renderSlide dabei umgeht.

Regel und Begruendung stehen in rules.md 4, die Falle in 8.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
2026-09-01 19:45:08 +02:00
dejanandClaude Opus 5 77734b6da2 Server: Assets werden nachgefragt statt jedes Mal neu geladen
Auf allem stand no-store -- im Server und noch einmal in preloadAssets().
Der Browser durfte also nichts behalten, und jeder Reload lud die vollen
Assets neu: 3 MB Screenshots, 3,3 MB Mockups, Schriften, Bibliotheken.

Am schlimmsten in uebersicht.html. Die laedt die sechs Projekte als
iframes, und weil keiner etwas behalten durfte, holte sich jeder iframe
dieselben Dateien noch einmal: 38,1 MB in 435 Anfragen.

  uebersicht.html erster Aufruf   38,1 MB  ->  2,2 MB
  uebersicht.html Reload          32,8 MB  ->  1,9 MB
  post6.html Reload                5,4 MB  ->  0,3 MB

Die Absicht hinter no-store war richtig: ein Bild, das unter demselben
Namen ausgetauscht wird, muss sofort ankommen. no-cache leistet das
billiger -- der Browser behaelt seine Kopie, fragt aber vor jeder
Benutzung nach. Nachgeprueft: unveraendert antwortet der Server mit 304
und 0 Bytes, nach einem touch mit 200 und der vollen Datei.

Seite, Stand und Auskuenfte (/bilder, /state) bleiben bei no-store. Die
sind klein und duerfen nie aus einer Kopie kommen.

Die eine Zeile stand in allen sieben Projektdateien.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
2026-08-29 16:31:25 +02:00
dejanandClaude Opus 5 7fb1c3dfcb Vorschau: der Abspielen-Knopf tat beim ersten Klick nichts
animAbspielen rechnete performance.now() - ANIM_T[i] * dauer, damit die
Vorschau dort weiterlaeuft, wo der Regler steht. ANIM_T[i] ist aber undefined,
solange der Regler nie bewegt wurde: daraus wird NaN, der Fortschritt wird
NaN, und animT() liefert wegen seines eigenen "|| 0" brav wieder 0. Die
Vorschau stand still, ohne dass in der Konsole etwas auftauchte.

Bemerkt wurde es nicht, weil jede Pruefung vorher animSetzen() aufgerufen
hatte, um irgendetwas zu messen -- und damit genau den Zustand herstellte, in
dem es funktioniert. Ein Pruefskript, das den Anfangszustand anfasst, prueft
ihn nicht mehr.

animSetzen weist NaN jetzt zusaetzlich mit Number.isFinite ab, damit so ein
Wert gar nicht erst in den Stand kommt. In allen sechs Projekten nachgezogen.

Der Export war davon nicht betroffen; der Weg ueber POST /anim ist noch einmal
vom Knopf bis zur fertigen Datei durchgefahren worden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 16:21:46 +02:00
dejanandClaude Opus 5 82913d78b8 Animation: die Leiste laesst sich zuklappen
Ein Klick auf den Kopf klappt sie zu, dann bleiben 40 px und der Canvas hat
den Platz. Sie ist dafuer ein <details> mit dem Kopf als <summary> -- damit
ist die ganze Zeile die Trefferflaeche und die Tastaturbedienung kommt von
selbst, statt dass ein eigener Knopf eine zweite Flaeche fuer dieselbe Sache
aufmacht.

Ob sie offen ist, merkt sich der Browser je Projekt im localStorage und nicht
der Projektstand: das ist eine Vorliebe und keine Gestaltung, in
state/<projekt>.json wuerde sie bei jedem einen Diff machen.

In allen sechs Projekten nachgezogen. Im Streifenmodus faellt sie weiterhin
ganz weg, die Uebersicht zeigt alle sieben Rahmen unveraendert, und der
Bildexport laeuft wie vorher.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 14:22:46 +02:00
dejanandClaude Opus 5 c7c05a85cc Animation: eigener Bereich unter dem Canvas, getrennt vom Bildexport
Jedes Projekt hat jetzt unter dem Canvas einen Bereich "Animation", im selben
Fenster. Er zeigt jede Animation als echtes Blatt in Vorschau, mit Zeitregler,
Abspielen und "MP4 exportieren".

Eine Animation ist keine Slide. Sie steht in ANIMS und nicht in SLIDES, liegt
also nicht im Streifen, taucht in der Slide-Auswahl nicht auf und wird vom
Bildexport nicht angefasst. Im Carousel ist sie ein eigenes Element, und ob
sie mitkommt, entscheidet sich beim Posten. Ein erster Anlauf machte sie zur
sechsten Slide; damit war sie in der Zaehlung und im ZIP mit drin.

Der Export laeuft ueber den neuen Endpunkt POST /anim in serve.py. Er startet
animation.mjs in einem eigenen Faden, die Seite fragt den Stand ueber
GET /anim?id= ab und zeigt Fortschritt und Pfad. Ein Browser kann kein MP4
schreiben, und eine offene Anfrage ueber zwei Minuten geht nicht -- zumal sich
animation.mjs waehrenddessen selbst Seiten von diesem Server holt.

Aufgenommen wird im neuen Modus ?nur=anim&k=<key>: dort zeigt die Seite allein
das Blatt der Animation, in 1080 x 1350 an 0,0. Damit entfaellt jede
Ausschnittsrechnung und mit ihr die Falle, dass ein zu schmales Fenster ein
leeres Bild liefert.

Als erstes Beispiel post6-animChat, fuenf Sekunden: die Antwort wird Zeichen
fuer Zeichen getippt, abgeschickt, waechst als Blase in den Verlauf, die
Aufgabenkarte klappt auf, die Systemzeile bestaetigt, alles blendet zurueck
auf den Anfang. Getippt wird VERLAUF[3].text, also die Nachricht, die im
Werkzeug an dieser Stelle ohnehin folgt.

H.264 High, yuv420p, 1080 x 1350, 30 fps, stumme AAC-Spur, +faststart: das
nimmt Instagram fuer ein animiertes Element im Carousel an. GIF nicht, das
landet als Standbild. Ein Video im Carousel wird auch kein Reel, das passiert
nur bei einem einzeln geposteten Video.

Nebenbei:
- post4, post5 und post6 trugen im Panel noch den Kopf ihrer Vorlage.
- video/README.md und video/bauen.mjs behaupteten, ffmpeg sei hier nicht
  installiert. Stimmt seit 9.0.1 nicht mehr; die Bildsequenz bleibt dort
  trotzdem, mit Begruendung.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-25 17:58:29 +02:00
dejanandClaude Opus 5 7723e5bf5a Post 6: der Team-Chat, aus der Nachricht wird die Aufgabe
Nummer 5 im Redaktionsplan, erscheint Mi 26.08. Carousel, vier Slides,
Theme modern, Variante hell, Punktgrund.

DER BEITRAG
  1  Bueero und Baustelle, endlich im selben Chat.  Liste und Verlauf
  2  Ein Kanal pro Projekt.                         die Chatliste gross
  3  Foto rein, Aufgabe raus.                       Fotos, Aufgabe, Bestaetigung
  4  Nicht nur Text.                                das Menue hinterm Plus

Slide 3 ist der Kern und keine Konstruktion: im Werkzeug folgen die drei
Nachrichten genau so aufeinander. Tobias schickt die Baustellenfotos, darauf
eine Nachricht mit angehaengter Aufgabe, darauf die Systemzeile
"Aufgabe Materialliste pruefen im Projekt erstellt". Die letzte Zeile macht
den Unterschied -- die Aufgabe liegt danach im Projekt, nicht nur im Verlauf.
Das ist woertlich der Auftrag des Redaktionsplans.

Vier Slides statt fuenf. Der fuenfte Punkt waere DSGVO und deutsche Server
gewesen, und dafuer gibt es keinen Bildschirm. Eine Behauptung ohne Bild
gehoert in die Bildunterschrift, dort steht sie woertlich wie auf der Website.

WOHER ES KOMMT
Alles aus components/general/GeneralTeamChatPage.tsx des Pitch-Pakets: die
acht Kanaele aus CHATS, der Verlauf aus INITIAL_MESSAGES, der Aufbau einer
Zeile und einer Blase aus der Quelle selbst, die Filterzeile aus dem Typ
ChatFilter, das Plus-Menue aus Composer. Symbole aus @subframe/core, Farben
aus ui/theme.css.

Vom Chat gibt es nur eine Fassung, unter /allgemein/team-chat -- anders als
bei der Pipeline mit ihren vier eigenen SHK-Bildschirmen. Die Inhalte darin
sind trotzdem aus dem Gewerk: Waermepumpe Mueller, Montagetermin,
Baustellenfotos.

WO BEWUSST ABGEWICHEN WIRD
- Slide 1 zeigt drei von sechs Nachrichten, Slide 2 fuenf von acht Kanaelen.
  Ein Chat und eine Liste scrollen beide. Slide 2 behaelt alle drei Sorten:
  Projektkanal, Direktnachricht, Gruppe.
- Die Bildergalerie ist eine Anhangkarte, kein Bild. Im Werkzeug laedt
  GalleryPreview zwei Fotos von Unsplash. Fremde Fotos in einen Beitrag zu
  setzen, der von der eigenen Baustelle spricht, waere eine Behauptung ueber
  Material, das wir nicht haben.

DREI FALLEN
Die Listenzeile hat drei Zeilen, nicht zwei. Der erste Nachbau schob Nadel
und Ungelesen-Punkt neben die Vorschau, wo sie an den Text stiessen -- und
die Zuordnung fehlte ganz. Das war nicht nur Layout: der Fliesstext
behauptete "Jeder Kanal haengt an seiner Projektnummer", und die Nummer war
nirgends zu sehen. Im Original steht sie als dritte Zeile.

Eine feste Obergrenze fuer die Blasenbreite hat ein Zitat gekuerzt. Fuer die
Titelslide musste sie klein sein, damit die Unterhaltung neben die Liste
passt; auf Slide 3 stand deshalb "Materialliste pruefen · faelli..." Die
Grenze haengt jetzt an der Spalte, in der die Blase steht.

Beinahe haette ich ein Zitat ohne Grund gekuerzt. Die Website-Ueberschrift
lautet "Bueero und Baustelle, endlich im selben Chat." Das "endlich" war
gestrichen mit der Begruendung, die Zeile laufe sonst ueber die Schutzzone --
und diese Begruendung sogar mit einer Zahl versehen, die nicht gemessen war.
Nachgemessen sind es 818 px von 896 erlaubten: sie passt. Das Wort ist wieder
drin.

GEPRUEFT
Luft 102 / 61 / 254 / 141 px, alle Zeichnungen innerhalb der 92-px-
Schutzzone, breiteste Ueberschriftzeile 818 von 896, 214 CSS-Regeln
vollstaendig, Konsole ohne Fehler, vier PNGs aus dem echten Ausgabeweg bei
2160 x 2700. Downloads blieb leer, der Projektstand unveraendert.

Die Pruefskripte im Sitzungsordner waren geloescht und sind neu angelegt,
diesmal mit gemeinsamem CDP-Kern: pruef.mjs misst ueber getBBox die
tatsaechlich gezeichnete Flaeche und die Breite jeder Ueberschriftzeile,
schuss.mjs rendert einzelne Slides, breite.mjs misst eine Formulierung, bevor
sie in die Datei kommt, export.mjs faehrt den Ausgabeweg und faengt /save ab.

NEBENBEI
Die Projektliste steht jetzt achtmal im Repo, einmal je Post-Seite plus
uebersicht.html, dort zusaetzlich in PROJEKTE. Post 6 ist ueberall
eingetragen. Wichtig fuer den offenen Tab: der Eintrag steht im Markup und
entsteht nicht zur Laufzeit -- eine Seite, die schon geladen war, zeigt ihn
erst nach dem Neuladen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-23 22:41:53 +02:00
dejanandClaude Opus 5 32206e7352 Post 5: das Projektmanagement, vier Bildschirme einer Pipeline
Nummer 4 im Redaktionsplan, erscheint Fr 21.08. Carousel, fuenf Slides,
Theme modern, Variante hell, Punktgrund. Stichwort des Plans: "Der
Ueberblick, den jeder Betrieb vermisst."

DER BEITRAG
Das Demo-Projekt haelt fuer die Pipeline vier eigene Bildschirme bereit --
Schablone, Board, Liste, Detail. Jeder bekommt eine Slide, dazu die Karte
aus der Naehe:

  1  Von der Anfrage bis zur Abnahme.  4A  das Board, drei Phasen
  2  Alles Wichtige auf einer Karte.   4A  eine Karte gross
  3  Vom Verkauf in die Abwicklung.    4B  das Projekt in der Abwicklung
  4  Board oder Liste.                 4C  dieselben Projekte als Tabelle
  5  Du bestimmst, was draufsteht.     3   der Feldeditor

ES SIND ZWEI PIPELINES, NICHT EINE
Das ist die Pointe und der Grund fuer Slide 3. Das Board gehoert zu
"Vertrieb: Anlagen-Verkauf", das Projekt in der Detailansicht liegt in
"Auftragsabwicklung SHK", und ein Knopf in der Kopfzeile schiebt es von
der einen in die andere. Beide Namen stehen woertlich in
PipelineBoardInteractive.tsx und S02PipelinesDetailansicht.tsx.

Warum das eine Software sein kann, beantwortet Slide 5: die Felder
haengen an der Pipeline, nicht am Programm. Siebzehn Feldtypen und drei
Stufen unter "Pflicht ab Board-Spalte", im Screen offen auf "Aufmass
erledigt". Ein SHK-Betrieb legt sich das an, ein anderer etwas anderes.

EINE RICHTIGSTELLUNG
Ein Zwischenstand behauptete, die Detailansicht sei nur ein Entwurfs-PNG.
Geprueft worden waren die Beschriftungen aus 07_Screen-4b_Karten-Detail.png
-- KUNDENDATEN, OBJEKTDATEN, Wahrscheinlichkeit, Heizlast, Lead-Quelle --
und die kommen im Code wirklich nirgends vor. Daraus wurde der falsche
Schluss gezogen, es gebe den Bildschirm nicht.

Es gibt ihn: app/(screens)/4b/ rendert S02PipelinesDetailansicht.tsx, 3150
Zeilen, mit den Rubriken GRUNDDATEN, PLANUNG & VERANTWORTLICHE,
PROJEKTKONTAKTDATEN, KONTAKTE, FIRMENDATEN, ANSPRECHPARTNER,
PROJEKTADRESSE und ZUSATZADRESSEN. Das PNG ist ein aelterer Entwurf
desselben Bildschirms, nicht sein Beleg. Die Abwesenheit einer
Zeichenkette beweist die Abwesenheit eines Bildschirms nicht.

DIE KARTE KOMMT AUS DEM CODE, NICHT AUS DEM SCREENSHOT
Der erste Anlauf war von assets/screens/pipelines.png abgemalt und lag an
drei Stellen daneben, von denen im Bild keine zu erkennen war:
Prioritaet, Balken und Kuerzel stehen als Gruppe rechts und haengen ueber
die Kante des Fusses (absolute -bottom-4 right-2), im Fuss steht ueber
dem Termin die Zeitspanne des Projekts, und die Balken sitzen in einem
eigenen umrandeten Kasten. Erst ProjectCard.tsx hat das gezeigt. Die
Karte ist jetzt Klasse fuer Klasse daraus nachgebaut, 320 breit wie w-80,
Titel auf hoechstens zwei Zeilen wie line-clamp-2.

Anders als bei Post 4 wird nichts umgefaerbt. Eine Pipeline lebt davon,
dass man das Gewerk an der Farbe erkennt, ohne zu lesen, und dass der
Fuss sich mit der Prioritaet faerbt. Zuordnung aus CATEGORY_TONES, Toene
aus ui/theme.css, Kuerzelfarbe aus avatarColor je Projekt.

ALLE ZAHLEN SIND GERECHNET
Anzahl und Summe je Spalte kommen aus denselben 41 Datensaetzen wie die
Karten: Angebot 189.800, Auftrag 224.800, In Ausfuehrung 352.300 Euro.
Wer eine aendert, muss die andere mitziehen.

WO BEWUSST ABGEWICHEN WIRD
- Slide 1 zeigt zwei bis drei Karten je Spalte, der Kopf zaehlt weiter
  vier. So ist es im Werkzeug auch, eine Spalte zeigt, was aufs Bild
  passt. Gleich hohe Saeulen sahen aus wie eine Tabelle.
- Slide 4 zeigt vier von neun Tabellenspalten und sieben von elf Zeilen.
  Die Spalte Sachbearbeiter ist entfallen, damit "Auftragswert gesperrt"
  ungekuerzt hineinpasst -- der Wortlaut ist der Grund, warum die Spalte
  ueberhaupt auf der Slide steht.
- Slide 3 stellt die Rubriken untereinander statt nebeneinander, und zwei
  fehlen: PDS-INTEGRATION, weil der Beitrag sich an Betriebe allgemein
  richtet und nicht an die mit diesem einen Branchenprogramm, und
  "ADRESSDATEN . TEST A (ZUSATZADRESSEN AN)", weil das ein Arbeitstitel
  aus der Entwicklung ist und kein Bildschirmtext.
- Ein "Kalender" im Umschalter stand kurz drin und ist raus: die
  ToggleGroup des Boards kennt board und list, mehr nicht.

DIE MASSSTAEBE SIND ABGESTIMMT
Slide 1, 3, 4 und 5 zeigen ihre Schrift zwischen 16 und 23 px. Slide 2 ist
als Nahaufnahme gedacht und liegt bei 47. Vorher stand sie auf 59 bis 73,
und eine einzelne Karte wirkte damit groesser als das ganze Board davor.

Der Kopfbereich ueber dem Board -- Seitentitel, Umschalter, Filterleiste --
ist wieder entfallen. Im Profilraster ist die Slide eine Kachel von rund
150 px, dort liest niemand eine Bedienoberflaeche. Wie die Pipeline heisst,
sagt Slide 3; dass es eine Liste gibt, sagt Slide 4.

EIN PRUEFSKRIPT HAT DEN PROJEKTSTAND VERSTELLT
export.mjs schaltet die Slides mit der Pfeiltaste weiter. Die Seite startet
aber im Bearbeiten-Modus, und dort verschieben Pfeiltasten das gewaehlte
Element statt die Slide zu wechseln. Jeder Prueflauf hat die Zeichnungen
geschoben und das in state/post5.json geschrieben: zuletzt vis dx 3 dy -69
auf Slide 1 und auf Slide 2 ein size 762, das die im Code eingestellten 720
ueberschrieb. Die Karte, ueber deren Groesse zwei Runden lang geredet wurde,
war beim Messen also gar nicht die aus dem Code.

Gemerkt an Messwerten, die im Code nirgends standen -- 89 px Rand rechts bei
eingestellten 92, 177 px unten bei eingestellten 120. Zahlen, die man sich
nicht erklaeren kann, sind ein Befund und keine Messungenauigkeit. Der Stand
ist bereinigt, das Skript verlaesst vor dem Blaettern den Bearbeiten-Modus
und schreibt die Datei am Ende zurueck.

NEBENBEI
- Plaettchenbreiten werden gemessen statt geschaetzt. Zeichenzahl mal
  0,52 em stimmt fuer "Heizung" und geht bei "Waermepumpe" daneben, das
  Wort stand ueber dem Rand. Ein Canvas misst dieselbe Schrift, die das
  SVG spaeter zeichnet; aus derselben Messung kommt der Titelumbruch.
- Die Ueberschrift von Slide 1 steht auf denselben Werten wie die von
  post4.html, nachgemessen: 76 px, Gewicht 800, -2,432 px Sperrung,
  zentriert, Oberkante 95, Blockhoehe 158, Versatz dy 3.
- Die Projektliste steht siebenmal im Repo, einmal je Post-Seite plus
  uebersicht.html, dort zusaetzlich in PROJEKTE. Post 5 ist ueberall
  eingetragen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 23:00:02 +02:00
dejanandClaude Opus 5 bae57e64ce Post 4: die Workflow-Engine, drei Ansichten derselben Oberflaeche
Nummer 3 im Redaktionsplan, erscheint Mi 19.08. Carousel, vier Slides,
Theme modern, Variante hell.

DER BEITRAG
Ein Ablauf, die Bausteine, aus denen er entsteht, und der Hinweis, dass man
nicht bei null anfaengt:

  1  Automatisiere deinen Betrieb.   ein Ablauf auf dem Canvas
  2  Erst der Ausloeser.             die Ausloeser-Auswahl
  3  Dann die Aktionen.              die Aktionen-Auswahl
  4  Fang nicht bei null an.         drei fertige Vorlagen

Slide 2 und 3 teilen sich eine Funktion mit zwei Rubriken, weil es im Produkt
eine Auswahl ist: "Ausloeser" und "Aktionen" stehen dort untereinander im
selben Feld. Getrennt gezeichnet waeren es zwei Bilder, die zufaellig gleich
aussehen.

Vier Slides statt der fuenf bis sieben aus dem Redaktionsplan. Das ist eine
Spanne und kein Soll: eine Slide, die nichts hinzufuegt, kostet einen Wisch
und gibt nichts zurueck.

WAS AUS DEM PRODUKT KOMMT UND WAS NICHT
Der Knoten ist NodeItem aus ui/components/NodeWorkflowEngine des Pitch-Pakets:
quadratisch 128 x 128, rounded-lg, 6 px Rand, Titel und Beschreibung unter dem
Feld, beim Ausloeser die linke Flanke voll gerundet. Genau so rendert es auch
assets/screens/workflow.png.

Ein Zwischenstand zeichnete stattdessen breite Karten mit farbiger Kante links
und einem Block "BESCHREIBUNG" -- abgemalt vom Pitch-Bild 02_Praesentation/03.
Im Code des Projekts gibt es das nirgends: weder "BESCHREIBUNG" als Label noch
eine linke Farbkante, beides null Treffer. Der Kommentar behauptete trotzdem,
es sei ein Nachbau der Komponente. Das ist berichtigt.

Die Farben sind die des Produkts, aufgeloest aus ui/theme.css ueber die ganze
Token-Kette und nicht aus dem Bild geschaetzt. Sie tragen Bedeutung: gruen
faengt an, rot aendert Daten, blau meldet, amber macht eine Aufgabe daraus,
violett entscheidet. Ein Zwischenstand hatte sie durch Markenfarben ersetzt,
weil rules.md 2 diese Toene nicht kennt -- zurueckgenommen, der Beitrag zeigt
die Oberflaeche, und umgefaerbt waere es eine Nacherzaehlung.

Alle Produkttexte stehen woertlich in der Quelle. Wo ein Name nicht in eine
Zeile passte, steht er zweizeilig: aus "Daten vereinheitlichen" ein "Pruefen"
zu machen ist keine Kuerzung, sondern ein anderer Name.

DREI STELLEN, AN DENEN BEWUSST ABGEWICHEN WIRD
- Slide 1 gabelt nach dem zweiten Knoten. Alle drei echten Ablaeufe verzweigen
  erst an Position 3 oder 4, und das fuellt ein hochkantes Format schlecht --
  solange der Stamm laeuft, steht ueber und unter ihm nichts. Dafuer fehlt
  zwischen "Formular eingegangen" und "Passender Lead?" der Schritt "Daten
  vereinheitlichen". Ein Ablauf, den es genau so gibt, ist es damit nicht mehr;
  einer, den es geben koennte, schon.
- Slide 4 nennt die Demo-Ablaeufe "Vorlagen". Dass es eine Vorlagen-Bibliothek
  gibt, steht als Merkmal auf der Website; dass sie diese drei enthaelt, steht
  nirgends. Im Werkzeug werden sie ueber workflowId geladen, nicht als Galerie
  gezeigt, und das Wort "Vorlage" kommt in der Komponente nicht vor.
- Kein PDS im Beitrag. Von den sechs Vorlagen nennen drei das Branchenprogramm.
  Uebrig bleibt genau die Gruppe GENERAL_WORKFLOW_PRESETS, in der es kein
  einziges Mal vorkommt -- also keine Auswahl nach Geschmack, sondern die
  vollstaendige zweite Gruppe. Gekuerzt wurde nichts.

Erfundene Vorgaenge sind raus. Ein Zwischenstand hatte eine Slide mit einem
Aktivitaetenverlauf samt Uhrzeiten. Nichts davon war gemessen, und bei einem
Produkt vor dem Start ist eine erfundene Uhrzeit kein Beispiel, sondern ein
Beleg, den es nicht gibt.

DER PUNKTGRUND
Die Arbeitsflaeche des Workflow-Editors, Werte aus WorkflowEditor.tsx der
Website. Zwei begruendete Abweichungen: die Teilung ist verdoppelt, weil ein
24er Raster im Feed auf 9 px zusammenfaellt und zu grauem Schleier wird, und
der Grund bleibt weiss statt getoent, weil rules.md 1a das verbietet.

EIN FEHLER, DER FAST DURCHGERUTSCHT WAERE
Beim Entfernen der Karten-Regeln von Post 2 blieben rund neunzig Zeilen
Deklarationen ohne Selektor stehen, dazu ein Kommentar ohne Ende: nur die
Selektorzeilen waren weggeschnitten. CSS faengt sich davon nicht wieder, der
Parser ueberspringt bis zur naechsten Marke -- und dabei verschwand die Regel
[data-edit] darunter. Damit war das Verschieben von Elementen im Canvas tot,
ohne dass die Seite einen Fehler zeigte. Sichtbar wurde es erst, als ein
gespeicherter Versatz von 3 px nicht mehr ankam.

Behoben, und an der Stelle steht jetzt eine Warnung: Regeln als ganzen Block
entfernen und danach nachsehen, ob document.styleSheets sie noch alle kennt.

NEBENBEI
- Die Ueberschriften stehen auf denselben Werten wie post3.html, bis auf den
  Pixel nachgemessen: 76 px, -0,032em, nowrap und der Versatz dy 3, den auch
  post2, post2-alt und post3 auf jeder Slide tragen.
- Die Projektliste steht sechsmal im Repo, einmal je Post-Seite plus
  uebersicht.html. Post 4 ist ueberall eingetragen. Wer einen siebten Beitrag
  anlegt, muss an alle sechs Stellen denken.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 23:52:19 +02:00