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>
Der Import legte das Bild bisher nur ab und liess die Zuordnung in einem
Auswahlfeld liegen. Auf der Slide war damit nichts zu sehen, und der Import
wirkte wie ein Fehlschlag -- zu Recht, denn ohne den Weg ueber "Inhalt" war
das Bild nirgends.
Jetzt landet es sofort auf der gerade gewaehlten Slide, mittig, und ist
gleich ausgewaehlt. Die Mitte wird gemessen statt gerechnet: das Blatt ist
gepolstert und die Mockups stehen perspektivisch im Raum, ein Dreisatz ueber
left und bottom laege daneben. Der Versatz wandert in die Bearbeitung, das
Bild bleibt also frei verschiebbar.
Ein zweites Bild gibt es dafuer jetzt auf jeder Slide, nicht nur auf
Feature-Slides -- sonst waere die Zusage "landet auf der gewaehlten Slide"
auf der Titel-Slide gebrochen.
Geprueft ueber den echten Weg (Datei ins Feld, change ausloesen) auf einer
Feature- und auf der Titel-Slide: Versatz 0/0 px in beiden Faellen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Beim Import wurde aus "Pruefbild" ein "pr-fbild": der Namensfilter warf alles
weg, was nicht ASCII ist. Umlaute werden jetzt umschrieben statt entfernt.
Und /upload antwortet mit 404, solange der Python-Server noch in einer
Fassung ohne den Endpunkt laeuft. Das ist die wahrscheinlichste Ursache,
wenn der Import scheinbar nichts tut -- die Seite neu zu laden hilft
dagegen nicht, weil serve.py nur beim Start eingelesen wird. Die Meldung
sagt das jetzt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bilder aus dem Finder kommen jetzt ueber die Dateiauswahl oder per Ziehen
direkt auf eine Slide herein. Beim Ablegen wird das Bild dort zum zweiten
Bild und laesst sich im Bearbeiten-Modus frei schieben und in der Groesse
aendern; ueber den Knopf importiert man nur und ordnet danach unter Inhalt
zu. Das zweite Bild laesst sich dort auch wieder abwaehlen.
Die Datei geht byteweise unveraendert an den neuen Endpunkt /upload und
liegt danach unter assets/eigene/. Nichts wird neu kodiert, skaliert oder
umbenannt -- nur Zeichen, die in einem Dateinamen nichts zu suchen haben,
weichen einem Bindestrich. Der Umweg ueber den Server ist Absicht: ein Foto
als Base64 im Projektstand waere groesser als der gesamte uebrige Stand und
machte jeden Diff unlesbar. So steht dort nur der Pfad, und das Bild liegt
mit im Repo wie jedes andere Asset auch.
Die Auswahllisten holt der Generator beim Start ueber /bilder vom Server
statt sie im Code zu pflegen. Importierte stehen deshalb sofort darin, mit
einem Stern gekennzeichnet. Beim Zuweisen folgt das Rahmenformat dem
Seitenverhaeltnis der Aufnahme.
Geprueft ueber das DevTools-Protokoll: ablegen, Bytes gegen die Quelle
vergleichen, Format, Verschieben im Bearbeiten-Modus, Export und Neustart.
Die abgelegte Datei war byteweise identisch mit der Quelle.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Wie viele Slides ein Post hat, stand bisher im Code. SLIDES war ein festes
Array, der Stand speicherte nur Einstellungen dazu, und die durchgehende
Flaeche lag als 5400 px in der CSS.
Jetzt entsteht SLIDES aus einem Deck. Jeder Eintrag ist entweder eine
mitgelieferte Vorlage (ref) oder eine selbst angelegte Slide; eigene Texte
liegen als Ueberschreibung daneben. Fuer Vorlagen wandert damit nur ein
Verweis in den Stand, keine Kopie -- eine Aenderung an der Vorlage im Code
kommt weiterhin bei allen an, die sie nicht angefasst haben. Haette man die
Slides vollstaendig in den Stand geschrieben, waeren sie dort eingefroren.
Unter der Slide-Auswahl stehen vier Knoepfe: neu, kopieren, loeschen,
verschieben. Die Felder pro Slide (Verschiebungen, Muster, Layout) wandern
im Gleichschritt mit. Bleibt eine einzige Slide uebrig, ist der Post ein
Einzelbild: die Kopfzeile sagt es und der ZIP-Knopf verschwindet.
Neu ist die Gruppe "Inhalt (nur diese Slide)" mit Tag, Ueberschrift,
Fließtext und der Auswahl des Screenshots. Getippt wird Text, nicht
Auszeichnung: *Wort* setzt den Akzent, ein Zeilenumbruch bricht die Zeile um.
Gespeichert wird trotzdem fertiges Markup, weil die Vorlagen es so
mitbringen. Beim Bildwechsel folgt das Rahmenformat dem Seitenverhaeltnis
der Aufnahme, sonst stuende ein Hochformat in einem Querformat-Rahmen. Alle
Screens werden vorgeladen, nicht nur die gerade benutzten -- ein Bild, das
erst beim Auswaehlen geladen wuerde, fehlte im Export.
Der Stand steht auf v6. Ein Stand ohne Deck stammt aus der Zeit fester fuenf
Slides und behaelt die Vorlagen.
Dabei abgesichert: Der Tastaturschutz rief e.target.matches auf. Ist nichts
fokussiert, ist das Ziel das Dokument und hat kein matches. Seit der
Neuaufbau den zuletzt fokussierten Knopf entfernt, ist das erreichbar.
Geprueft mit 17 Faellen ueber das DevTools-Protokoll: anlegen, tippen,
Screenshot tauschen, kopieren, schieben, loeschen, Neustart. Dazu ein Export
einer selbst angelegten Slide und der volle Durchlauf der bestehenden elf.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Beide Projekte werden nicht mehr gebraucht. Weg sind post1-alt.html,
index.html und state/post2.json, dazu der lokale state/post1-alt.json.
Mitgezogen, damit nichts ins Leere zeigt: die Projektumschaltung im
Bedienfeld samt ihrer CSS-Regeln, die Projekttabelle und die Liste der
Stand-Dateien in der README, die Startzeile und der Aufbau in rules.md.
Achtung: Ohne index.html liefert http://127.0.0.1:4321/ nur noch die
Verzeichnisliste. Der Einstieg ist /post1.html.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Slides 2 und 3 getauscht, Tag-Eintraege geraeumt. Betrifft den laufenden Stand
und den gemerkten Rueckfallpunkt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Commit buendelt zwei Arbeitsstraenge, die in derselben Datei entstanden
sind und sich nicht sauber trennen liessen.
Aus der parallelen Sitzung: Rueckgaengig und Wiederherstellen ueber Cmd/Strg+Z,
angehaengt an saveState statt an die 25 Stellen, die etwas aendern. Ziehen
speichert erst beim Loslassen, eine Bewegung ist also ein Schritt und nicht
hundert. Dazu der Tausch von Automation & KI und Vertrieb samt Stand 4: der
Stand haengt an der Position, nicht am Slide-Schluessel, ohne Tausch laegen
Positionen, Muster und Layout an der falschen Slide.
Neu hier: die Tags sind ausgeblendet, nicht entfernt. Beim ersten Versuch
waren sie geloescht, worauf Ueberschrift und Text nach oben rutschten - das
Tag steht im Textfluss und belegt Hoehe. visibility haelt die Box, display
none haette sie ebenso aufgegeben. Der Umschalter fuer die Ausrueckung und
sein Kuerzel bleiben deshalb bestehen.
Stand 5 raeumt den gespeicherten Tag-Eintrag: seine Stelle ist ohne Wirkung,
und die Werte standen zuletzt bis 141 px oberhalb der Slide.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ueberschrift oben, Mockup gross gezogen, Text von Slide 2 wieder auf
Slide 2. Der Merkzettel steht auf demselben Stand.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Beschreibungstext und der Swipe-Hinweis fallen weg, dazu das ungenutzte
CSS und die SVG-Konstante. Der Hinweis hing am else-Zweig der Feature-
Slides und lag damit ohnehin nur auf der Titel-Slide.
Die Ueberschrift liegt jetzt ueber dem Mockup. Das Geraet steht im DOM
nach ihr und lag deshalb darueber: gross gezogen hat es die Ueberschrift
verdeckt und im Bearbeiten-Modus die Klicks geschluckt, sodass man nicht
mehr an sie herankam.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Stand mit aktivem Raster auf allen Slides und den gezogenen Positionen.
Das neue Titel-Mockup ist eingepasst. Der Merkzettel steht auf demselben
Stand, ueber "Stand merken" gesetzt und gegengelesen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Ladepfad hat jeden Stand ab Version 3 verworfen: STATE_V stand auf 3,
die Pruefung liess aber nur 1 und 2 durch. Damit lief das Blatt mit der
Voreinstellung an und schrieb sie ueber die vorhandene Datei. Die Pruefung
gilt jetzt von 1 bis STATE_V.
Damit so etwas nicht mehr unbemerkt bleibt: liegt eine Standdatei vor, die
sich nicht anwenden laesst, wird nichts mehr zurueckgeschrieben, weder in
die Datei noch in den localStorage.
Merkzettel gehaertet. "Stand merken" liest die Datei gegen und meldet erst
dann Erfolg. "Zurueck zum Stand" prueft Version und Slide-Anzahl, bevor es
den laufenden Stand ersetzt, legt ihn vorher als <projekt>-vorher ab und
laedt erst neu, wenn die Datei nachweislich steht.
Auf der Titel-Slide steht das Geraet jetzt auf dem Fels-Mockup. Die
Wortmarke steckt im Bild, deshalb faellt die separate wabe-logo dort weg.
Der Rahmen ist auf 880px breiter, weil das Bild links und rechts rund ein
Viertel freien Rand mitbringt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die Uebernahme von 3c0b22a wird zurueckgenommen: state/post1.json ist wieder
die Fassung vom Laptop (v3, mit dem neuen Titel-Mockup). Die Positionen von
hier fallen damit weg.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Beide Seiten hatten state/post1.json geaendert. Der Code, das neue
Titel-Mockup und die umbenannten Tags kommen vom Laptop; der Projektstand
ist der von hier (Rahmen "rund", Positionen von 23:30). Bewusst so
entschieden -- die Positionsarbeit vom Laptop faellt damit weg.
Der Stand steht noch auf v2. Beim naechsten Laden rechnet ihn das Skript auf
v3 hoch und entfernt dabei den szene-Eintrag, weil das Titel-Mockup ein
anderes Bild mit anderem Format geworden ist.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Elemente auf mehreren Slides verschoben, Bildrahmen von "stapel" auf "rund"
gestellt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Wert fuer das Titel-Geraet ist raus, er gehoerte zum abgeloesten Mockup.
Betrifft den laufenden Stand und den gemerkten Rueckfallpunkt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Das Szenen-Mockup aus Macbook Air und iPad Pro faellt weg. Das neue Bild
bringt seinen Screen bereits mit, damit fallen auch die ausgeknockten
Displays, die beiden matrix3d-Projektionen, die eingespielten Screenshots und
die dafuer gemessenen Vierecke, Eckradien und Skalenfaktoren weg. Rund 3500
Zeichen CSS werden zu 460.
Standardbreite 720 px. Das ist gerechnet: bei 1409 zu 1494 ergibt das 763 px
Hoehe, zusammen mit Kopfblock und Claim 1138 von 1166 px Inhaltshoehe. Bei
760 px reisst es die Slide.
Stand 3 verwirft den gespeicherten Wert fuer das Geraet. Er stammt vom alten
Mockup mit anderem Format; 1020 px Breite waeren hier 1082 px hoch.
Tags heissen jetzt Vertrieb, Automation & KI, Chat und Formulare. Das &
steht blank, nicht als Entitaet: der Text laeuft ueber innerHTML in Tag und
Navigation, aber ueber textContent in die Statuszeile.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Projektmanagement heisst jetzt "wo alle Auftraege stehen", Team-Chat "Projekte
bekommen automatisch ihren Kanal". Beide bleiben zweizeilig; Zeile 2 der
Chat-Slide misst mit Marker 880 px bei 896 verfuegbaren, ein laengeres Wort
bricht dort sofort um.
Das hinterste Blatt im Stapel nahm bisher immer den Screen der naechsten
Feature-Slide. Auf der Chat-Slide war das der Form Builder, und dessen
3,8-facher Zoom kam mit: unscharf, dazu Kopieren- und Papierkorb-Symbole, die
zu einem anderen Feature gehoeren. Das Blatt ist jetzt ueber "back" pro Slide
ueberschreibbar; die Chat-Slide zeigt den Chat im Hochformat ohne Zoom.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
post1 traegt jetzt Stand 2, die Tags stehen auf allen Feature-Slides auf
-42/-68. post1-merk ist der von Hand gemerkte Rueckfallpunkt, post2 kommt neu
dazu.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Elemente liessen sich nur mit der Maus schieben. Damit war ein Wert auf zwei
Slides nie exakt gleich zu treffen, und genau das war die Aufgabe.
Zahlen sind jetzt Eingabefelder. Breite oder Schrift, X und Y. Das Feld wird
beim Ziehen nicht neu aufgebaut und nie das ueberschrieben, in dem der Cursor
steht; Tastenkuerzel greifen in Eingabefeldern nicht mehr.
X und Y zaehlen ab der Mitte der Slide und beziehen sich auf die OBERE LINKE
ECKE des Elements, nicht auf seinen Mittelpunkt. Eine zweizeilige und eine
dreizeilige Ueberschrift sind unterschiedlich hoch: bei gleichem Mittelpunkt
liegen ihre Oberkanten 39 px auseinander und der hoehere Block waechst nach
oben ins Tag. Ab der ersten Zeile gerechnet stimmt es unabhaengig von der
Zeilenzahl.
Zwei Knoepfe uebertragen Position oder Groesse des gewaehlten Elements auf
alle anderen Slides. Angeglichen wird die Stelle, nicht der Versatz: jedes
Element liegt von sich aus woanders. In der Einzelansicht wird jeder Holder
kurz sichtbar gemacht, sonst hat er kein Layout.
Hilfslinien beim Ziehen: Raster, Innenabstand und die beiden Mittelachsen,
nur auf der Slide, an der gezogen wird. Liegt die Mitte auf einer Achse,
leuchtet sie auf. Vor dem Export werden sie zwangsweise abgeschaltet.
Merkzettel unten rechts: ein Stand laesst sich ablegen und mit einem Klick
zurueckholen. Er liegt als eigenes Projekt in state/ und damit im Repo.
Einmalige Angleichung der Tags beim Laden (Stand 1 auf 2), weil der Tag auf
jeder Slide einzeln gezogen worden war. Das laeuft im Ladepfad und nicht ueber
die Datei: ein offener Tab haelt seinen Stand im Speicher und schreibt eine
Aenderung an der Datei beim naechsten Klick wieder zu.
Ueberschrift der Chat-Slide von "automatisch seinen Kanal." auf "von selbst
seinen Kanal.". Die alte Zeile misst mit Marker 933 px bei 896 verfuegbaren
und brach in eine dritte Zeile.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Export staucht nicht mehr auf 1080 x 1350. Die Slide entstand bei
Renderqualitaet k longst in 1080k x 1350k und wurde unmittelbar vor dem
Speichern wieder heruntergerechnet -- eine Vorlage mit 2390 px kam so mit
916 px an, obwohl sie bereits in 2748 px gerendert vorlag. Gespeichert wird
jetzt, was gerendert wurde; bei 3x sind das 3240 x 4050. Die Statuszeile
nennt die Groesse, und wer exakt 1080 will, stellt die Stufe auf 1x.
Die Kontrolle vor dem Speichern hat ihren Zweck verfehlt. Sie prueft, ob
jede Bildflaeche im Ergebnis Pixel traegt, sah dafuer aber das
achsenparallele Umrechteck an. Die Szenen-Displays stehen per matrix3d
schraeg im Raum, in ihrem Umrechteck liegen Rasterlinien, Hintergrund und
das Nachbargeraet -- deren Kontrast reichte immer, um durchzukommen. Eine
Slide mit voellig leerem Display wurde deshalb stumm gespeichert.
Jetzt werden die echten vier Ecken ausgemessen (ueber 1-px-Marken, Chrome
kennt getBoxQuads nicht) und nur die Ueberlappung von Bild und Rahmen
abgetastet. Beides einzeln fuehrt in die Irre: das Szenen-Display ist
groesser als der sichtbare Ausschnitt, das Feature-Mockup umgekehrt. Die
Geraeterahmen stehen neu mit auf der Liste, geprueft ueber den aus der
Vorlage geeichten Dunkelanteil. Nachgestellt mit opacity 0: vorher still
gespeichert, jetzt Abbruch mit Nennung der Flaeche. 11 von 11 echten
Ausfuhren laufen ohne Fehlalarm und ohne Wiederholung durch.
Die Szenen-Screenshots fuellen ihr Display randlos. Sie lagen als kleinere
Rechtecke an handgemessenen Prozentwerten darin, die nicht aus der
Glasflaeche des Mockups stammten: 656 px blieben rechts frei, 470 px unten,
und die Werkzeugleiste des Boards verschwand oben trotzdem unter der
Blende. Weil Prozentwerte in translate() an der Bildkante haengen, loesten
Vorschau und Export sie unterschiedlich auf -- die Luecke war im Export
groesser als im Canvas. object-fit uebernimmt das jetzt, es bleibt kein
Versatz, der auseinanderlaufen koennte.
Dazu behoben: post1-alt.html konnte vier Laptop-Layouts und Slide 2
ueberhaupt nicht exportieren. workflow.png haengt an keiner Slide mehr und
fehlte in der Ladeliste, im Bild stand src="undefined".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Das blanke Rad zoomt jetzt, die linke Maustaste zieht die Flaeche. Eine
gewoehnliche PC-Maus kam vorher nicht an den Ausschnitt heran: Zoomen ging
nur mit Strg/Cmd, Schieben nur ueber Leertaste oder mittlere Taste.
Die Radschritte laufen exponentiell ueber deltaY statt in festen Spruengen,
mit Umrechnung der deltaMode-Einheiten -- ohne die zoomt Firefox pro Rastung
um ein Vielfaches weniger als Chrome. Waagerechtes Wischen und Shift+Rad
schieben weiter, damit sich ein Trackpad nicht wie eine Zoomwippe anfuehlt.
Im Bearbeiten-Modus behaelt das Element unter dem Zeiger die linke Taste.
Nach einem echten Zug wird der Klick geschluckt, sonst sprang die Auswahl
auf die Slide, ueber der die Maus zufaellig losliess.
Dabei zwei aeltere Fehler mitgenommen:
setZoom rechnete den Zeigerpunkt per Dreisatz auf scrollLeft hoch und
uebersah das Polster der Flaeche. Der Inhalt lief pro Schritt um 60 x
(Faktor-1) px weg. Der Punkt wird jetzt gemessen statt gerechnet.
Der Bearbeiten-Zug leitete seinen Massstab aus der Border-Box von .strip ab.
Die misst Breite mal Massstab hoch zwei, weil .strip ein Flex-Kind der schon
skalierten Huelle ist -- geteilt wurde also durch das Quadrat, das Element
wanderte bei eingepasster Ansicht um das 5,6-fache der Mausbewegung.
Geprueft mit echten Rad- und Zieh-Ereignissen ueber das DevTools-Protokoll,
15 Pruefungen gegen beide Dateien.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Stand hing am localStorage und damit an einem Rechner. Wer das Projekt
woanders zog, sah einen anderen Stand.
Jede Aenderung geht jetzt zusaetzlich in state/<projekt>.json, gebuendelt nach
600 ms. Beim Laden gewinnt die Datei, der localStorage ist nur noch der
Rueckfall fuer den Fall, dass der Server nicht laeuft. Gibt es die Datei noch
nicht, wird der vorhandene Browser-Stand einmalig hineingeschrieben. Ein
Reload verschluckt nichts: was im Timer haengt, geht per sendBeacon raus.
Der Server nimmt den Stand unter POST /state entgegen und loescht ihn unter
DELETE /state. Der Projektname wird gegen ein enges Muster geprueft und der
Zielpfad zusaetzlich gegen state/ gegengerechnet. Geschrieben wird erst in
eine Nebendatei und dann umbenannt, eingerueckt und mit sortierten Schluesseln,
damit git einen lesbaren Unterschied zeigt.
state/*.json gehoeren ab jetzt in jeden Commit, sonst sieht die andere
Maschine die Aenderung nicht.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Die Aufnahmen lagen auf dem Design-Rechteck des Smart-Objekts. Davon ist aber
nicht alles zu sehen: oben verdeckt die Blende des Deckels samt
Kameraaussparung, unten die Tastaturschale, rechts das davorstehende iPad.
Aus den Ecken geschaetzt kam oben 3,8 % heraus, tatsaechlich sind es 6,9 %,
und die Kopfzeile der Anwendung verschwand.
Jetzt wird gemessen: die Deckung der Screen-Ebene per Umkehr-Homographie in
den Design-Raum zurueckgerechnet, darin das groesste achsenparallele Rechteck
gesucht. Es misst 2726 x 1682 bei (74, 154), also 78,9 Prozent der Breite. Die
Aufnahme liegt darin zentriert eingepasst, nicht formatfuellend: nichts wird
abgeschnitten und nichts gezoomt.
Die freie Flaeche traegt den aus den Bildecken gemessenen Hintergrundton der
jeweiligen Aufnahme. Fuenf Stufen Unterschied reichen, damit sie sich als Rand
abzeichnet.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Drei Aenderungen am Generator, im selben Bereich der Datei verzahnt.
Notizzettel: die StickyNote aus dem Pitch-Projekt als HTML nachgebaut,
Variante purple, Farbwerte uebernommen und die Masse auf das 1080er Blatt
hochskaliert. Liegt auf der Workflow-Slide und ist wie jedes andere Element
verschiebbar.
Schatten: raus, ueberall. Kein box-shadow, kein drop-shadow. Tiefe entsteht
ueber Ueberlappung, Rahmenfarbe und Versatz. Der Umschalter faellt mit weg,
er haette nichts mehr zu schalten gehabt. Die Blaetter im Stapel-Rahmen
bekommen eine Haarlinie, sonst laege auf der hellen Variante Weiss auf Weiss.
Szenen-Mockup: Macbook Air und iPad Pro in Perspektive, aus einem Pixeden-PSD
freigestellt. Beide Displays sind ausgeknockt, die Screenshots liegen dahinter
und werden per matrix3d in die Flaechen projiziert. Die Eckpunkte sind
gemessen, nicht geschaetzt: beim Macbook aus dem transform_box des
Smart-Objekts, beim iPad ueber Ausgleichsgeraden auf den vier Glaskanten, weil
das Smart-Object dort zu hoch sitzt. Der Spalt zur weggefallenen Glasplatte
wird spaltenweise aus den Nachbarfarben interpoliert, damit am Displayrand
Schwarz und am Gehaeuse Metallic steht.
Das PSD selbst bleibt draussen: Pixeden erlaubt die Nutzung, nicht die
Weitergabe.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>