- 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>
Post 7: Form Builder, auf Instagram erschienen, Facebook offen.
Post 8: Text freigegeben, Post vorerst nicht veröffentlicht.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Titelslide: Noah an x 800 gespiegelt, er schaut zum Text
- Slide 2 und 3 als Video (6 s, 1:1): die gelben Waben ploppen
nacheinander auf und ziehen sich zum Schleifenende zurück
- Im Streifen laufen die Animationen mit, Standbild bleibt der Endstand
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
Kopf, Reiter, Fragekarten, offene Frage mit Streifen, "Nur anzeigen,
wenn", Werkzeugleiste und "Felder zuweisen" aus screens/forms mit den
Komponenten aus komponenten.md. Raus, weil es sie im Produkt nicht gibt:
die Pipeline am Lead, die Fusszeile mit "Zuletzt gespeichert" und
"Bereit zum Veroeffentlichen", die alten Feldtypen-Namen. Slide-Texte
angepasst, Video neu exportiert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rules.md §0 macht es zur Pflicht, komponenten.md ist das Nachschlagewerk
mit Tokens, Komponenten, Bausteinen und Vorgehen, CLAUDE.md weist jeden
Agenten darauf hin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jede Zeichnung bildet jetzt einen echten Screen nach: Kampagnenbericht,
Zielgruppe bearbeiten, Vorlagen, Bereit zum Versand, Gestaltung. Schrift
Instrument Sans, Icons Lucide, Masse und Farben aus ui/theme.css und den
Subframe-Komponenten. Raus, weil es sie im Produkt nicht gibt: Reiter,
Haekchen-Chips, Produktkacheln. Instrument Sans wird im PNG-Export
eingebettet. Video neu exportiert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Teil 1 dunkel mit G-Waben wie die Kapitel-Slides, die drei danach hell mit
dem zweiten Wabenmuster. Die Zeichen sitzen als grosse gelbe Wabe im Muster,
je ein Wort im Titel in Gelb. Die Live-Marke entfaellt, der Titel sagt es
schon. Noah spricht bei Teil 1 und 2, David bei 3 und 4. Video neu exportiert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2560 x 1440, Botschaft in der Mitte fuer alle Geraete, G-Waben drumherum.
Rendern mit kanaele/rendern.sh, die Bereiche je Geraet mit "zonen".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bewegtbild der vier Teile mit Noah und David, dazu die Slide zum Anmelden.
Termin, Uhrzeit und Dauer sind Platzhalter in WEBINAR. Die Uebersicht kennt
Post 8 und Post 9.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Ist der Port belegt, bricht der Server mit einem Hinweis ab, statt
auszuweichen. So stimmt der Link aus dem Marketing-Dashboard immer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bei Sekunde 2 fuhr "Frage hinzufuegen" runter, neun Pixel wieder hoch
und ab t = 0,40 erneut runter -- eine Richtungsumkehr in vier Zehnteln.
Gemessen ueber alle 180 Bilder:
Bild 43 - 60 681 -> 782 runter
Bild 60 - 72 782 -> 773 hoch
Bild 73 - 80 776 -> 800 runter
Schuld war rueck, also back.out(1,7): die Kurve ueberschwingt auf 1,099
und pendelt zurueck. Das passt zu etwas, das aufspringt. Der Knopf
springt aber nicht, er wird von der neuen Frage nach unten geschoben,
und Geschobenes federt nicht zurueck. Jetzt raus, power2.out: faengt
genauso schnell an -- der Klick soll sofort etwas ausloesen -- nur ohne
Rueckweg.
Nur die Kurve zu tauschen haette eine zweite Unsauberkeit hinterlassen:
das Aufklappen laeuft aus, der Knopf steht ein Zehntel still, dann setzt
er ruckartig wieder an. Der Platz fuer die Optionen waechst deshalb ab
0,36 statt ab 0,40 und geht in die auslaufende Bewegung ueber. Die
langsamste Stelle sind jetzt 0,9 px je Bild statt null; die Optionen
selbst erscheinen unveraendert ab 0,40.
Ueber alle 180 Bilder kein Schritt mehr rueckwaerts. Bewegtbild neu
gebaut.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Sie ist das erste Element im Carousel, also muss sie die ganze Sache
tragen und nicht eine Einzelheit daraus. "Das Formular baust du selbst"
beschrieb die Bedienung -- das sieht man in der Animation ohnehin.
Fliesstext faellt weg, wie auf jeder Startslide. Damit sitzt die
Ueberschrift hoeher, und die Karte muss mit: visBottom 268 statt 168
macht aus 218 px Luft dazwischen 118, den Wert aller anderen Slides.
Die drei Pixel Hoehenversatz sind kein Wert aus der Vorlage, sondern
stecken bei Post 2 bis 6 im Projektstand als headline.dy -- gesetzt von
applyEdits, und da geht das Bewegtbild nicht durch. Gemessen sassen die
Startslides bei y 95, diese bei 92. Jetzt beide bei 95: im Stand fuer
die Slides, im animSlideBauen fuer die Animation. Dort direkt als
transform, weil die Regel hinter --ey an [data-edit] haengt und das
Attribut tagEditable() setzt -- noch eine Stelle, die das Bewegtbild
auslaesst.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Aus dem Canvas: die Zeichnungen aller drei Slides nach oben gezogen
(dy -28, -126, -162). Sie schliessen damit dichter an den Fliesstext an,
und der Raum steht unten.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
DIE FUSSZEILE STAND AUS DER KARTE HERAUS. "Bereit zum Veroeffentlichen"
endete bei x 797, die Karte bei 788 -- neun Einheiten daneben. Ursache
war ein fester Versatz von 138, gegriffen statt gerechnet. Jetzt wird
die Textbreite gemessen und das Ende an die innere Kante gehaengt, egal
wie lang der Satz ist.
Dazu der Abstand: 24 oben und 22 unten, die Zeile klebte am Rand und die
Karte sah unten beschnitten aus. Jetzt 28 zu 28.
DER KOPF WAR ZU ENG. Die Trennlinie unter den Reitern liegt bei 92, der
Inhalt begann bei 96 -- vier Einheiten, und die erste Frage klebte an der
Linie. Der Kopf steht jetzt als FB_KOPF auf 120, also 28 Einheiten Luft,
derselbe Wert wie unten. Die feste Kastenhoehe des Bewegtbilds rechnet
mit derselben Konstante statt mit einer wiederholten Zahl.
Bewegtbild neu gebaut.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Beim Anlegen aus post6.html sind title und PROJECT geaendert worden, die
sichtbare <h1> im Bedienfeld nicht. Sie ist die dritte Stelle, an der der
Projektname steht -- und die einzige, die man beim Arbeiten dauernd
ansieht.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Er lag auf Mi 02.09., also zwei Tage nach dem Team-Chat. Die beiden
Termine 02.09. und 04.09. fallen aus, alles ab dort rueckt zwei Slots:
Mo 07.09. Form Builder (war Mi 02.09.)
Mi 09.09. Zettelwirtschaft
...
Mi 23.09. Tempo und Uebersicht, das erste Reel (war Fr 18.09.)
FERTIG steht auf 6: mit dem Form Builder liegen sechs Beitraege gebaut
im Generator. Die Zahlwort-Tabelle ging nur bis fuenf und waere beim
naechsten Beitrag mit einem KeyError abgebrochen -- sie reicht jetzt bis
acht.
PDF neu gebaut.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
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
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
Geplant war Mi 26.08. Der Beitrag lag noch beim Feinschliff, damit sind
zwei Termine ausgefallen -- 26.08. und 28.08. Beide stehen jetzt in
AUSGELASSEN, und alles ab dort rueckt zwei Slots nach hinten:
Mo 31.08. Team-Chat (war Mi 26.08.)
Mi 02.09. Form Builder (war Fr 28.08.)
...
Fr 18.09. Tempo und Uebersicht, das erste Reel (war Mo 14.09.)
Die vier Beitraege davor behalten ihr Datum, sie sind erschienen. Das
ist dieselbe Regel wie beim Ausfall am 24.08.: den Start zu verschieben
haette rueckwirkend andere Termine behauptet.
FERTIG steht auf 5. Mit dem Team-Chat sind fuenf Beitraege gesetzt und
gebaut; die Tabelle hebt sie hervor, und der Satz darueber nennt die
Zahl aus derselben Konstante.
Der Kommentar am Reel-Termin nennt keine Zahl mehr. Er stand einmal auf
"09.09." und war schon damals falsch, dann auf "11.09." und war es nach
der naechsten Verschiebung wieder. Ein Datum, das sich aus AUSGELASSEN
ergibt, gehoert nirgendwo als Zahl hingeschrieben -- auch nicht in einen
Kommentar. Im Fliesstext steht es ohnehin als {REEL} und ist auf 18.09.
mitgewandert.
PDF neu gebaut.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Vier Sachen an derselben Slide.
BREITE AUS DEM INHALT. Sie stand als feste 470 in der Zeichenfunktion,
gemessen fuer Beschriftungen mit "senden", und liess ein Drittel
Leerraum rechts. Sie kommt jetzt aus dem laengsten Eintrag. Dabei
kippte die Zeichnung von quer auf hochkant, und ein hochkantes Bild
richtet sich nach der Hoehe: bei den alten 940 px wurde der Kasten
1093 hoch und lief in die Ueberschrift. Jetzt 680.
Gerechnet ist die Breite am sichtbaren Blatt und nicht am Kasten -- der
ist um den Stapelrand groesser als das, was man sieht, und mit seiner
Oberkante gerechnet stand die Zeichnung noch einmal 60 px zu hoch.
OBEN OHNE VERB. Wer das Menue ueber das Pluszeichen geoeffnet hat,
weiss, dass er etwas schickt; "Dokument senden", "Fotos und Videos
senden", "Audio senden", "Kontakt teilen" schreiben es viermal daneben.
Jetzt stehen dort die Dinge: Dokumente, Medien, Audio, Kontakt. Unten
bleibt das Verb, weil es etwas hinzufuegt -- "Termin" allein waere ein
Anhang, "Termin erstellen" ist eine Handlung. Das ist eine Abweichung
vom Composer und steht als solche in POST-6.md 4.
DIE EINGABEZEILE IST ZURUECK. Sie war weggenommen worden mit der
Begruendung, die Slide zeige ja, was man anhaengen kann. Das stimmte
nur, solange man wusste, worauf man schaut: ohne das Feld ist die Karte
eine Liste im Nichts. Das Pluszeichen traegt jetzt die gruene Marke wie
ein gedruecktes Element, der Zeiger steht darauf, und das Menue klappt
nach oben auf -- so wie im Werkzeug.
TEILEN STATT TELEFONHOERER. Ein Hoerer sagt "anrufen"; bei "Kontakt"
wird eine Karte weitergegeben. ShareNetwork aus demselben
Phosphor-bold-Satz, entnommen aus @phosphor-icons/react im
Website-Repo statt abgemalt. "phone" stand danach nirgends mehr und ist
aus der Tabelle heraus: 19 Zeichen, jedes in Gebrauch.
Das Bewegtbild ist nicht betroffen, es nutzt das Nachrichtenmenue.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Vier Unsplash-Aufnahmen unter assets/eigene, die avatarKreis() nimmt,
sobald sie da sind -- vorher stand dort das Kuerzel. Nur Menschen
bekommen eins, Projektkanal und Gruppe behalten ihr Sinnbild.
portrait-sk Sandra Koch unsplash.com/photos/SJvDxw0azqw
portrait-mb Maike Berger unsplash.com/photos/ZAo0cKz_IKM
portrait-tw Tobias Wagner unsplash.com/photos/TTdJV-K1IUg
portrait-ms Michael Schuster unsplash.com/photos/7YVZYZeITc8
Ausgewaehlt nicht nach Gesicht, sondern nach Unterscheidbarkeit im Kreis
von 42 px: dort zaehlt der Gesamtwert und die Silhouette. Die vier
decken hell, mittelhell, dunkel und mittel ab, dazu kurze Locken,
schulterlang, Schiebermuetze mit Bart, kurz und glatt.
WAS DARAN OFFEN BLEIBT, UND ZWAR WISSENTLICH
Die Unsplash-Lizenz deckt das Urheberrecht des Fotografen, kein Model
Release. Ein fremdes Gesicht als "Sandra Koch, Projektleitung" auf dem
Firmenkanal beruehrt 22 KUG und die DSGVO. Ein Zwischenstand wich
deshalb auf erzeugte Gesichter aus (StyleGAN2) und ist zugunsten echter
Aufnahmen zurueckgenommen worden. Rechtssicher waere nur
model-released Stock. Steht in POST-6.md 4.
Geprueft ist jede der vier Seiten einzeln: Unsplash-Lizenz vermerkt,
keine KI-Kennzeichnung, benannter Fotograf, Datum zwischen 2017 und
2023.
DREI FALLEN
Von 56 Suchtreffern waren 32 Profilbilder der Fotografen, nicht deren
Aufnahmen -- ein figure img greift das Avatarbild des Urhebers mit ab,
und die sehen aus wie Portraits, weil sie welche sind. Zwei davon
waren schon eingesetzt, bevor es beim Aufschreiben der Herkunft
auffiel. Erkennbar an photo- gegen profile- in der URL.
Zwei gegenlaeufige Teilstuecke in einem Pfad loeschen ihren Ueberlapp
weg, und ein Rechteck in Zeichnungsgroesse trifft nicht, was darueber
hinaussteht. Beides gehoert zum Band davor, beides fiel erst hier auf.
Zuschnitt braucht keinen Fuellton: ein Business-Portrait hat Luft ueber
dem Kopf. Skaliert mit lanczos plus leichtem unsharp, 320 x 320 JPEG --
was beim Verkleinern an Schaerfe verlorengeht, holt keine
Renderqualitaet zurueck.
Bewegtbild neu gebaut, die Avatare stehen auch darin.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Der Knick sass 70 Einheiten vor der Plattenkante und lag damit mitten
auf dem Bildschirm -- das sah aus wie ein Spruchband, das jemand
daraufgeklebt und in der Mitte geknickt hat. Ein Band knickt nicht um
nichts: der Knick gehoert an die Kante, weil dort etwas ist, worum es
sich legen kann.
Jetzt knickt es genau dort um, wo die Platte aufhoert, laeuft dahinter
weiter und kommt an ihrer Kante wieder hervor: tiefer, weil es
umgeschlagen ist, niedriger, weil es wegfuehrt, flacher getont, weil man
von dort seine Unterseite sieht.
Die Stelle wird nicht gerechnet. Beide Stuecke reichen absichtlich weit
in die Platte hinein, und zwei Masken schneiden sie an deren Kante ab --
bandSilhouette die vordere Flaeche innen, bandAussen die Stuecke
draussen. Der Knick sitzt damit immer auf der Kante, auch wenn sich die
Platten einmal verschieben.
Zwei Fehler steckten in der Naht dazwischen, beide erst im erzeugten
SVG und beim Auszaehlen der Pixel sichtbar:
Beide Masken kamen aus derselben Kontur, aber die innere trug einen
schwarzen Strich darauf und war damit um eine halbe Haarlinie kleiner
als die aeussere gross war. In der Luecke war das Band von beiden
Seiten halb durchsichtig -- ein blasser Streifen genau im Falz. Die
Falzkante kommt jetzt als eigener Strich darueber.
Die Abdunklung lag auf einem Rechteck 0 0 W H. Die Stuecke stehen
ausserhalb von 0..W und wurden nie getroffen, waren also heller als
das Band daneben -- verkehrt herum fuer etwas, das weiter hinten
liegt. Nachgemessen quer ueber die Naht: Stueck 125, Band 132.
Der Lichtabfall ist auf die Haelfte zurueckgenommen (0,80 -> 0,42):
zusammen mit dem dunkleren Stueck wurde daraus sonst ein brauner
Schatten statt eines Bandes.
Ohne die zwei Festlichkeiten des klassischen Spruchbands: keine Zacken,
kein Bogen. Ein gewoelbtes Band ueber einer flachen Oberflaeche sieht
nach Urkunde aus.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
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
Die Website macht ihre Bewegungen mit gsap 3.14.2. Uebernommen sind die
Kurven, nicht das Paket: was GSAP darueber hinaus kann -- Zeitleisten,
ScrollTrigger, MotionPath -- setzt voraus, dass etwas laeuft. Hier
laeuft nichts, animChat(i, t) bekommt seinen Fortschritt von aussen und
ist damit selbst schon die Zeitleiste. Ein paused timeline mit
.progress(t) waere dieselbe Konstruktion mit 70 KB darunter, und ein
Easing ist eine Zeile.
Zwei der Kurven waren ohnehin GSAPs: daempfen ist Wort fuer Wort
power2.inOut, rueck ist back.out(1,70158). Die Namen stehen jetzt
daneben, dazu kommen raus (power2.out) und knall (expo.out).
Der Zeiger fuhr auf power2.inOut, also langsam an, in der Mitte
schnell, wieder abbremsend -- die Bewegung eines Schlittens. Eine
Hand ist sofort schnell und wird zum Ziel hin langsam.
Und er fuhr auf der Geraden. Jetzt auf einer quadratischen Bezier,
Stuetzpunkt 13 % der Strecke quer nach aussen, vom Verlauf weg. Rund
27 px Ausbuchtung auf 410 px Weg: es faellt nicht auf, das ist der
Punkt.
Der Klickring geht auf zwei Kurven, Radius auf expo.out und die
Deckung linear hinterher. Beides auf derselben sah aus wie eine
Blase, die sich aufblaest.
Der Anlauf ist von 0,6 s auf 0,18 s geschrumpft. Am Ende steht das
Bild eine halbe Sekunde still, damit man das Ergebnis liest; lief
vorn nochmal eine halbe, waren das ueber den Schleifenstoss hinweg
1,2 von 6 Sekunden Stillstand am Stueck.
MP4 neu gebaut, Werte unveraendert: H.264, 1080x1350, 30 fps, 6,0 s,
stumme AAC-Spur. Geprueft ist das an Kontaktabzuegen ueber die 180
Bilder, nicht am Lauf.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Vorher lief es ueber die ganze Zeichnung hinaus und endete an der
Bildkante, quer zur eigenen Laufrichtung abgeschnitten -- das ist das
Zeichen fuer ein Ende, so liest sich ein Aufkleber. Jetzt bricht es an
einer senkrechten Plattenkante ab, waehrend es mit 13 Grad ankommt, und
das ist keines: dort laeuft es hinter die Platte, um den Stapel herum.
Beschnitten wird an der Silhouette beider Ausschnitte. Damit macht es
die Website nach, die ihr Band am Rand des Telefons abschneidet ("so
the ends cut off like real tape"), und der Gegensatz "absperren oder
beschneiden", den der Kommentar hier behauptete, faellt weg: die
Silhouette beider Platten ist die ganze Sache.
Drei Dinge tragen es, keines verbiegt die Form:
die Schnittkante ist die Plattenkante und steht schraeg zum Band
sie ist weicher als eine Linie und haerter als die Platten (1,1)
die letzten 56 Einheiten verlieren Licht, mit dem Hoehepunkt als
Plateau davor -- auf der Kante selbst blendet die Maske schon aus
Der Verlauf steht dafuer in den Koordinaten der Zeichnung statt in
denen des gedrehten Bandes: er soll parallel zu der Kante stehen, an
der er endet.
Mit weg sind zwei Kommentarbloecke, von denen einer einen Stand
beschrieb, der einen Commit vorher zurueckgenommen worden war, und mit
ihnen WEB.bandKnick und WEB.bandSpitze.
Geprueft ueber beide Wege, Browser-Screenshot und html-to-image: die
Maske ueberlebt den Export, das Bild ist identisch.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Zwei Anlaeufe haben die Form verbogen: erst die Enden zur Spitze verjuengt,
dann um eine Knickstelle gekippt. Das erste sah aus wie eine Schleife, das
zweite wie eine Welle. Ein Absperrband ist flach und straff -- was ihm gefehlt
hat, war Woelbung, nicht ein Knick.
Jetzt quer ueber die Hoehe ein Verlauf von #F8C64A ueber #F1B729 nach #D89F1B,
knapp unter der Oberkante ein Glanzlicht, und zu beiden Enden hin 20 % Abdunkeln.
Die untere Laengskante ist einen Pixel dicker als die obere, weil sie im
Schatten der Woelbung liegt. Die Form bleibt das Rechteck, das sie auf der
Website ist.
Helm und Schrift stehen weiterhin einmal und mittig.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Code war im vorigen Commit, die Beschreibung ist ins Leere gelaufen, weil
ich sie an einen Absatz haengen wollte, den es so nicht gab.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Es war ein Rechteck mit gleichmaessig durchlaufender Schrift und las sich damit
als Aufkleber auf der Flaeche, nicht als Band darueber.
Jetzt laufen die Aussenkanten zur Mitte zusammen (10 % der Bandhoehe je Kante),
die Knickflaechen sind dunkler (#D6A11E statt #F1B729), an der Knickstelle
steht eine Kante, und die dunklen Laengskanten folgen dem Knick mit statt
darueber zu schweben.
Ein erster Anlauf knickte bei 21 % der Laenge und mit 17 % Verjuengung -- das
sah aus wie eine Schleife. Bei 12 % und 10 % bleibt die Mitte flach und nur die
Enden fuehren weg.
Helm und Schrift stehen einmal, mittig auf der geraden Flaeche. Wiederholt und
am linken Rand beginnend passte der Satz zu einem endlosen Band; auf einem,
dessen Enden sichtbar wegknicken, gehoert er in die Mitte.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
avatarKreis() zeigt ein Foto, sobald eines unter
assets/eigene/portrait-<kuerzel>.<endung> liegt -- portrait-sk, portrait-mb,
portrait-tw, portrait-ms -- rund beschnitten, mit demselben Rand wie der
Kuerzelkreis. Ist keines da, steht wie bisher das Kuerzel im Kreis. Hochladen
geht ueber "Eigene Bilder" in der Seite; preloadAssets() holt alles aus
assets/eigene ohnehin mit, der Export bekommt sie damit als Daten-URL.
Mit einem Testbild durchgefahren und wieder entfernt.
Keine Fotos im Repo, und zwar mit Absicht: das Pitch-Paket laedt seine
Portraits von Unsplash -- vier Aufnahmen echter, erkennbarer Menschen. Die
Lizenz deckt das Foto, nicht das Recht am eigenen Bild. Ein fremdes Gesicht als
"Sandra Koch, Projektleitung" in einen oeffentlichen Beitrag zu setzen, ist
etwas anderes als ein Klickdummy fuer einen Kundentermin.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Projektkanal, Gruppe und Direktnachricht tragen jetzt dieselbe Marke -- Flaeche
#DCFCE4, Rand #B7EDC6, Zeichen #148134 -- in der Liste wie im Verlauf. Vorher
trug der Kanal Lila, die Gruppe Grau und jede Person ihre eigene Farbe: vier
Familien in einer Liste, und keine sagte etwas, das die Zeile nicht schon sagt.
Die Kuerzel unterscheiden die Personen, dafuer braucht es keine vier Farbtoene.
Dazu die Symbolgewichtung zurueck auf bold, diesmal gemessen statt geschaetzt.
Der Tausch von Feather auf Phosphor hat keinen Hexwert angefasst, sah aber
trotzdem anders aus -- zu Recht: duennere Formen haben weniger voll gedeckte
Pixel, das liest sich blasser. Im Kanalsymbol, Ausschnitt 44 x 44:
Feather, wie es vorher war 59 volle Pixel, Deckung 180
Phosphor regular 23 volle Pixel, Deckung 151 (16 % zu blass)
Phosphor bold 62 volle Pixel, Deckung 192 ( 6 % darueber)
Ich hatte auf regular zurueckgestellt, weil es "im Menue leichter aussah".
Geschaetzt statt gemessen, und daneben. Wer eine optische Staerke beurteilt,
zaehlt Pixel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Getauscht sind nur die Formen, kein einziger Farbwert -- Plakettengruen
#148134, Lila der Projekte #691CD4, Grau der Nadel #9C9CA3 sind vor und nach
dem Wechsel identisch. Was sich geaendert hatte, war die Strichstaerke: bold
sind gefuellte fette Formen, und die lesen sich neben demselben Text dunkler
als duenne Striche. Das sieht aus wie eine andere Farbe, ist aber keine.
regular trifft die optische Staerke, die Feather dort hatte.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Feather-Satz steckt in so ziemlich jeder Oberflaeche der letzten Jahre; man
erkennt ihn sofort wieder, und damit sieht eine Zeichnung aus wie jede andere.
Am deutlichsten war das am Gruppensymbol.
Phosphor ist dieselbe Familie von Strichsymbolen, nur mit eigener Handschrift:
runder, gleichmaessiger, andere Metaphern (UsersThree statt Users,
PaperPlaneRight statt Send, CaretDown statt ChevronDown). Es ist dasselbe
Paket, das die Website benutzt -- @phosphor-icons/react steht neben
lucide-react in ihrer package.json -- also keine dritte Handschrift im Haus.
Die 19 Pfade sind direkt aus dem installierten Paket gezogen und nicht
abgeschrieben: Gewichtung bold, Zeichenflaeche 256 x 256. Regular war neben dem
Text zu leicht. Anders als bei Feather sind es gefuellte Formen, ikon() faerbt
deshalb ueber fill statt ueber stroke; der Parameter fuer die Strichstaerke
faellt weg. FEATHER und feather() sind raus.
Der vorige Versuch tauschte nur das eine Gruppensymbol gegen zwei ueberlappende
Scheiben. Das war keine Antwort auf die Frage: die Frage war der Satz, nicht
das einzelne Zeichen.
Nebenbei: anhangKarte() und uiKachel() hatten einen Parameter namens "ikon" und
verdeckten damit die neue Funktion. Heisst jetzt "zeichen".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Im vorigen Commit stand animation/post6-animChat.mp4 als geloescht drin. Der
Inhalt hat sich nicht geaendert -- die Chatliste steckt in chatZeile(), die
Animation zeichnet mit blase() -- also zurueckgeholt statt neu gebaut, Byte
fuer Byte der Stand aus efcb864.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Punkt fuer Ungelesenes war violett und leer. Violett ist im Produkt die
Farbe der Projekte -- das Kanalsymbol in derselben Zeile traegt sie schon, und
ein zweites violettes Zeichen daneben konkurriert damit, statt etwas anderes zu
sagen. Ein farbloser Punkt sagt ausserdem nur "da war was". Jetzt gruen, mit
der Zahl der ungelesenen Nachrichten darin, wie in jedem Messenger, den ein
Betrieb kennt. Die Uhrzeit derselben Zeile faerbt mit.
Die Zahlen (3, 2, 1) stehen nicht in der Quelle, dort ist unread ein
Wahrheitswert. Sie sind die einzigen erfundenen Werte im Post und stehen so in
POST-6.md.
Die Gruppe trug FeatherUsers -- das Zwei-Personen-Piktogramm, das in jeder
zweiten Oberflaeche steckt und danach aussieht. Jetzt zwei ueberlappende
Avatarscheiben, wie Teams und Linear sie an derselben Stelle zeigen; sie
sprechen dieselbe Sprache wie die Kuerzelkreise der Direktnachrichten daneben.
Ohne Buchstaben, weil die Mitglieder nirgends benannt sind.
Dabei gefunden: nach dem Vergroessern des Ausschnitts auf Slide 2 hatte ich
kollision.mjs mit Argument 1 laufen lassen -- das ist Slide 1. Auf Slide 2 ragte
das hinterste, gedrehte Blatt des Stapels fuenf Einheiten unter den Kasten.
stapelRand() rechnet den Ueberstand fuer die unskalierte Groesse, die
Skalierung vergroessert ihn mit. Der Kasten kommt jetzt aus dem skalierten
Stapel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Es nahm dieselbe gedaempfte Kurve wie alles andere, ueber 0,8 Sekunden. Die
Deckung war darin nach fuenf Bildern fertig, waehrend die Skalierung noch eine
halbe Sekunde von 0,96 auf 1,00 weiterlief. Zu sehen war davon fast nichts, zu
spueren war es als Haenger -- und zwar genau in dem Moment, in dem geklickt
wird.
Jetzt rueck statt daempfen und ueber 0,34 statt 0,40 der Laufzeit: drei Bilder
Aufblenden, ein ganz leichtes Ueberschwingen, dann Ruhe. Die Deckung laeuft
dafuer mit Faktor 2,5 statt 4,5, sonst waeren es zwei Bilder und es knallte.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Aus dem Browser: Muster auf Slide 4 auf kraeftig, Zeichnung auf Slide 2 und 4
verschoben (vis dy -155 und -67).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
"Versende mehr als nur Textnachrichten: Dokumente, Fotos, Sprachnachrichten."
Drei Beispiele sagen, worum es geht; die vollstaendige Liste steht im Bild
daneben.
Zu spezifisch war an der alten Fassung nicht das Aufzaehlen, sondern das
Durchdeklinieren ("... Soll daraus etwas werden: Termin oder Aufgabe."). Ich
habe daraufhin zweimal in die andere Richtung uebersteuert und gar nichts mehr
genannt. Ein Fliesstext auf einer Feature-Slide erklaert das Feature: er
umschreibt es nicht und handelt es auch nicht in vier Woertern ab.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Was das Feature kann, in einem Satz. Die Eintraege stehen im Bild und muessen
daneben weder aufgezaehlt noch erklaert werden.
Davor drei Fassungen, die alle daneben lagen: erst die Aufzaehlung samt
Erklaerung ("Dokument, Fotos, Sprachnachricht, Kontakt. Soll daraus etwas
werden: Termin oder Aufgabe."), dann zwei Versuche, es allgemeiner zu fassen,
die sprachlich verstiegen waren. Ein Fliesstext auf einer Feature-Slide
erklaert das Feature, er formuliert es nicht aus.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Satz fuehrt die Ueberschrift "Nicht nur Text." weiter und benennt dabei
nichts Einzelnes. Vorher stand dort die Aufzaehlung der Menueeintraege, danach
kurz eine Fassung ueber die zwei Haelften des Menues -- beides sagte, was
drinsteht, statt zu sagen, worum es geht.
Gemessen mit fliess.mjs im Schnitt des Fliesstextes und nicht in dem der
Ueberschrift, weil das eine andere Groesse und ein anderes Gewicht ist: 780 px
von 830 verfuegbaren, also eine Zeile. Eine Zwischenfassung ("... alles, was
sonst noch zum Projekt gehoert.") kam auf 903 px und liess "gehoert." allein
in der zweiten Zeile stehen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dort stand "Dokument, Fotos, Sprachnachricht, Kontakt. Soll daraus etwas
werden: Termin oder Aufgabe." Damit stand die Liste doppelt -- im Bild und
daneben -- und wer sie mitschreibt, legt sich zugleich darauf fest, was
drinsteht. Aendert sich das Menue, luegt der Satz.
Jetzt "Was du teilst und was du erstellst, bleibt am Projekt." Das sind die
zwei Haelften, die das Menue selbst zieht: ueber dem Trenner steht, was man
sendet und teilt, darunter, was man erstellt. Beide Verben stehen so in den
Eintraegen.
Der Textblock wird dadurch eine Zeile kuerzer, die Luft zur Zeichnung waechst
von 155 auf 199. Die Zeichnung bleibt, wie sie ist: sie steht mit 96 und 97 px
schon knapp an der Schutzzone und kann nicht mehr breiter werden.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Zusammengeschrieben und nicht mit Bindestrich, weil die Breite entscheidet:
"Chat-Nachrichten werden" misst 916 px und laeuft ueber die 896 der
Schutzzone, "Chatnachrichten werden" sind 879. Beide Schreibweisen sind
korrekt.
Ebenfalls verworfen: "Aus Chat-Nachrichten werden" (1063 px) und "Aus
Chatnachrichten werden" (1027 px) -- mit "Aus" passt die Zeile nicht mehr,
ohne bleibt der Satz vollstaendig.
Nach dem Einsetzen am gerenderten Blatt nachgezaehlt statt nur gerechnet:
zwei Zeilen zu 879 und 733 px, Gesamthoehe 158 = zweimal die Zeilenhoehe.
Kein Umbruch.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
"Aus Nachrichten werden / Aufgaben im Projekt." statt "Getippt, / und schon im
Projekt." -- die Aussage steht damit in der Ueberschrift statt nur im Bild.
Mit breite.mjs gemessen, bevor sie in die Datei kam: 860 px in der ersten und
733 in der zweiten Zeile bei 896 erlaubten. "Aufgaben im richtigen Projekt."
waere mit 1067 px uebergelaufen.
Die Beschreibung faellt weg. Die Ueberschrift sagt es, die Bewegung zeigt es,
und die Systemzeile im Bild bestaetigt es -- ein Satz darunter waere die dritte
Stelle fuer dieselbe Aussage.
Die gut hundert Pixel, die dadurch frei werden, gehen an die Zeichnung: visW
von 700 auf 776, mittig bei visLeft 152. Luft zum Text 118, derselbe Wert wie
auf Slide 1.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Beide waren ungefaehr gleich gross und lasen sich damit als gleichwertig. Sie
sind es nicht: der Ausschnitt traegt das Produkt, die Plaettchen tragen nur
die Ausgangslage.
Platz war da. Gemessen endet die linke Haelfte samt Leitung bei x = 344, der
Kasten begann erst bei 464 -- also 120 Einheiten ungenutzt. Der Kasten steht
jetzt bei 388 und ist um 1,28 skaliert; die Zeichnung wird dadurch nur
geringfuegig kleiner, das Verhaeltnis aendert sich um rund ein Drittel.
Die Projektnummer misst dadurch wieder 15,8 px statt 12,4. Sie ist der Beleg
fuer den Fliesstext ("Jeder Kanal haengt an seiner Projektnummer") und muss
lesbar bleiben.
visBottom von 120 auf 70: die Zeichnung sass sonst hoch, mit 204 px Leere
unten und nur 99 zum Text. Jetzt 154 und 149, also in einer Reihe mit Slide 3
und 4.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Duenner half nicht, im Beitrag sah es aus wie vorher. Die Slide braucht ihn
auch nicht: sie besteht aus drei Nachrichten, die aufeinander folgen, und die
Aufgabenkarte ist das einzige Element mit einer gelben Marke ("Offen") -- der
Blick geht ohnehin dorthin. Ein Rahmen sagt nochmal, was die Anordnung schon
sagt, und kostet dafuer die Ruhe der Flaeche.
Mit ihm faellt letzterAnhang weg: blase() merkte sich die Lage der zuletzt
gezeichneten Anhangkarte, damit der Rahmen nicht aus einer zweiten Rechnung
kommt. Das liest jetzt niemand mehr.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sechs Pixel waren plump -- er trug mehr Farbe als die Karte, auf die er zeigen
soll, und im Profilraster wurde daraus ein gelber Balken. Jetzt drei.
Vier Alternativen geprueft und gerendert: ganz weg, ein weicher Schein, eine
gelbe Kante links, ein duenner Ring. Jede zusaetzlich auf Feed-Breite (480 px)
heruntergerechnet, weil dort entschieden wird, ob eine Linie noch etwas sagt.
Duenner als drei haelt das nicht aus: bei 480 px sind drei Pixel noch gut
einer, darunter verschwindet die Linie.
Der duenne Ring gewinnt, weil er als einziger die Aufgabe des alten behaelt,
naemlich auf genau diese Karte zu zeigen. "Weg" nimmt der Slide ihren Zeiger,
Schein und Kante markieren einen Zustand statt hinzuweisen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sie hatte einen Anlauf, der links vor dem Nullpunkt begann -- ein Rest aus der
Fassung, in der die Zeichnung ueber zwei Slides lief und auf Slide 1 schon
sichtbar war. Die ist laengst zurueckgenommen; ohne Nachbarslide kam das
Stueck aus dem Nichts und versprach einen Zusammenhang, den es nicht gibt.
Jetzt beginnt sie bei "Angebot" und endet bei "Materialliste", also an beiden
Enden an etwas.
Die Raender werden dadurch gleichmaessiger: 99 links zu 107 rechts statt 92 zu
106.
Dazu drei Stellen, die noch den zweiseitigen Aufbau beschrieben, obwohl er
nicht mehr existiert: der Kommentar am Slide-Eintrag sprach von einem
negativen visLeft (er ist 92), die Slide-Tabelle in POST-6.md behauptete "die
Leitung beginnt schon auf Slide 1", und ein Absatz erklaerte die Sonderregel
fuer die Slide-Kante. Ausserdem ein doppelter Kommentar in visKanaele.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Geprueft im laufenden Team-Chat: an jeder Nachricht haengt ein Menue mit
Reagieren, Antworten, Im Thread antworten, Anpinnen, Aufgabe erstellen,
Bearbeiten, Loeschen. Das ist die Funktion, die die Website meint mit "Aus
'mach das mal' wird mit einem Klick eine echte Aufgabe".
Die Animation zeigt jetzt genau das: Tobias' Nachricht anfassen, der Pfeil
erscheint an ihr, Menue auf, "Aufgabe erstellen", die Aufgabenkarte klappt in
der Nachricht auf, die Systemzeile bestaetigt sie im Projekt.
Tobias' Nachricht und keine andere: die Aufgabenkarte aus der Quelle traegt
"Tobias Wagner · offen" als Zustaendigkeit. An einer fremden Nachricht muesste
der Name erfunden werden. So bleiben alle vier Felder der Karte genau die aus
GeneralTeamChatPage.tsx.
Der Vorgaenger nahm das Menue hinter dem Pluszeichen. Das war sauber belegt --
Datei, Zeile, Grep ueber beide Repos, dazu die Staging-API, die eine Aufgabe
nur mit contact/company/lead/project verknuepft und eine Nachricht als Bezug
gar nicht kennt -- und trotzdem falsch. Ein Pitch-Paket vom Juli belegt, was im
Juli gebaut war, nicht was das Produkt heute kann. Wo eine Aussage der Website
keine Entsprechung im vorliegenden Code hat, ist das ein Grund nachzufragen und
nicht, die Aussage auf den Code zu biegen. Steht so in POST-6.md §6.
Sechs statt acht Sekunden: das Tippen faellt mit dem richtigen Weg weg.
Instagram nimmt je Carousel-Element drei bis sechzig Sekunden an, die Laenge
richtet sich also allein nach dem Ablauf.
Dazu in den Bausteinen: fuenf Symbole fuer das Menue, und eine Blase kann eine
zweite Anhangkarte tragen, die ueber einen Anteil aufklappt -- aufgedeckt per
clipPath, nicht gestaucht.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die erste Fassung hatte den Ablauf im Kreis: getippt wurde "Danke. Ich habe
dazu direkt eine Aufgabe erstellt.", abgeschickt -- und *danach* wuchs an
dieser Nachricht eine Aufgabenkarte. Sie meldete also eine Aufgabe, die es
noch gar nicht gab, und wurde anschliessend selbst zu einer.
Nachgesehen in GeneralTeamChatPage.tsx: eine Aufgabe entsteht ueber das Menue
hinter dem Pluszeichen ("Aufgabe erstellen", Zeile 275). Das Ergebnis ist
Nachricht m4 -- Text UND angehaengte Aufgabenkarte in einem -- gefolgt von der
Systemzeile m5. Ein Kontextmenue an einer bestehenden Nachricht gibt es dort
nicht; eine Umwandlung "Nachricht -> Aufgabe" zu zeigen waere eine Funktion,
die wir nicht haben.
Jetzt also: Notiz tippen, Pluszeichen, "Aufgabe erstellen" waehlen, und beides
geht zusammen als eine Nachricht raus, danach die Bestaetigung im Projekt. Der
Satz im Perfekt stimmt damit auch -- wenn die Nachricht ankommt, haengt die
Aufgabe daran.
Am Ende wird nichts mehr zurueckgenommen. Der Vorgaenger blendete die neue
Nachricht wieder aus, damit der Schleifenstoss unsichtbar wird; das sah aus,
als loesche sich eine abgeschickte Nachricht von selbst. Eine Schleife darf
springen, eine Nachricht darf nicht verschwinden.
Dazu ein Mauszeiger, der die Bedienung erzaehlt -- ohne ihn geht ein Menue
auf und man weiss nicht, warum -- und acht statt fuenf Sekunden: der Ablauf
hat jetzt fuenf Schritte, und jeder braucht seinen Moment.
Was ein Standbild traegt, traegt eine Animation nicht automatisch mit: auf
Slide 3 liest sich dieselbe Nachricht einwandfrei, weil dort ein Zustand steht
und keine Reihenfolge.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Export legte die Datei nur unter animation/ im Repo ab. Die Bilder gehen
seit jeher nach ~/Downloads, und von dort laedt man hoch -- ein Video an einem
anderen Ort ist eine Inkonsequenz, die man erst merkt, wenn man es sucht.
Jetzt beides: Downloads zum Hochladen, animation/ zum Versionieren. Wie beim
Bildexport wird in Downloads nichts ueberschrieben, eine zweite Ausgabe heisst
"-1" -- eine Datei, die vielleicht schon hochgeladen wurde, gehoert nicht
ersetzt.
Der Weg ueber die Kommandozeile schreibt weiterhin nur ins Repo.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Zwei Nachbesserungen an Post 6: eine Slide mehr und Zeichnungen, die nicht
mehr flach aussehen.
DIE FUENFTE SLIDE KOMMT VON DER WEBSITE
Die App gibt es noch nicht, und die Website sagt das bereits. In
components/sections/ChatDemoSection.tsx steht unter der Fahne comingSoon
genau dieser Zustand: ein Handy-Mockup, verwischt, und darueber ein
Absperrband aus dem Bau -- gedreht um -13 Grad, in accent-yellow F1B729 mit
Kanten in 171106, darauf immer wieder Schutzhelm und BALD VERFUEGBAR.
Ein Zwischenstand hatte hier einen selbst erfundenen gelben Aufkleber
"In Arbeit". Das war eine zweite Bildsprache neben einer vorhandenen.
Uebernommen ist jetzt die der Website, samt Winkel, Farben und Wortlaut.
Auch der Inhalt des Schirms kommt von dort und nicht aus dem Pitch-Paket:
Heizungsprojekt Schulz, "4 Mitglieder · 2 online", die vier Nachrichten aus
seedMessages, die Blasenfarben 0D6E6E fuer eigene und FFFFFF mit Rand E9E7E5
fuer fremde, der warme Grund hsl(30 17% 95.5%). Ueberschrift und Fliesstext
ebenso: "Der Chat fuer unterwegs wird gerade gebaut."
Das Geraet selbst ist eine bewusste Abweichung. Die Website zeichnet nur
einen hellen Umriss, border 4px D1D5DB; auf einer Slide, die selbst hell ist,
faellt der in sich zusammen und sieht nach Platzhalter aus. Hier steht ein
richtiges Geraet: dunkler Korpus, heller Grat, Schirm eingelassen, Insel und
Tasten. Die Abweichung betrifft den Rahmen, nicht den Inhalt. Verwischt wird
schwaecher als dort -- auf der Website liegt das Handy gross neben Fliesstext
und darf unlesbar sein, hier ist es klein, und bei voller Staerke blieb Brei.
DIE TIEFE
Zwei Anlaeufe waren falsch. Der erste legte graue Flaechen hinter die
Elemente: das nimmt den Zeichnungen ihre Durchsichtigkeit und setzt einen
Kasten auf den Punktgrund, der dort nicht hingehoert. Wieder raus, die
Zeichnungen sind wieder durchsichtig.
Der zweite waren bessere Schatten allein. Richtig, aber zu wenig. Die
Schatten des Produkts sind in ui/theme.css gestaffelt und nicht einlagig:
--shadow-md 0 4px 16px -2px + 0 2px 4px -1px
--shadow-lg 0 12px 32px -4px + 0 4px 8px -2px
Zwei Lagen, weil eine allein nicht beides kann: die enge dunkle Kante setzt
das Element auf die Flaeche, die weite helle hebt es davon ab. In SVG zwei
feDropShadow im selben Filter. Vorher stand dort einer mit dy 7.
Gebracht hat es der Stapel. post1.html hat ihn als Bildrahmen im CSS, fuer
Screenshots; hier ist er in SVG nachgebaut, mit denselben Werten:
.sheet-mid rotate(-2.4deg) translate(-2.2%, 3%) scale(.975)
.sheet-back rotate( 3.2deg) translate( 3%, 5.5%) scale(.95)
Er gibt Tiefe, die ein Schatten allein nicht schafft, und sagt, dass hinter
der einen Ansicht weitere liegen. Die hinteren Blaetter sind leer --
Andeutung, keine Kopie. Auf Slide 1 und 2, wo ein Bildschirm zu sehen ist;
nicht auf Slide 3, wo ein Ausschnitt einer Unterhaltung steht, und nicht auf
Slide 4, die eine Ueberlagerung ist.
AUS DER QUELLE NACHGEHOLT
Beim gruendlichen Durchgang durch GeneralTeamChatPage.tsx sind drei Dinge
aufgefallen, die vorher fehlten oder falsch waren:
- Die Datumsmarke "Heute · 30.07.2026" ueber dem ersten Beitrag und die Zeile
"Maike Berger schreibt gerade ..." ueber dem Eingabefeld. Beides gibt der
Unterhaltung Struktur, ohne eine Flaeche zu behaupten.
- Der offene Kanal ist grau hinterlegt mit Rand und shadow-sm, nicht violett.
- Die Blase muss so breit sein, wie ihr Anhang es braucht. Vorher richtete
sie sich nur nach dem Fliesstext, und "Materialliste pruefen · faellig
31.07.2026" wurde abgeschnitten -- an einer Stelle, an der der Titel die
Aussage traegt.
ZWEI FALLEN
Gedrehte Blaetter ragen aus dem Kasten. Das hinterste steht um 3,2 Grad
gedreht und um 3 und 5,5 Prozent verschoben; seine Ecken lagen bis zu 24 px
ausserhalb der 92-px-Schutzzone. Der Ueberstand wird jetzt gerechnet:
stapelRand() schickt die vier Ecken durch dieselbe Kette wie das Blatt.
getBBox() kennt keine Beschneidung. Das Absperrband war erst auf die 175 %
der Website gezogen und am Geraet abgeschnitten -- im Bild richtig, in der
Messung ein Ueberstand von 146 px, den es nicht gab. Es ist jetzt nur so
lang, wie es bei -13 Grad quer ueber das Geraet sein muss.
GEPRUEFT
Raender 93 / 227 / 110 / 140 / 350, Luft 116 / 79 / 190 / 141 / 77 px, alle
Ueberschriften innerhalb der Schutzzone, 214 CSS-Regeln, Konsole ohne Fehler,
fuenf PNGs aus dem echten Ausgabeweg bei 2160 x 2700. Downloads blieb leer,
der Projektstand unveraendert.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Der Team-Chat war zum Montag nicht fertig. Er rueckt auf Mi 26.08., und
alle Beitraege danach ruecken einen Slot mit. Die Spanne endet damit am
18.09. statt am 16.09.
Team-Chat Mo 24.08. -> Mi 26.08.
Form Builder Mi 26.08. -> Fr 28.08.
Zettelwirtschaft Fr 28.08. -> Mo 31.08.
...
Haeufige Fragen Mi 16.09. -> Fr 18.09.
NICHT UEBER START VERSCHOBEN
Der kuerzere Weg waere gewesen, START um einen Termin nach hinten zu
setzen -- so ist es beim letzten Mal gemacht worden, als sich der Start
selbst verspaetete. Diesmal geht das nicht: die ersten vier Beitraege
sind am 14., 17., 19. und 21.08. tatsaechlich erschienen. Ein Plan, der
rueckwirkend andere Termine behauptet, ist keiner.
Stattdessen gibt es AUSGELASSEN, eine Menge von Terminen, die slots()
ueberspringt. Beim naechsten Ausfall ist es ein Eintrag mehr, und die
Historie bleibt richtig.
DREI STELLEN HINGEN AN DER ALTEN RECHNUNG
- Die gelbe Markierung stand fest auf zwei Zeilen ("if i < 2"). Fertig
im Generator sind inzwischen vier. Jetzt FERTIG = 4, und der Satz
darueber nimmt sein Zahlwort aus derselben Konstante -- vorher haette
man beides von Hand gleich halten muessen.
- "Das erste Reel steht am 09.09." war schon vor dieser Verschiebung
falsch: der Reel lag auf dem 11.09. Vermutlich ein Rest davon, dass
Workflow-Engine und Projektmanagement einmal die Plaetze getauscht
haben. Das Datum wird jetzt aus dem Plan gerechnet und steht bei
14.09.
- Stand im Kopf auf 23.08.2026.
Instagram-Redaktionsplan.html ist per .gitignore nicht versioniert, nur
die Quelle und das PDF. Wer die Datumsangaben braucht, baut mit
python3 redaktionsplan/bauen.py neu.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Lag seit dem 12.08. unversioniert im Arbeitsverzeichnis: eine Seite, die
neun Rahmen-Varianten einer Titel-Slide nebeneinanderstellt. Nichts im
Repo verweist darauf, sie laeuft fuer sich.
Kommt als eigener Commit, damit sie sich ohne den Beitrag zurueckziehen
laesst, falls sie nur ein Zwischenstand war.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Der Text lag bisher nur im Gespraech, und genau davor schuetzt POST-2.md seit
Post 2. Also dieselbe Form: Slides, Bildunterschrift, Herkunft der Texte,
offene Punkte, Fallen.
Gegen die Vorgaben des Redaktionsplans geprueft und nicht geschaetzt: Haken im
ersten Absatz mit 106 von 125 Zeichen, Fliesstext 671 von erlaubten 300 bis
800, acht Hashtags unten abgesetzt, und die Suchwoerter stehen zusaetzlich im
Fliesstext -- Handwerk, Automatisierung, Workflow, Ausloeser, Aktionen,
Vorlage, Anfrage, Aufgabe.
"Handwerk" kam zuerst nur in den Hashtags vor. Der Plan verlangt es
ausdruecklich auch im Text, deshalb steht jetzt "Handwerksbetrieben" im Haken.
Drei Wendungen kommen bewusst nicht vor: "Verbinden statt ersetzen" gehoert
Post 3, "Wenn-dann statt Handarbeit" ist die Ueberschrift von Post 1, und
Em-Dashes verbietet rules.md 4. Erfundene Uhrzeiten oder Vorgaenge ebenso
wenig.
Nebenbei stand in der README noch "3 Slides" aus einem Zwischenstand.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Das Video ist geschnitten. Die Einblendungen liegen auf einer externen
Platte, im Repo bleibt die Werkbank: 381 Dateien und 24 MB gerenderte
Ausgabe sind raus, png/ und sequenz/ legt bauen.mjs beim naechsten Lauf
selbst wieder an.
WABENFELD
Es blendete als Ganzes auf, und das ist bei der einen Zeichnung, die
etwas behauptet, zu wenig. Jetzt steht zuerst die Nabe, dann wachsen die
Waben in fuenf Wellen nach aussen, und die Straenge ziehen jeweils kurz
nach ihrer Zelle nach. Rueckwaerts zieht sich das Feld in die Marke
zurueck, statt von aussen zu zerfallen.
Die Bewegung ist die introTimeline aus HoneycombSection.tsx, uebernommen
und nicht erfunden: scale 0,16 auf 1, back.out(1.75), gestaffelt nach
Abstand zur Mitte, danach die Straenge mit eigener Deckungsrampe. Weil
unsere Belegung nur fuenf verschiedene Abstaende kennt, sind es fuenf
Wellen und nicht achtzehn Einzelereignisse, und das liest sich als eine
Bewegung.
Dafuer brauchte der Zeitverlauf ein zweites Mass. Bisher frass der
Verzug vom Rest der Zeit: die letzte von achtzehn Zellen haette ein
Zehntel der Zeit fuer dieselbe Bewegung gehabt und waere hereingeschnappt,
waehrend die erste hereinschwebt. Mit data-d bekommt ein Element ein
eigenes Fenster fester Laenge. Ohne data-d bleibt alles wie es war, die
anderen neun Komponenten laufen unveraendert durch den alten Pfad.
50 Bilder statt 12, bei 25 fps also zwei Sekunden herein und 1,2 hinaus.
Die Bewegung ist bei 0,94 fertig, die letzten Bilder stehen still. Masse
und Ausschnitt sind unveraendert, 2168 x 1906.
DIE PNGS WAREN IN DER ERSATZSCHRIFT
KOMP_BEREIT wartete auf document.fonts.ready, bevor die Karte im DOM
stand. Zu dem Zeitpunkt braucht die Seite keine Manrope, es laeuft kein
Ladevorgang, und das Versprechen loest sofort auf -- erfuellt, ohne dass
ein Byte Schrift da waere. Danach wurde gebaut, und ob die Schrift bis
zur Messung ankam, entschied der Zufall: dieselbe Komponente
hintereinander gemessen kam abwechselnd 984 und 1010 px breit heraus.
Das ist die Falle aus rules.md 4, nur eine Ebene frueher als dort
beschrieben. document.fonts.load() holt eine Schriftlage unabhaengig
davon, ob gerade jemand sie benutzt, erst danach ist ready eine Aussage.
Dieselbe Wette steckte in der Wortmarke von logo-bug, einem img mit
width:auto, deshalb wartet der Aufbau jetzt auch auf die Bilder.
Sieben der zehn zuletzt gebauten Dateien waren betroffen und 2 bis 4
Prozent zu schmal. Die reinen Zeichnungen verraten es nicht, ihr SVG hat
feste Masse -- ring-kern war gegen einen frischen Render bildgleich.
STANDBILD KOMMT AUS DER SEQUENZ
Der Dreiteiler im Schnitt haengt daran, dass -ein, Standbild und -aus an
den Stoessen dasselbe Bild zeigen. Als zweite Aufnahme war das bisher nur
wahr, weil es zufaellig stimmte. Beim Wabenfeld stimmte es nicht mehr:
dort tragen die Zellen waehrend der Bewegung ein transform, und nach dem
Wegnehmen rastert Chrome eine Spur anders als bei einem Element, das nie
eines hatte. Der Unterschied lag bei einer Stufe auf verstreuten Pixeln,
also unsichtbar, aber die Zusage war weg. bauen.mjs schreibt das
Standbild jetzt aus dem letzten Bild der Einblendung: dieselbe Datei
statt derselbe Anblick.
NEBENBEI
- Bauchbinde Betrieb, Chip "Vierte Generation" und Endkarte sind raus.
Die Bauchbinde liess sich ueber ?name= und ?rolle= ohnehin aus der
ersten erzeugen, ein Schlussbild gehoert in den Schnitt und nicht als
Einblendung darauf.
- Das Wabenfeld steht ohne das blasse Feld aus leeren Waben. Auf dem
weissen Blatt traegt das die Zeichnung, ueber Videomaterial ist ein
Schleier aus halbdurchsichtigen Sechsecken im Weg. Der Ausschnitt wird
seitdem aus den belegten Waben gerechnet. In post3.html bleibt beides.
- strangForm() heisst hier strangPfad() und liefert nur den Pfad: die
Form muss je Bild neu gerechnet werden, weil ein Ende wandert. In den
Post-Seiten bleibt strangForm(), die Rechnung darin ist dieselbe.
- liste.json und README stehen auf dem Stand der zehn Komponenten.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
POST 3
Slide 2 zeigt den Aufbau: HiveGrid in der Mitte, die eigenen Module auf dem
gelben Ring, die fremden Programme aussen am gestrichelten Kreis. Nachbau des
Schaubilds aus dem Prototyp, aber in den Markenfarben -- Magenta ist keine
(rules.md 2) -- und ohne Produktnamen im Kern.
Achtung: das ist eine andere Aussage als in post2-alt.html, wo in der Mitte
das Branchenprogramm liegt und HiveGrid ausdruecklich der Ring ist. Steht als
Warnung im Code. Die Ueberschrift "Der Kern bleibt." passt seit dem Wechsel
der Mitte nicht mehr zum Bild und ist noch offen.
Slide 1 traegt nur noch die Ueberschrift; ein leerer Fliesstext erzeugt jetzt
keinen leeren Absatz mehr. Das Wabenfeld ist enger geschnitten (Faktor 1,301
statt 1,227) und steht am Anschlag: 96 px zur Slide-Kante, die Sicherheitszone
liegt bei 92. Ueberschriften in 76 px und 3 px versetzt wie in post2-alt --
gemessen, nicht geschaetzt.
Zwei Fehler, die dabei aufgefallen sind:
- Die Andock-Kacheln lagen auf denselben Strahlen wie die Module und
beruehrten sich. Dieselbe Ueberlappung hat der Exportpruefung eine Spanne
von 37 vorgetaeuscht, wo eine fehlende Marke 0 ergeben muss -- der
Gegentest kam durch, obwohl die Marke fehlte. 22,5 Grad Versatz behebt
beides.
- Die Pruefung kannte nur den Ausschnitt des Wabenfelds und haette auf
Slide 2 an der falschen Stelle gemessen. Der Ausschnitt wandert jetzt mit
in die Ablage, wabenZonen heisst darum markenZonen.
VIDEO
Neuer Ordner video/ mit 13 Einblendungen fuer den Schnitt, jede als Standbild
und als Bildsequenz mit Ein- und Ausblendung, alle mit Alphakanal. Gerendert
aus komponenten.html von bauen.mjs ueber CDP; kein ffmpeg noetig, weil eine
Bildsequenz dieselbe Transparenz traegt wie ProRes 4444.
Der Schatten fehlte zunaechst ganz: die Karte trug clip-path fuer die Ecken
und box-shadow fuer den Schatten, und clip-path beschneidet ihn mit. Genau so
steht es in rules.md 3. Sitzt jetzt als drop-shadow auf einer Huelle.
NEBENBEI
- Das ZIP hiess in allen Projektdateien "hivegrid-post1-loesung", weil sie
voneinander kopiert wurden. Kommt jetzt aus PROJECT.
- Das rechte Element-Feld liess sich nicht schliessen, wenn es nicht ganz ins
Fenster passte: sein Knopf rutschte als erster hinaus. Knopf nach vorn,
Escape hebt die Auswahl auf, max-width auf den Feldern.
- uebersicht.html schrieb "1 Slides".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Nummer 2 im Redaktionsplan, im Generator das dritte Projekt. Kein Carousel:
eine Haltung, die man durchwischen muss, ist keine.
Das Bild ist das Wabenfeld der Startseite, uebernommen aus
HoneycombSection.tsx und nicht nachempfunden -- derselbe Umkreisradius,
dieselbe Achsrechnung, dieselben Zellnummern. Damit stimmen WABE_MARKEN und
HONEYCOMB_DEFAULT_LOGO_PLACEMENTS ueber dieselben Nummern ueberein. Die vier
Waben "In Arbeit" sind raus: auf der Startseite ein Versprechen, im Feed ein
Eingestaendnis.
Der Ausschnitt ist enger als die Slide (880 statt 1080), das Feld also um
1,227 vergroessert -- ein Ring leerer Waben rundherum kostete nur Platz.
Text mittig wie in post2-alt.html.
Sechs der 14 Marken sind PNG und damit dieselbe Wette wie ein Screenshot
(rules.md 7). wabenZonen() prueft sie deshalb einzeln nach: ein Punktraster
ueber den ganzen Markenkasten, dessen Ecken das Gelb der Wabe tragen. Fehlt
die Marke, ist der Kasten einfarbig und der Export wiederholt. Gegengetestet,
indem DATEV absichtlich weggelassen wurde.
Die sechs Zeichnungen von Post 2 sind aus der Kopie raus, 5237 auf 4270
Zeilen. Die Band-Maschinerie bleibt, laeuft bei einer Slide aber leer -- im
Kommentar steht jetzt, dass ihre Stuetzpunkte an Post 2 geeicht sind.
Nebenbei: uebersicht.html schrieb "1 Slides", faellt erst mit dem ersten
Einzelbild auf.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dazu der schon offene Umbau: der Starttermin steht als Konstante oben,
Datumsspanne und Stand ziehen sich daraus statt fest im Text zu kleben.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Grundlage ist Noahs Absatz von der Website, aber aus der Ich-Form geholt:
das Konto ist hivegrid.de, nicht Noah. Er wird in der dritten Person
eingefuehrt, danach traegt "wir" den Text -- das sind die Gruender, und
Noah ist einer davon.
793 Zeichen, Haken im ersten Absatz mit 121, neun Hashtags. Gemessen und
gegen die Vorgaben aus dem Redaktionsplan geprueft, nicht geschaetzt.
"Verbinden statt ersetzen" bleibt fuer den 14.08. reserviert und kommt
darin nicht vor.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Zwei Zoom-Ebenen lagen uebereinander, und beide waren falsch. Aussen ein
Rad-Zoom, der nur die iframes skaliert hat -- Beschriftung, Abstaende und
Polster stehen ausserhalb der Transformation und blieben stehen, also
standen beim Herauszoomen riesige Ueberschriften ueber winzigen Streifen.
Und innen reagierte die Post-Seite im iframe weiter auf ihr eigenes
Mausrad, weil sie ihren Canvas mitbringt.
Jetzt: jeder Streifen wird auf die Fensterbreite eingepasst, gescrollt
wird nur hoch und runter. Die iframes bekommen pointer-events: none --
die Uebersicht ist zum Ansehen da, bedient wird im Projekt selbst.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Neu unter Projekt -> "Alle Projekte im Streifen". uebersicht.html zeigt die
Streifen aller drei Projekte gestapelt, ohne Sidebar, auf derselben Art
Flaeche wie der Generator: ziehen schiebt, das Rad zoomt, Fit passt ein.
Die Seite baut die Slides nicht nach. Jedes Projekt kommt als iframe mit
?nur=streifen; in diesem Modus blendet die Post-Seite ihre Bedienoberflaeche
aus und zeigt den Streifen in natuerlicher Groesse, skaliert wird aussen.
Ein Nachbau wuerde irgendwann von dem abweichen, was der Generator zeigt,
und waere dann schlimmer als keine Uebersicht.
Drei Dinge, die dieser Modus regelt:
- Es wird nichts gespeichert (stateLocked). Drei Kacheln, die beim
Schliessen ihren Stand zurueckschreiben, waeren genau die Falle aus
POST-2.md 6.
- Die Ansicht steht fest auf "streifen". Post 2 stand im Stand auf
"einzeln" und meldete deshalb 1080 px statt der vollen Breite.
- Der Auswahlrahmen faellt weg; in der Uebersicht ist keine Slide "die
aktuelle".
Die Streifenbreite kommt per postMessage von der Post-Seite: die Zahl der
Slides ist je Projekt anders und soll nicht zweimal gepflegt werden.
Beim Einpassen zaehlen Beschriftung, Abstaende und Polster nicht mit --
die skalieren nicht, weil sie ausserhalb des transformierten iframes
stehen. Ohne diese Rechnung lief die letzte Reihe unten hinaus.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Das Akzentwort bekommt den Balken aus der Landingpage
(LandingPageClient.tsx: h-[3px], -bottom-1, bg-current, im Ruhezustand auf
22 % gestaucht, bei Hover voll). Wir nehmen die volle Breite, ein Standbild
kennt kein Hover. Die Masse stehen in em, weil der Balken dort unter 62 px
Schrift liegt und hier unter 76 -- auf der Titel-Slide unter 88.
Zum Ausprobieren zwei Schalter unter "Versuch": das Raster aus post1.html
laesst sich wieder einschalten, und Ueberschrift plus Fliesstext lassen
sich zentrieren. Beides steckt im Projektstand, die alte Komposition ist
also einen Klick entfernt.
Ausserdem:
- Der Rahmen um Noahs Foto traegt jetzt --accent-teal statt der
ausgewaschenen Fassung --accent-teal-light.
- Die vier schwebenden Kacheln auf Slide 2 sind raus.
- Das Band ist halb so dick und faengt auf Slide 3 erst hinter der Karte
an, kommt also dahinter hervor statt links schon dazuzuliegen.
BAND_ANSCHNITT und BAND_AUSLAUF steuern das, ohne die Stuetzpunkte zu
verschieben -- die Kurve bleibt an der Naht verankert.
- Auf Slide 6 stehen die Texte buendig zur Oberkante der Wabe. Die
Grundlinie lag 19 px zu tief, das ist die Versalhoehe von 32 px Manrope.
- .vis svg bekommt overflow: visible. Ohne das wurde der Schatten an der
Kartenkante gekappt: aussen ein grauer Streifen, in den Chamfer-Kerben
graue Keile.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der metallisch schattierte Zylinder ist raus. Er sah fotorealistisch aus
und damit wie ein Fremdkoerper auf einem flachen, ruhigen Blatt. An seiner
Stelle steht eine deckende Flaeche mit einer blassen zweiten dahinter --
kein Verlauf, keine Woelbung, keine Glanzkante.
Zwei Toene, umschaltbar unter "Band" im Bedienfeld: Orange #F1B729 und
"HiveGrid Teal", was --dark-bg #30313D meint und nicht --accent-teal.
Der Unterschied steht jetzt in rules.md, damit die Verwechslung nicht
noch einmal passiert.
Das Band laeuft ueber Slide 3 bis 5 (BAND_VON / BAND_BIS). Slide 1 und 6
sollen ruhig sein, Slide 2 traegt ihre eigene orangene Leitung. Gezeichnet
als geschlossene Flaeche statt als dicke Linie: eine Linie bekommt am Ende
eine Kappe rechtwinklig zur Laufrichtung, und die stand bei schraeger Bahn
seitlich ueber die Naht.
Schatten sind fuer dieses Theme erlaubt, entgegen 5. Ohne sie stehen die
Karten gestochen auf dem Grund statt darueber. Als SVG-feDropShadow, weil
die Karten gezeichnet sind und ein CSS-Schatten vom clip-path beschnitten
wuerde. Noch nicht 3-fach exportgeprueft -- das steht als Auflage in der
Regel.
Ausserdem:
- Slide 1: die G-Marke in der Bauchbinde statt einer leeren Wabe, das
Badge der Landingpage (Monospace, 10 Grad gedreht) statt des Chips, und
das Foto fuellt die Inhaltsspalte statt 620 von 1080 px.
- Slide 6: das selbst gezeichnete Konfetti war ein Kleckshaufen und ist
jetzt "rocket" aus dem Feather-Satz.
- Kacheln haben wieder einen Boden statt harter Kontur.
- migrateState 7 raeumt die gespeicherten Vis-Positionen einmalig weg:
die Masse haben sich geaendert, und der offene Tab schreibt die Datei
sonst zurueck (POST-2.md 6).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Das Band laeuft als durchgehende Zeichnung ueber den ganzen Streifen,
jede Slide zeigt ihren Ausschnitt ueber --slide-i. An der Naht laeuft es
weiter statt neu anzusetzen -- der Uebergang, den ein Carousel sonst
nicht hat.
Es ist ein Rohr, kein Farbband: vierzig Streifen aus einer Rampe, die
Glanzstelle eingerueckt bei 20 % und fast weiss, der Kernschatten bei
78 % statt an der Unterkante, darunter Licht vom Grund zurueck. Der
erste Anlauf mit vier weichen Streifen sah nach Bonbon aus.
Damit das Band quer durch die Komposition laufen darf, liegt jede
Visualisierung jetzt auf einer deckenden Karte. Linienwerk auf
Transparenz verschwindet darin. Slide 5 musste dafuer von 988 auf 896
schrumpfen, Slide 6 bekam links Einzug.
Ausserdem:
- Feather-Icons aus @subframe/core statt selbst gezeichneter Zeichen,
auf Slide 2 bis 5. Slide 6 behaelt ihre Nachbauten aus WaitlistNext.
- Die echte G-Marke auf dem Ring, als Polygon statt als Bilddatei.
- Die 01/02/03 auf Slide 6 sind raus.
- Slide 1 uebernimmt den Rahmen der Ueber-uns-Seite: Radius 38 auf
teal-hellem Grund, Foto 4,2 % eingerueckt.
- Der Grund ist wieder #FFFFFF, wie Post 1 und Post 2. Den Kontrast
tragen die Karten jetzt ueber die Kante (#D5DBE1).
- Slide 4 und 5 hiessen abweichend vom Original; Beschriftungen und
Fliesstext gleichen jetzt post2.html.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die Seite baute nicht mehr auf, weder headless noch im Browser. Der Grund
stand im Statusfeld, aber meine Proben haben zu frueh gemessen und ihn nie
zu sehen bekommen: "Fehler beim Laden: formWorkflow is not defined".
Meine Ersetzung fuer Slide 3 lief von "function visWechseln" bis zum
Kommentar "Slide 4". Genau dazwischen lagen die Formen fuer Workflow,
Trichter und Megafon. Sie sind wieder da, diesmal als Einfuegung vor dem
Kommentar statt als Bereichsersetzung.
Das war derselbe Fehlertyp zum dritten Mal in diesem Projekt: ueber einen
Bereich zwischen zwei Ankern loeschen, zwischen denen mehr steht als
gedacht. Ich ersetze ab jetzt nur noch ueber den genauen Textabschnitt und
fuege sonst ein.
Zur Diagnose: node --check faellt hier nicht auf, weil eine fehlende
Funktion erst zur Laufzeit auffliegt. Was es gefunden haette, ist eine
Probe, die lange genug wartet und den Statustext ausliest -- die Seite
schreibt ihren Ladefehler dort hinein.
Slide 3 hat mehr Luft bekommen: Karte 580 statt 500 hoch, Zeilenabstand 78
statt 66, Innenrand 52 statt 48.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die Badges ueber den Ueberschriften sind wieder aus. Auf einer Website
ordnet so eine Pille die Sektion ein, auf einer Slide nimmt sie Platz weg,
ohne etwas zu sagen, was die Ueberschrift nicht schon sagt.
Slide 1 war bisher nur entkritzelt: derselbe Aufbau, nur ohne Zeichnungen.
Jetzt ist das Foto selbst chamfert -- die Markenform, und ein dunkles Bild
auf hellem Grund braucht keinen Rahmen. Darauf zwei Auszeichnungen, die
Inhalt tragen statt zu verzieren: ein Chip oben rechts mit "Vierte
Generation" und eine schwebende weisse Infokarte unten links mit Wabe,
Namen und Rolle. Das ist das Muster aus Autarc und Phase0. Der
Helm-Umschalter entfaellt hier.
Slide 3 ist kein Bild fuer Chaos mehr, sondern der Vorgang selbst: eine
Migration, die nicht durchlaeuft. Fortschritt bei 34 Prozent, drei
Statuszeilen (Stammdaten uebertragen, Auftraege 1.284 Konflikte,
Buchhaltung abgebrochen) und als Fusszeile Noahs eigenes Argument, die
geschaetzte Dauer von einem halben Jahr. Das ist die Sprache unserer
eigenen Oberflaeche; im Pitch-Screen 1 stehen fehlgeschlagene Laeufe
genauso. Die Vorfassungen waren Metaphern -- gerissene Leine, Sackkarre,
Knaeuel -- und ein Betrieb, der ueber einen Wechsel nachdenkt, versteht
eine abgebrochene Uebernahme ohne Sinnbild.
Der Fehlerton kommt aus den Tokens der Website (accent-orange #E07B54),
nicht aus eigener Erfindung.
Slide 3 ist NICHT im Bild geprueft. Die Maschine hat nur noch rund 0,3 GB
freien Speicher, headless Chrome bekommt die Assets nicht mehr als
Data-URIs eingelesen und bleibt bei "Lade Screens ..." stehen -- bei
post2.html genauso, die seit dem letzten Commit unveraendert ist. Das
Skript selbst ist mit node --check geprueft.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bisher habe ich die Skizzen entschraffiert statt neu gedacht. Das ist bei
Slide 6 offensichtlich geworden: eine Wabe ohne Zittern ist immer noch
meine Wabe und nicht die Sektion, die es auf der Website schon gibt.
Slide 6 ist jetzt ein Nachbau von app/waitlist/WaitlistNext.tsx. Alle Werte
von dort, mit 1,6 hochskaliert, weil die Liste dort 560 breit ist und hier
896: Wabe 54x48 wird 86x77, Schiene links 26 wird 43 also die Wabenmitte,
Abstand 56 wird 90, Nummer 13 wird 21, Titel 20 wird 32, Text 14,5 wird 23.
Auf der Website leuchten die Waben beim Scrollen nacheinander auf und der
dritte ist blass; ein Standbild kennt keinen Scrollstand, hier sind alle
drei aktiv.
Slide 5 ist ein Nachbau des Architektur-Diagramms aus dem Pitch-Paket:
Kern als gefuellter Kreis in der Mitte, farbiger Ring darum, Pille mit dem
Produktnamen auf dem Ring, Module als Kacheln aussen. Das Diagramm sagt
genau, was die Ueberschrift sagt -- der Kern bleibt, der Ring kommt
drumherum. Meine Wabe hatte dieselbe Aussage, aber in einer Form, die es in
unserer Software nirgends gibt.
Zwei eigene Fehler dabei behoben:
Ich hatte fuer das Theme Farben erfunden (#0E1F1E, #F7FAF9). Die Website
hat ein vollstaendiges Token-Set in app/globals.css. Jetzt stehen dort
dessen Werte: surface, text-primary, text-secondary, container-bg,
border-neutral, accent-yellow-light, accent-yellow-dark, accent-teal-light.
Meine Karten hatten Chamfer und Haarlinie zugleich. In lib/chamfer.ts der
Website steht ausdruecklich, dass clip-path den Rand mitbeschneidet und man
stattdessen fuellen soll. Die Karten sind jetzt gefuellt, ohne Rand.
Das Chamfer-Badge der Website ist zurueck. Es steht dort ueber jeder
Sektion, und im Theme modern traegt es die Einordnung: Die Geschichte, Der
Alltag, Der Wechsel, Was gefehlt hat, Die Loesung, So geht's weiter.
Neu im Vorgehen: nach jeder groesseren Aenderung wird das Skript aus der
Datei geschnitten und mit node --check geprueft. Ein doppelt vergebener
Name hat die Seite still lahmgelegt, und die Pruefung findet so etwas in
einer Sekunde statt in einem Renderlauf.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Projekt und Theme waren bisher dasselbe. Jetzt nicht mehr: das Projekt sagt,
welcher Beitrag, das Theme, wie er aussieht. notebook ist die
Zeichenblock-Optik mit Raster, Marker und handgezogenen Formen, modern der
ruhige Grund mit farbigem Akzentwort und schwebenden Karten. Beide Themes
teilen Aufbau, Texte und Kompositionen. rules.md Paragraf 1a haelt fest, was
sie genau trennt.
Das Theme modern folgt Vorbildern aus dem Feed: Zapier, Slack, Autarc,
Photovate, Plancraft. Was ich daraus uebernehme, ist nicht die Optik der
einzelnen Marke, sondern das Gemeinsame -- ruhiger Grund ohne Textur, eine
sehr grosse Ueberschrift mit einem farbigen Wort statt einer Markierung,
schwebende Karten mit Haarlinie, Ablaufketten mit Knoten, gefuellte
Kreis-Haken.
Drei Farben, wie besprochen: Weiss als Grund, Orange als Akzent, Teal als
Zweitfarbe. Teal stand in rules.md bisher als "ungenutzt" und traegt jetzt
Zeichen und Kacheln. Die Schriftfarbe ist ein sehr dunkles Teal statt reinem
Schwarz, damit sie zur Palette gehoert.
Das Raster faellt weg. Die Ebene bleibt im Markup, damit beide Themes
denselben Aufbau haben, sie zeichnet nur nichts mehr.
Slide 4 ist der erste Umbau: der Notizzettel ist raus, die Aufzaehlung bleibt
und wird zur Kette aus Karten mit Zeichenkachel, Beschriftung und Haken,
dazwischen ein Verbinder mit Knoten. Die Form sagt zusaetzlich etwas aus --
die vier Dinge haengen zusammen, statt nur untereinander zu stehen.
Der Menueeintrag zur Alternative fehlte in post1.html und post2.html; er
stand nur in der Kopie selbst. Von dort kam man also nie hin.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rueckmeldung aus dem Team: "Wenn ich das als Handwerker sehe, sehe ich zu
viele Dinge die meine Handwerkersoftware schon kann. Wir muessen ganz spitz
auf die Workflow-Engine, dass das ERP bleibt und CRM/Vertrieb/Marketing
gehen. Die Nische besetzen dann nur wir."
Genau das stand bisher auf Slide 4 und 5: Projektmanagement, Chat,
Mitarbeiter-Management, Projekte, Formulare. Das kann ein
Branchenprogramm alles schon, und damit las sich der Beitrag als
Konkurrenz zu ihm -- im Widerspruch zur eigenen Ueberschrift "Dein
Branchenprogramm bleibt, wo es ist".
Slide 4 nennt jetzt Workflow-Engine, CRM, Vertrieb, Marketing. Slide 5
zeigt dieselben vier plus Automatisierung und KI/MCP, und in der Mitte
steht "Dein Programm" statt HiveGrid: der Kern bleibt, aussen kommt dazu.
Das Wort ERP taucht weiterhin nicht auf, die Aussage ist seine, das Wort
unseres.
Dafuer drei neue Formen: Workflow als Knoten mit Verzweigung, Vertrieb als
Trichter, Marketing als Megafon. Jede nimmt einen Massstab entgegen und
taugt damit als kleines Listenzeichen und als grosser Satellit.
Nur die Alternative ist geaendert. post2.html bleibt unangetastet, damit
sich die beiden Fassungen in Stil und Zuspitzung vergleichen lassen.
Zwei Kollisionen kamen dabei heraus. "Dein Programm" ist laenger als
"HiveGrid" und lief in die drei Fensterpunkte; die sind entfallen, in
dieser Formensprache ist Fensterchrom ohnehin fehl am Platz. Und die
laengeren Namen der beiden oberen Satelliten stiessen an ihre Knoten, sie
stehen jetzt seitlich versetzt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rueckmeldung aus dem Team war, das Design duerfe "futuristischer" sein.
Statt den bestehenden Beitrag umzubauen liegt er jetzt zweimal vor:
post2.html bleibt die Skizzenfassung, post2-alt.html zeigt denselben
Beitrag mit denselben Texten in praeziser Formensprache.
Technisch ist es kein zweiter Entwurf, sondern dieselbe Zeichnung mit
anderen Primitiven. strich zieht eine Gerade statt eines schwingenden
Zuges, kringel eine exakte Ellipse statt eines offenen Kringels, rechteck
und chamfer haben keine Ecken mehr, die ueberschiessen. Die Kompositionen
sind Zeile fuer Zeile dieselben. Wer eine Visualisierung aendert, muss
deshalb an beide Dateien denken -- steht in der README.
Was in der Alternative entfaellt: die Randnotizen der Titel-Slide
(Gluehbirne, Zettel, Maulschluessel), der versetzte Zweitrahmen mit
schraffiertem Band, die Bodenschatten unter den Ikonen und alle
Schraffuren als Fuellung. An ihre Stelle treten ein sauberer
Chamfer-Rahmen mit Eckwinkeln in Gelb und gefuellte Flaechen.
Die dunkle Variante hat zwei Fehler sichtbar gemacht, die in der hellen
Fassung nie aufgefallen waeren:
Das Akzentwort steht auf Dunkel in #1A1A1A und ist nur dort lesbar, wo die
gelbe Markerflaeche darunterliegt. Die deckte 62 Prozent der Zeilenhoehe
ab, also rund 49 px bei einer Versalhoehe von etwa 53 -- die obere Haelfte
der Buchstaben verschwand im Grund. Sie deckt jetzt die ganze Zeile.
Die Beschreibungen der drei Schritte auf der letzten Slide standen fest auf
#555555, einem Wert der hellen Variante. Sekundaerer Text folgt jetzt der
Variante, wie TINTE und GELB auch. Dafuer zieht applyAll die Farben nach
und baut alle Seiten neu, nicht nur die Titel-Seiten.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Im Fliesstext von Slide 4 steht jetzt "KI-Loesungen,
Projektmanagement, Automatisierungen" statt "ein CRM". Der Satz bleibt
zweizeilig, gemessen 89 px.
Damit taucht Projektmanagement zweimal auf der Slide auf: im Fliesstext
und als zweiter Punkt in der Liste darunter. Bei CRM gab es das nicht,
weil das Wort in der Liste nicht vorkam. Der Kommentar ueber der Liste
behauptete bisher, sie nenne die Kategorien des Fliesstextes nicht noch
einmal -- das stimmt so nicht mehr und ist mit angepasst.
Der Projektstand kommt mit, er traegt eine weitere Verschiebung der
Zeichnung auf der letzten Slide.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Alle sechs Ueberschriften stehen jetzt bei 59, gemessen an der Titel-Slide
von Post 1. Post 2 sass 125 px tiefer, und die Ursache war das
ausgeblendete Tag: es stand auf visibility: hidden und hielt damit weiter
54 px Hoehe plus 38 px Abstand im Textfluss. Jetzt steht es auf display:
none und der obere Abstand kommt direkt aus dem padding von .content. Wer
das Tag je sichtbar macht, muss das padding mitziehen -- steht als
Kommentar dabei.
Die Titel-Slide bekommt 88 px, wie Post 1. Das gilt nur fuer sie und liegt
deshalb als Ueberschreibung im Projektstand, nicht im CSS; genauso macht
Post 1 es bei seiner Tagline. Fuer alle sechs ginge 88 nicht: gemessen ist
"Dein Branchenprogramm" dann 1022 px breit bei 896 verfuegbaren, und die
Ueberschriften von Slide 2, 4 und 5 wuerden dreizeilig. Die Grundgroesse
bleibt deshalb 74.
Slide 2 schnitt bisher hart hinter der Vorstellung von Noah. Jetzt leitet
sie ueber, und zwar mit Noahs eigener Bewegung: er raeumt die Erfahrung
erst ein und dreht dann. "Wer lange dabei ist, hat nicht nur Erfahrung",
und der Fliesstext haengt mit "Auch Ablaeufe ..." direkt daran. Das
nachgestellte "Nicht, weil ..." ist bei ihm ein Stilmittel, keine
abgehackte Halbzeile.
Das Wort Zettelwirtschaft ist aus der Ueberschrift raus. Die Zeile sagt
"nicht nur Erfahrung", und was das andere ist, zeigt die Zeichnung
daneben.
Der Projektstand kommt mit. Er traegt eigene Feinjustierungen an
Ueberschriften, Fliesstexten und Zeichnungen, darunter die Einrueckung der
Titel-Ueberschrift von 37 px: damit endet die Zeile bei rund 985 und
bleibt innerhalb der Safe Zone.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Wechsel-Symbol, Pfeil, Chaos. Was drinhaengt, steht im Symbol; wohin ein
Wechsel fuehrt, steht rechts. Der Fliesstext sagt dasselbe in derselben
Reihenfolge.
Vier Fassungen liegen dahinter, und sie sind lehrreich, weil sie
verschieden falsch waren. Ein verwurzelter Kasten mit gerissener Leine und
eine beladene Sackkarre erzaehlten je eine kleine Szene -- zu viel fuer
eine Slide, die im Vorbeiscrollen sitzen muss. Eine dritte reihte Block,
Pfeile und eine schraffierte Wand nebeneinander; die Wand las niemand als
Wand, sondern als ausgemalten Kasten. Die vierte war ein durchgestrichenes
Symbol, aber der Strich lief quer durch die Woerter.
Was allen vieren fehlte, war eine Richtung. Drei Stationen von links nach
rechts liest man in einer Sekunde, drei Teile nebeneinander nicht.
Das Chaos ist eine Bahn durch lauter zufaellige Punkte, weich gezogen, die
sich dadurch staendig selbst kreuzt. Zwei Durchgaenge fuer die Dichte,
dazu lose Enden nach aussen: ein Knaeuel ohne Enden sieht aus wie eine
Wolke. Der Zufallskeim liegt fest, das Knaeuel ist bei jedem Export
dasselbe.
Die Zeichenflaeche folgt hier der Zeichnung statt umgekehrt. Drei Formen
nebeneinander duerfen in 896 Breite hoechstens rund 200 Radius haben, eine
730 hohe Box waere damit zu drei Vierteln leer gewesen. Sie ist jetzt 520
hoch und sitzt mittig in der freien Hoehe unter dem Text.
"Die Leute, die es kennen" ist raus, aus Bild und Text. Ohne die lange
Zeile durfte die Schrift groesser werden.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die Texte lasen sich maschinell, und der Grund war nicht die Kuerze. Alle
fuenf Ueberschriften hatten dieselbe Form: zwei abgehackte Fragmente mit
Punkt dazwischen, fuenfmal hintereinander, und die Fliesstexte machten es
nach. Jetzt wechseln sich Aussage mit Wendung, Frage und Antwort, Paar und
durchlaufender Satz ab. Die Formulierungen kommen aus Noahs Text statt aus
dem Nichts: "Und wechseln? Kannst du vergessen", "Stammdaten, Auftraegen
und Buchhaltung", "kein Ersatz, sondern der Aufbau drumherum".
Das Wort ERP kommt nicht mehr vor, es heisst Branchenprogramm wie bei
Noah. Slide 2 traegt die Enthuellung aus seinem Absatz, dass ein alter
Betrieb nicht nur Erfahrung vererbt. Slide 6 traegt die Marken-Tagline,
ausgezeichnet wie in Post 1: der Marker sitzt auf dem zweiten Handwerker,
nicht auf der ganzen Zeile.
Der Beitrag ist Noahs Konzept, sagt das aber nirgends geradeheraus. Slide
2 stellt fest, dass hinter den gewachsenen Ablaeufen keines steckt, Slide
5 liefert eines. Das Wort faellt genau einmal.
Slide 1 bekommt Randnotizen: Gluehbirne, Zettel, Maulschluessel. Der
Schluessel brauchte zwei Anlaeufe, erst war er ein Knochen, weil glatt()
die Kanten wegrundet. Ein Werkzeug lebt von scharfen Kanten. Aus CEO wird
Gruender.
Slide 4 zeigt statt einer Wunschliste vier Funktionen mit Haken und
Zeichen. Die Zeichen stehen in einer Spalte statt hinter dem Wort, sonst
haetten die unterschiedlich langen Zeilen eine ausgefranste Kante ergeben.
Zwischen Slide 4 und 5 laeuft ein Pfeil ueber die Naht, auf halber
Slide-Hoehe. Umriss gezeichnet, innen mit Schraegstrichen ausgemalt, in
Tinte statt Gelb: Gelb bedeutet hier Verbindung und gehoert der Zeichnung,
der Pfeil weist nur weiter. Dafuer reichen beide Zeichenflaechen jetzt bis
an die Slide-Kanten, Slide 5 beginnt bei 0 statt bei 92.
Dabei kam ein Fehler heraus, der jede kuenftige Slide getroffen haette:
"--vis-left:" + (sl.visLeft || 92)
Die 0 ist falsy, also hat || sie als fehlenden Wert behandelt und den
Vorgabewert eingesetzt. Steht jetzt auf ??, ebenso bei visW und visBottom.
Aufgefallen ist es nur beim Nachmessen, nicht beim Hinsehen.
Der Projektstand kommt mit. Er traegt eigene Textfassungen fuer Slide 3
und 6 sowie die Groesse und Lage der Karte auf Slide 1.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Das Foto bleibt roh, gezeichnet wird drumherum. Der Rahmen ist die
Markenform, dazu ein versetzter Zweitzug und eine schraffierte Kante.
Die drei greifen ineinander statt nebeneinanderher zu laufen: der
versetzte Zug ist die Aussenkante des Schattens, die Schraffur fuellt das
Band dazwischen. Zur Schattenfrage steht ein Hinweis im Code -- Paragraf
5 in rules.md verbietet weichgezeichnete Schatten, und die dort notierte
Ausnahme sagt, eine Linie ist kein Schatten. Eine Schraffur besteht aus
Linien.
Der Helm sitzt wahlweise an der abgeschnittenen Rahmenecke oder auf
Noahs Kopf. Das haengt am Layout-Schalter der Slide, also am vorhandenen
Geruest, und nicht an einem eigenen Sonderschalter. In der Ecken-Lage
kippt er nach rechts, damit die Oeffnung ueber der Ecke liegt: nach links
gekippt sah er aus, als falle er herunter.
Drei Anlaeufe stecken im Helm, die Zwischenschritte stehen als Kommentar
dabei. Erst war die Kuppel flach und die Krempe eine geschlossene Scheibe
darunter, zusammen eine Schirmmuetze. Dann kam Schraffur dazu, und die
Waagerechten kreuzten die Grate zu einem Gitter, also einem Korb. Was
traegt, sind viele Stuetzpunkte, ein First, zwei Nebenrippen und eine
Krempe mit Dicke.
Drei Dinge waren technisch noetig:
Die Zeichenebene ist rechts breiter geworden, von 114,8 auf 128,4
Prozent. In der Ecken-Lage ragt der Helm ueber den Rahmen hinaus und
waere sonst beim Export abgeschnitten worden.
renderPage erneuerte bisher nur den Textblock. Ein Layoutwechsel haette
die Zeichnung nicht angefasst und der Schalter waere wirkungslos
geblieben. Jetzt wird die Visualisierung mitgezogen; der Zufallskeim ist
gesetzt, es kommt derselbe Strich heraus.
VIS-Funktionen bekommen den Slide-Index, sonst kann eine Zeichnung ihren
eigenen Layout-Zustand nicht lesen.
Im Foto ist der Eckenradius von 38 auf 8 runter und der Navy-Rand
entfallen. Mit dem gezeichneten Rahmen waeren das sonst drei Rahmen
uebereinander gewesen. Das weicht vom Nachbau der Website-Karte ab und
ist bewusst so.
Der Projektstand kommt mit: Slide 1 traegt jetzt manuelle Anpassungen aus
dem Generator. Der Fliesstext ist geleert, Ueberschrift und Karte sind
verschoben, das Foto steht dadurch allein.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Damit sind alle sechs Slides im selben Stil. Slide 1 bleibt Noahs Foto,
das ist Absicht: ein echtes Gesicht zwischen fuenf Zeichnungen ist ein
Kontrast, kein Bruch.
Slide 3 hat zwei Haelften im Fliesstext, und beide brauchten ein Bild.
"Jahre an Daten und Wissen haengen drin" wurde zu Wurzeln im Boden, "am
Ende dasselbe, nur woanders" zu demselben Kasten noch einmal, nur
gestrichelt. Das leere Ziel der alten Fassung war schlicht die falsche
Aussage. Der Bruch sitzt weiterhin auf dem Weg und nicht auf dem Ziel,
nur ist aus dem Kreuz eine gerissene Leine geworden.
Zwei Anlaeufe waren dafuer noetig. Die Wurzeln endeten zuerst oberhalb
der Erdlinie und sahen deshalb aus wie Beine; sie muessen die Linie
kreuzen. Und die Fasern der gerissenen Leine zeigten aufeinander zu, das
ergab zwei Pfeilspitzen und damit die gegenteilige Aussage. Jetzt haengen
beide Enden nach unten.
Slide 4 zeigte vier Kaesten mit "fehlt". Das ist der Mangel, die Slide
handelt aber vom Wunsch. Jetzt ein Blatt mit einer Liste, in den Worten
eines Betriebs statt in Feature-Namen: die stehen schon im Fliesstext.
Die Kaestchen bleiben leer, erfuellt wird der Wunsch auf Slide 5.
Das Layout-CSS aller alten Visualisierungen ist entfernt, dazu die
verwaisten Kasten-Regeln und der kasten-Baustein. Die Klassen haengen
weiter am Container, und die Regeln haben dreimal zugeschlagen: zuletzt
schob .vis-lose mit zwei Spalten das SVG auf ein Drittel Breite. An der
Stelle steht jetzt ein Hinweis statt einer Leerzeile.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Statt drei Kaesten an einer Schiene jetzt fuenf beschriftete Kanaele mit
einer gestrichelten Leitung dazwischen. Vorbild war ein fremder Beitrag,
uebersetzt in unsere Handschrift und ohne fremde Produktnamen: E-Mails,
Zettel im Auto, Tabellen, Fotos auf dem Handy, Ordner im Regal. Das ist
naeher am SHK-Betrieb als WhatsApp und Excel.
Bewusst ohne Aufloesung. Das Vorbild packt Problem und Antwort in ein
Motiv, bei uns ist die Antwort Slide 5. Zweimal dieselbe Pointe waere
einmal zu viel.
Die Anbindung der Leitung war im ersten Anlauf falsch, und zwar aus zwei
Gruenden. Die Stuetzpunkte lagen direkt auf der Kastenkante, danach lief
die Bahn irgendwohin: die Linie streifte den Kasten, statt an ihm
anzusetzen. Und wo zwei Stuetzpunkte fast aufeinanderlagen, warf die
weiche Kurve einen Zipfel. Jetzt bekommt jedes Stueck vor und hinter dem
Kasten einen Punkt auf gleicher Hoehe, 52 px daneben. Die Bahn laeuft
dadurch waagerecht heraus und waagerecht hinein und haengt sichtbar am
Kasten.
Die Leitung traegt den Akzent in Gelb. Damit steht ein Gegensatz, der
auch fuer die naechsten Beitraege taugt: gestrichelt und gelb heisst
gewachsen, durchgezogen und gelb heisst verbunden. Dieselbe Farbe, die
Strichart trennt die Aussage.
Die Kaesten sind chamfert, also die Markenform, nicht die runden Chips
des Vorbilds. Neu als Primitiv dazu: chamfer als gezeichneter Achtkant.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die grauen Kaesten sind raus. Beide Slides tragen jetzt gezeichnete
Visualisierungen aus einer kleinen Primitiv-Bibliothek: Strich, Rechteck,
Kringel, Wabe, Schraffur, Pfeil, Bodenschatten. Alles Inline-SVG, keine
neue Bibliothek, kein Netz.
Der Zufallskeim ist fest verdrahtet, und das ist kein Schoenheitsfehler:
der Export rendert bei fehlgeschlagener Pruefung bis zu fuenfmal neu. Mit
ungesetztem Math.random zittert jeder Durchgang anders, und die Kontrolle
vergleicht gegen ein Bild, das es so nie wieder gibt.
Slide 5 zeigt HiveGrid als Wabe in der Mitte, sechs Satelliten drumherum.
Die Winkel sind nicht frei gewaehlt: eine Flat-Top-Wabe mit Verhaeltnis
2/Wurzel3 ist ein regelmaessiges Sechseck, ihre Ecken liegen also auf
0/60/120/180/240/300 Grad. Jede Speiche setzt dadurch an einer Ecke an
statt irgendwo auf einer Kante.
Slide 6 uebersetzt die Sektion "So geht's weiter" von der Website: drei
Schritte, Pfeile dazwischen, Brief, Sprechblase, Knallbonbon. Die auf der
Website gefuellten Sechsecke sind hier schraffiert. In einer Zeichnung ist
Schraffur die Fuellung, und der Raster-Grund bleibt dabei sichtbar.
Das Layout-CSS beider alter Visualisierungen ist entfernt. Die Klassen
haengen weiter am Container, und .vis-verbinden mit seinem display:grid
hat das neue SVG erst als Rasterzelle auf ein Drittel zusammengeschoben.
Wer eine Visualisierung auf SVG umstellt, muss ihr Layout-CSS mitnehmen.
An beiden Stellen steht jetzt ein Warnkommentar.
Das SVG traegt width und height als Attribute, nicht nur den viewBox.
Ohne sie hat Chrome die Hoehe nicht aus dem Seitenverhaeltnis abgeleitet
und die Zeichnung lief in den Fliesstext.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Alles zum Beitrag vom 12.08. an einer Stelle: die sechs Slides mit Text und
Akzentwort, was die Visualisierungen zeigen und warum, die gemessenen Maße
samt Anleitung zum Nachmessen, der offene Rest und die Fallen, die schon
zugeschnappt sind.
Damit laesst sich ohne den Gespraechsverlauf weiterarbeiten. Die README
verweist darauf.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Gemessen statt geschaetzt: der Inhaltsblock endet bei y 415 bis 460, unten
bleiben 92 px Rand, also rund 800 px freie Hoehe. Die Visualisierungen waren
115 bis 393 hoch, der Rest war tote Flaeche. Jetzt fuellen alle sechs das
Format mit 70 bis 133 px Luft zum Text. Slide 6 bleibt bewusst kleiner und
steht mittig: ein Formularfeld auf 700 px aufgeblasen sieht aufgeblasen aus.
Slide 2 hat eine echte Schiene mit gedrehter Beschriftung statt zweier
unerklaerlicher Balken. Der Riegel aus der alten Fassung war noch im Markup,
sein CSS aber schon weg. Die Schritte heissen jetzt "abtippen, noch mal
abtippen, und noch mal" statt dreimal "so wie immer".
Der gelbe Akzent auf "Chat" ist raus. Die vier Bausteine sind gleichwertig,
und Gelb bedeutet auf den anderen Slides etwas anderes.
Im Stand lagen Probier-Verschiebungen, die Noahs Karte auf 700 px vergroessert
und 250 px nach unten geschoben hatten. Deshalb war sie unten abgeschnitten,
obwohl die Vorgabe im Code stimmte.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Filter in log_message pruefte args[0] mit "in", bekommt bei send_error aber
einen HTTPStatus statt der Anfragezeile. Der TypeError riss den Handler-Thread
mit, der Browser wartete auf eine Antwort, die nie kam, und die Seite blieb
ohne Meldung bei "Lade Screens ..." stehen.
args[0] wird jetzt in str() gewickelt, und alles, was keine gewoehnliche
Anfragezeile ist, wird geloggt statt verschluckt. Genau das haette die Suche
vorher abgekuerzt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Vier Seiten: Rahmen und Rhythmus, der Plan vom 12.08. bis 14.09., Bildsprache,
taegliche Interaktion und Auswertung. Layout, Schrift und Farben wie beim
Webinar-Vergleich.
Der Kanal ist in dieser Phase kein Reichweiten-, sondern ein
Darstellungskanal: fuer Leute, die ohnehin auf uns stossen. Das steht in der
Praemisse und traegt die Entscheidungen, etwa warum Carousels vor Reels
kommen, obwohl Reels unter 50.000 Followern mehr Reichweite bringen.
15 Termine, drei pro Woche um 12:00. Sechs Sorten im Wechsel, damit sich das
Konto nicht wie ein Prospekt liest: acht Funktionen, zwei zu Menschen und
Betrieb, zwei Einwaende, je einmal Haltung, Wissen ohne Produkt und Aufruf.
Das erste Reel am 09.09. ist eine Bildschirmaufnahme, dafuer braucht es keine
Kamera.
Gebaut wird mit "python3 redaktionsplan/bauen.py". Schrift und Logo kommen aus
den Assets dieses Repos, nicht aus einem Nachbarordner, damit sich das PDF
ueberall bauen laesst. Die erzeugte HTML ist ignoriert, sie entsteht neu.
Zahlen zu Ausspielung und Posting-Zeiten sind belegt und als Groessenordnung
gekennzeichnet, nicht als Zusage. Sie stammen aus Auswertungen Dritter, nicht
von Meta.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sechs Slides von der Baustelle bis zur Warteliste. Statt Screenshots traegt
jede Slide eine Visualisierung des Stichworts aus ihrem Text: drei Schritte
fest auf einer Schiene, der schwere Bestand mit dem durchgestrichenen Pfeil,
vier lose Kacheln deren Verbindungen ins Leere laufen, das ERP als Sechseck
mit den Neuen daran, ein Feld mit Knopf.
Alles HTML, kein Bildmaterial ausser Noahs Karte. Damit bleibt es beim
3-fachen Export so scharf wie die Schrift, und jede Visualisierung laesst
sich im Canvas verschieben und in der Breite aendern wie jedes andere
Element. Das Kreuz auf der Wechsel-Slide liegt auf dem Pfeil, nicht auf dem
Ziel: der Wechsel scheitert, nicht das neue System.
Die Karte ist der aktive Zustand von der Ueber-uns-Seite, Werte aus
TeamCards.tsx. Ohne die weichgezeichnete Ellipse des Originals: die haengt an
backdrop-filter, und was der Export daraus macht, ist nicht verlaesslich.
Die Texte sind bewusst NICHT die von der Website. Dort stehen ganze Absaetze,
auf einer Slide muss eine Zeile im Vorbeiscrollen sitzen; der volle Text
kommt unter den Beitrag. Aus den gemessenen Breiten folgt: bei 74 px und
-0,03em passen rund 26 Zeichen in eine Zeile. Keine hier ist laenger als 22.
Der Stand von post2 ist neu geschrieben, er zeigte noch auf die Slides von
Post 1.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bearbeiten ist immer an. An seine Stelle tritt die Vorschau: alles
festgelegt, keine Auswahl, kein Ziehen, keine Rahmen. Blaettern und Zoomen
bleiben, das ist der Sinn. Taste P statt E.
Aus der Seitenleiste raus: Layout, Tag optisch ausgerueckt, Vorschau,
Intensitaet, Mockup-Perspektive und die Download-Knoepfe. Entweder
post-spezifisch oder inzwischen oben in der Leiste.
Die Schalter selbst bleiben im Dokument, nur unsichtbar. Die Menueleiste
betaetigt sie, die Tastenkuerzel ebenso, und zwei Abgleich-Funktionen
schreiben hinein. Geloescht muesste jeder dieser Zustaende ein zweites Mal
gefuehrt werden.
Die Buehne stand noch auf 100vh. Darueber sitzt seit der Menueleiste aber
deren Hoehe, weshalb die Fussleiste mit Zoom und Merkzettel unter den unteren
Rand rutschte.
Oben links steht PostGrid statt HiveGrid, auch im Fenstertitel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
post2 uebernimmt den Stand von post1, damit die Kopie auch Look, Ausrichtung
und Variante teilt und nicht bei den Standardwerten anfaengt.
state/post1-vorher.json kommt mit herein. Die Datei schreibt kein Code, sie
ist von Hand angelegt worden und sieht nach einem Rueckfallpunkt aus.
Mitgenommen statt geloescht, weil sie sonst beim naechsten Klonen fehlt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Grund ist fest das Raster. Raus sind die vier Formen-Bausteine, die grosse
G-Marke, das Wabenraster samt seinem Kachel-Erzeuger, die Punkte und die
Musterauswahl mit ihrer Taste. Ebenso das durchgehende Band: Sechsecke auf den
Naehten, Band und G-Marke, CSS, Schalter und Taste.
Beim Aufraeumen war zwischenzeitlich ".bg > * { display: none; }" mit
verschwunden. Diese eine Zeile hatte das Band die ganze Zeit verdeckt, eine
Einblende-Regel gab es dafuer naemlich nie. Ohne sie schwebten Sechsecke und
G-Marke ueber den Slides.
Die Projektauswahl ist eine Menueleiste ueber die volle Breite: Projekt,
Datei, Bearbeiten, Slide, Ansicht. Sie fuehrt nichts selbst aus, sondern
betaetigt die vorhandenen Schalter im Bedienfeld, damit jedes Verhalten an
genau einer Stelle steht. Haken und graue Eintraege liest sie beim Oeffnen aus
denselben Schaltern.
post2.html ist eine Kopie von post1.html bis auf Titel, Ueberschrift und
Projektschluessel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die Auswahl eines Elements war nur eine Zeile im linken Bedienfeld, und die
Bedienung dazu lag zwischen Slide-Einstellungen verstreut. Jetzt ist die
Oberflaeche geteilt: links die Slide und alles Allgemeine, rechts genau das
angeklickte Element.
Im Element-Feld stehen Text, Groesse, X und Y, die Ebene, das Ausrichten an
der Slide (links, mittig, rechts sowie oben, mittig, unten mit 92 px Rand),
das Angleichen ueber alle Slides und das Loeschen. Der Text schreibt in
dieselbe Ueberschreibung, die auch das Inhalt-Feld links fuellt -- man
beschriftet also die Ueberschrift, indem man sie anklickt.
Ausgerichtet wird gemessen statt gerechnet: die Mockups stehen
perspektivisch im Raum und das Blatt ist gepolstert.
Zwei Fehler, die dabei aufgefallen sind:
Das Feld faehrt beim Anklicken ein und macht die Buehne schmaler -- damit
aendert sich der Massstab mitten im Klick. Der Zug rechnete aber mit einem
frisch gerechneten autoFit und verschob das Element deshalb um ein Drittel
zu weit. Genommen wird jetzt der Massstab, mit dem tatsaechlich gezeichnet
ist.
Und ein fehlendes Bild riss den ganzen Export mit ("1 Bild(er) nicht
geladen"), ohne zu sagen welches. Verweise auf Dateien, die es nicht mehr
gibt, werden beim Start aufgeloest und benannt; eine Slide baut sich auch
ohne sie auf.
Geprueft: 13 Faelle fuer das Element-Feld, dazu der volle Exportlauf und die
Maus-Bedienung.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Drei Sachen, die beim Arbeiten gefehlt haben.
Der Streifen war keine durchgehende Flaeche. Jede Slide zeichnete nur ihre
direkten Nachbarn mit (i-1 bis i+1), ein Element liess sich damit genau eine
Slide weit schieben und war danach abgeschnitten. Jetzt traegt jede Slide das
vollstaendige Blatt. Der Preis sind n mal n Seiten statt n mal drei -- bei
einem Carousel dieser Groesse nicht spuerbar, und der Export laeuft
unveraendert durch.
Elemente lassen sich loeschen. Sie gehen per display:none aus dem Fluss, das
zweite Bild wird dagegen wirklich entfernt, sonst stuende es weiter im Stand
und im Auswahlfeld. Ein geloeschtes Element kann man nicht mehr anklicken,
deshalb steht es im Bedienfeld als "… zurueck" bereit -- ohne das waere es
nur ueber "Alles auf Standard" oder Rueckgaengig zu holen, also praktisch
verloren.
Und jedes Element hat ein Feld "Ebene", das wie z-index wirkt. Leer heisst
Standard, damit bleibt die Gestaltung unveraendert, solange niemand etwas
setzt. Text steht im Fluss und ignoriert z-index, deshalb kommt beim Setzen
ein position:relative dazu; am Layout aendert das nichts.
Geprueft: 8 Faelle ueber das DevTools-Protokoll (Reichweite ueber zwei
Slides hinaus, Ebene setzen und wieder leeren, loeschen und zurueckholen),
dazu der volle Exportlauf und die Maus-Bedienung.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>