96dcd080e1edc8af219d87b85a2690e1bfa14930
32
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4d227a01c9 |
Post 7: Form Builder, mit dem Bewegtbild als Titelelement
Anders als die Beitraege davor: das Bewegtbild ist das ERSTE Element im
Carousel und kein Anhang am Ende. Ein Form Builder ist ein Werkzeug, das
man bedient -- was er kann, sieht man am Bauen und nicht an einem
Standbild davon. Die drei Slides erklaeren danach, was das Gebaute
leistet, und tragen deshalb alle Ueberschrift und Fliesstext.
animForm Das Formular baust du selbst. 6 s, der Editor beim Bauen
1 Frag genau das, was du wissen musst. die fuenf Fragen mit ihren Typen
2 Fragen, die nur kommen, wenn sie
noetig sind. das bedingte Feld
3 Aus der Antwort wird ein Lead. das Hinweisfeld mit Pipeline
Zwei Folgen davon, die man wissen muss: die Kachel im Profilraster ist
jetzt das erste Bild der Animation und nicht mehr eine eigens dafuer
gebaute Slide -- Bild 0 zeigt deshalb schon ein Formular mit zwei Fragen
und keine leere Flaeche. Und die Ueberschrift des Bewegtbilds ist die
Ueberschrift des Beitrags.
QUELLE
S02EinfacherFragenEditor.tsx aus dem Pitch-Paket, derselbe Bildschirm wie
assets/screens/form-builder.png. Die fuenf Fragen, ihre Feldtypen, die
Marke "Bedingt sichtbar" und der Satz im Hinweisfeld stehen woertlich
dort. Die Farben des Hinweisfelds sind ueber die Token-Kette aufgeloest
(surface-feedback-subtle-information -> feedback-information-100 ->
ocean-100 = #E1F4FD), nicht aus dem Bild geschaetzt. Elf zusaetzliche
Zeichen aus demselben Phosphor-bold-Satz.
ABWEICHUNGEN, ALLE DOKUMENTIERT
Die Quelle schreibt {general ? "Website-Anfragen" : "Vertrieb SHK"} --
hier steht Vertrieb SHK, weil der Beitrag durchgehend das Gewerk zeigt.
"Sanitaer" und "Klima / Lueftung" stehen mit Umlaut. "Deaktivieren" ist
weg, weil ein Ausschalter nichts zur Aussage beitraegt und dem
Pipeline-Satz den Platz nahm.
DREI SACHEN, DIE ERST AM GERENDERTEN BLATT AUFFIELEN
Die Karte wuchs und schrumpfte zugleich: der Kasten wurde mit dem Inhalt
hoeher, und bei fester Breite skaliert die Zeichnung dabei kleiner. Die
Animation hat jetzt eine feste Kastenhoehe.
Der Pipeline-Satz lief unter den Knopf und endete bei "Vertrieb S".
Jetzt zweizeilig statt gekuerzt -- der Pipelinename ist die halbe
Aussage des Felds.
Eine Ueberschrift mass 936 px und lief 45 px ueber die Schutzzone. Am
gerenderten Bild nachgemessen, nicht geschaetzt; die kuerzere Fassung
liegt bei 846.
Erreichbar ueber die Toolbar in allen Projekten und in uebersicht.html.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
|
||
|
|
344645cb77 |
Umlaute: der Export prueft sie, statt sich aufs Erinnern zu verlassen
Auf einer Slide stand "Sanitaer" und "Klima / Lueftung". Beides kam woertlich aus dem Klickdummy, wo es schludrig eingetippt ist, und beides las sich im fertigen Beitrag wie ein Fehler -- weil es einer ist. Gefunden hat es niemand beim Bauen, sondern jemand, der auf den fertigen Post geschaut hat. Ein reines Muster genuegt als Pruefung nicht: Deutsch schreibt "neue", "Dauer" und "Michael" voellig zu Recht mit ae/oe/ue. Nachgezaehlt ueber den gezeichneten Text aller sieben Projekte sind es aber nur acht solche Woerter, alle davon richtig oder gewollt (die Kanal-Handles). Also Muster plus kurze Ausnahmeliste -- null Fehlalarme, "Sanitaer" faellt trotzdem auf. Bei ss ist es umgekehrt: 15 Treffer im gezeichneten Text, alle richtig (dass, Schluss, Netzanschluss). Deshalb dort eine Liste der wenigen Woerter, die ein scharfes s brauchen, statt eines Musters. Geprueft wird an zwei Stellen, weil es zwei Wege zum fertigen Bild gibt: renderSlide() bricht ab, bevor ein PNG entsteht animation.mjs an 24 Stellen ueber den Ablauf Der zweite Punkt war ein eigener Fehler: der erste Anlauf prueft nur den Anfangszustand und fand nichts, weil die falschen Woerter dort erst ab t = 0,4 erscheinen. Der Text einer Animation aendert sich mit der Zeit, die Pruefung muss es auch. Beide Tore sind mit absichtlich wieder eingebautem "Sanitaer" scheitern gesehen worden. Eine Pruefung, die man nie hat scheitern sehen, ist keine -- der erste Test lief durch, weil mein Testskript htmlToImage direkt aufruft und renderSlide dabei umgeht. Regel und Begruendung stehen in rules.md 4, die Falle in 8. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv |
||
|
|
77734b6da2 |
Server: Assets werden nachgefragt statt jedes Mal neu geladen
Auf allem stand no-store -- im Server und noch einmal in preloadAssets(). Der Browser durfte also nichts behalten, und jeder Reload lud die vollen Assets neu: 3 MB Screenshots, 3,3 MB Mockups, Schriften, Bibliotheken. Am schlimmsten in uebersicht.html. Die laedt die sechs Projekte als iframes, und weil keiner etwas behalten durfte, holte sich jeder iframe dieselben Dateien noch einmal: 38,1 MB in 435 Anfragen. uebersicht.html erster Aufruf 38,1 MB -> 2,2 MB uebersicht.html Reload 32,8 MB -> 1,9 MB post6.html Reload 5,4 MB -> 0,3 MB Die Absicht hinter no-store war richtig: ein Bild, das unter demselben Namen ausgetauscht wird, muss sofort ankommen. no-cache leistet das billiger -- der Browser behaelt seine Kopie, fragt aber vor jeder Benutzung nach. Nachgeprueft: unveraendert antwortet der Server mit 304 und 0 Bytes, nach einem touch mit 200 und der vollen Datei. Seite, Stand und Auskuenfte (/bilder, /state) bleiben bei no-store. Die sind klein und duerfen nie aus einer Kopie kommen. Die eine Zeile stand in allen sieben Projektdateien. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv |
||
|
|
7723e5bf5a |
Post 6: der Team-Chat, aus der Nachricht wird die Aufgabe
Nummer 5 im Redaktionsplan, erscheint Mi 26.08. Carousel, vier Slides, Theme modern, Variante hell, Punktgrund. DER BEITRAG 1 Bueero und Baustelle, endlich im selben Chat. Liste und Verlauf 2 Ein Kanal pro Projekt. die Chatliste gross 3 Foto rein, Aufgabe raus. Fotos, Aufgabe, Bestaetigung 4 Nicht nur Text. das Menue hinterm Plus Slide 3 ist der Kern und keine Konstruktion: im Werkzeug folgen die drei Nachrichten genau so aufeinander. Tobias schickt die Baustellenfotos, darauf eine Nachricht mit angehaengter Aufgabe, darauf die Systemzeile "Aufgabe Materialliste pruefen im Projekt erstellt". Die letzte Zeile macht den Unterschied -- die Aufgabe liegt danach im Projekt, nicht nur im Verlauf. Das ist woertlich der Auftrag des Redaktionsplans. Vier Slides statt fuenf. Der fuenfte Punkt waere DSGVO und deutsche Server gewesen, und dafuer gibt es keinen Bildschirm. Eine Behauptung ohne Bild gehoert in die Bildunterschrift, dort steht sie woertlich wie auf der Website. WOHER ES KOMMT Alles aus components/general/GeneralTeamChatPage.tsx des Pitch-Pakets: die acht Kanaele aus CHATS, der Verlauf aus INITIAL_MESSAGES, der Aufbau einer Zeile und einer Blase aus der Quelle selbst, die Filterzeile aus dem Typ ChatFilter, das Plus-Menue aus Composer. Symbole aus @subframe/core, Farben aus ui/theme.css. Vom Chat gibt es nur eine Fassung, unter /allgemein/team-chat -- anders als bei der Pipeline mit ihren vier eigenen SHK-Bildschirmen. Die Inhalte darin sind trotzdem aus dem Gewerk: Waermepumpe Mueller, Montagetermin, Baustellenfotos. WO BEWUSST ABGEWICHEN WIRD - Slide 1 zeigt drei von sechs Nachrichten, Slide 2 fuenf von acht Kanaelen. Ein Chat und eine Liste scrollen beide. Slide 2 behaelt alle drei Sorten: Projektkanal, Direktnachricht, Gruppe. - Die Bildergalerie ist eine Anhangkarte, kein Bild. Im Werkzeug laedt GalleryPreview zwei Fotos von Unsplash. Fremde Fotos in einen Beitrag zu setzen, der von der eigenen Baustelle spricht, waere eine Behauptung ueber Material, das wir nicht haben. DREI FALLEN Die Listenzeile hat drei Zeilen, nicht zwei. Der erste Nachbau schob Nadel und Ungelesen-Punkt neben die Vorschau, wo sie an den Text stiessen -- und die Zuordnung fehlte ganz. Das war nicht nur Layout: der Fliesstext behauptete "Jeder Kanal haengt an seiner Projektnummer", und die Nummer war nirgends zu sehen. Im Original steht sie als dritte Zeile. Eine feste Obergrenze fuer die Blasenbreite hat ein Zitat gekuerzt. Fuer die Titelslide musste sie klein sein, damit die Unterhaltung neben die Liste passt; auf Slide 3 stand deshalb "Materialliste pruefen · faelli..." Die Grenze haengt jetzt an der Spalte, in der die Blase steht. Beinahe haette ich ein Zitat ohne Grund gekuerzt. Die Website-Ueberschrift lautet "Bueero und Baustelle, endlich im selben Chat." Das "endlich" war gestrichen mit der Begruendung, die Zeile laufe sonst ueber die Schutzzone -- und diese Begruendung sogar mit einer Zahl versehen, die nicht gemessen war. Nachgemessen sind es 818 px von 896 erlaubten: sie passt. Das Wort ist wieder drin. GEPRUEFT Luft 102 / 61 / 254 / 141 px, alle Zeichnungen innerhalb der 92-px- Schutzzone, breiteste Ueberschriftzeile 818 von 896, 214 CSS-Regeln vollstaendig, Konsole ohne Fehler, vier PNGs aus dem echten Ausgabeweg bei 2160 x 2700. Downloads blieb leer, der Projektstand unveraendert. Die Pruefskripte im Sitzungsordner waren geloescht und sind neu angelegt, diesmal mit gemeinsamem CDP-Kern: pruef.mjs misst ueber getBBox die tatsaechlich gezeichnete Flaeche und die Breite jeder Ueberschriftzeile, schuss.mjs rendert einzelne Slides, breite.mjs misst eine Formulierung, bevor sie in die Datei kommt, export.mjs faehrt den Ausgabeweg und faengt /save ab. NEBENBEI Die Projektliste steht jetzt achtmal im Repo, einmal je Post-Seite plus uebersicht.html, dort zusaetzlich in PROJEKTE. Post 6 ist ueberall eingetragen. Wichtig fuer den offenen Tab: der Eintrag steht im Markup und entsteht nicht zur Laufzeit -- eine Seite, die schon geladen war, zeigt ihn erst nach dem Neuladen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
32206e7352 |
Post 5: das Projektmanagement, vier Bildschirme einer Pipeline
Nummer 4 im Redaktionsplan, erscheint Fr 21.08. Carousel, fuenf Slides, Theme modern, Variante hell, Punktgrund. Stichwort des Plans: "Der Ueberblick, den jeder Betrieb vermisst." DER BEITRAG Das Demo-Projekt haelt fuer die Pipeline vier eigene Bildschirme bereit -- Schablone, Board, Liste, Detail. Jeder bekommt eine Slide, dazu die Karte aus der Naehe: 1 Von der Anfrage bis zur Abnahme. 4A das Board, drei Phasen 2 Alles Wichtige auf einer Karte. 4A eine Karte gross 3 Vom Verkauf in die Abwicklung. 4B das Projekt in der Abwicklung 4 Board oder Liste. 4C dieselben Projekte als Tabelle 5 Du bestimmst, was draufsteht. 3 der Feldeditor ES SIND ZWEI PIPELINES, NICHT EINE Das ist die Pointe und der Grund fuer Slide 3. Das Board gehoert zu "Vertrieb: Anlagen-Verkauf", das Projekt in der Detailansicht liegt in "Auftragsabwicklung SHK", und ein Knopf in der Kopfzeile schiebt es von der einen in die andere. Beide Namen stehen woertlich in PipelineBoardInteractive.tsx und S02PipelinesDetailansicht.tsx. Warum das eine Software sein kann, beantwortet Slide 5: die Felder haengen an der Pipeline, nicht am Programm. Siebzehn Feldtypen und drei Stufen unter "Pflicht ab Board-Spalte", im Screen offen auf "Aufmass erledigt". Ein SHK-Betrieb legt sich das an, ein anderer etwas anderes. EINE RICHTIGSTELLUNG Ein Zwischenstand behauptete, die Detailansicht sei nur ein Entwurfs-PNG. Geprueft worden waren die Beschriftungen aus 07_Screen-4b_Karten-Detail.png -- KUNDENDATEN, OBJEKTDATEN, Wahrscheinlichkeit, Heizlast, Lead-Quelle -- und die kommen im Code wirklich nirgends vor. Daraus wurde der falsche Schluss gezogen, es gebe den Bildschirm nicht. Es gibt ihn: app/(screens)/4b/ rendert S02PipelinesDetailansicht.tsx, 3150 Zeilen, mit den Rubriken GRUNDDATEN, PLANUNG & VERANTWORTLICHE, PROJEKTKONTAKTDATEN, KONTAKTE, FIRMENDATEN, ANSPRECHPARTNER, PROJEKTADRESSE und ZUSATZADRESSEN. Das PNG ist ein aelterer Entwurf desselben Bildschirms, nicht sein Beleg. Die Abwesenheit einer Zeichenkette beweist die Abwesenheit eines Bildschirms nicht. DIE KARTE KOMMT AUS DEM CODE, NICHT AUS DEM SCREENSHOT Der erste Anlauf war von assets/screens/pipelines.png abgemalt und lag an drei Stellen daneben, von denen im Bild keine zu erkennen war: Prioritaet, Balken und Kuerzel stehen als Gruppe rechts und haengen ueber die Kante des Fusses (absolute -bottom-4 right-2), im Fuss steht ueber dem Termin die Zeitspanne des Projekts, und die Balken sitzen in einem eigenen umrandeten Kasten. Erst ProjectCard.tsx hat das gezeigt. Die Karte ist jetzt Klasse fuer Klasse daraus nachgebaut, 320 breit wie w-80, Titel auf hoechstens zwei Zeilen wie line-clamp-2. Anders als bei Post 4 wird nichts umgefaerbt. Eine Pipeline lebt davon, dass man das Gewerk an der Farbe erkennt, ohne zu lesen, und dass der Fuss sich mit der Prioritaet faerbt. Zuordnung aus CATEGORY_TONES, Toene aus ui/theme.css, Kuerzelfarbe aus avatarColor je Projekt. ALLE ZAHLEN SIND GERECHNET Anzahl und Summe je Spalte kommen aus denselben 41 Datensaetzen wie die Karten: Angebot 189.800, Auftrag 224.800, In Ausfuehrung 352.300 Euro. Wer eine aendert, muss die andere mitziehen. WO BEWUSST ABGEWICHEN WIRD - Slide 1 zeigt zwei bis drei Karten je Spalte, der Kopf zaehlt weiter vier. So ist es im Werkzeug auch, eine Spalte zeigt, was aufs Bild passt. Gleich hohe Saeulen sahen aus wie eine Tabelle. - Slide 4 zeigt vier von neun Tabellenspalten und sieben von elf Zeilen. Die Spalte Sachbearbeiter ist entfallen, damit "Auftragswert gesperrt" ungekuerzt hineinpasst -- der Wortlaut ist der Grund, warum die Spalte ueberhaupt auf der Slide steht. - Slide 3 stellt die Rubriken untereinander statt nebeneinander, und zwei fehlen: PDS-INTEGRATION, weil der Beitrag sich an Betriebe allgemein richtet und nicht an die mit diesem einen Branchenprogramm, und "ADRESSDATEN . TEST A (ZUSATZADRESSEN AN)", weil das ein Arbeitstitel aus der Entwicklung ist und kein Bildschirmtext. - Ein "Kalender" im Umschalter stand kurz drin und ist raus: die ToggleGroup des Boards kennt board und list, mehr nicht. DIE MASSSTAEBE SIND ABGESTIMMT Slide 1, 3, 4 und 5 zeigen ihre Schrift zwischen 16 und 23 px. Slide 2 ist als Nahaufnahme gedacht und liegt bei 47. Vorher stand sie auf 59 bis 73, und eine einzelne Karte wirkte damit groesser als das ganze Board davor. Der Kopfbereich ueber dem Board -- Seitentitel, Umschalter, Filterleiste -- ist wieder entfallen. Im Profilraster ist die Slide eine Kachel von rund 150 px, dort liest niemand eine Bedienoberflaeche. Wie die Pipeline heisst, sagt Slide 3; dass es eine Liste gibt, sagt Slide 4. EIN PRUEFSKRIPT HAT DEN PROJEKTSTAND VERSTELLT export.mjs schaltet die Slides mit der Pfeiltaste weiter. Die Seite startet aber im Bearbeiten-Modus, und dort verschieben Pfeiltasten das gewaehlte Element statt die Slide zu wechseln. Jeder Prueflauf hat die Zeichnungen geschoben und das in state/post5.json geschrieben: zuletzt vis dx 3 dy -69 auf Slide 1 und auf Slide 2 ein size 762, das die im Code eingestellten 720 ueberschrieb. Die Karte, ueber deren Groesse zwei Runden lang geredet wurde, war beim Messen also gar nicht die aus dem Code. Gemerkt an Messwerten, die im Code nirgends standen -- 89 px Rand rechts bei eingestellten 92, 177 px unten bei eingestellten 120. Zahlen, die man sich nicht erklaeren kann, sind ein Befund und keine Messungenauigkeit. Der Stand ist bereinigt, das Skript verlaesst vor dem Blaettern den Bearbeiten-Modus und schreibt die Datei am Ende zurueck. NEBENBEI - Plaettchenbreiten werden gemessen statt geschaetzt. Zeichenzahl mal 0,52 em stimmt fuer "Heizung" und geht bei "Waermepumpe" daneben, das Wort stand ueber dem Rand. Ein Canvas misst dieselbe Schrift, die das SVG spaeter zeichnet; aus derselben Messung kommt der Titelumbruch. - Die Ueberschrift von Slide 1 steht auf denselben Werten wie die von post4.html, nachgemessen: 76 px, Gewicht 800, -2,432 px Sperrung, zentriert, Oberkante 95, Blockhoehe 158, Versatz dy 3. - Die Projektliste steht siebenmal im Repo, einmal je Post-Seite plus uebersicht.html, dort zusaetzlich in PROJEKTE. Post 5 ist ueberall eingetragen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
bae57e64ce |
Post 4: die Workflow-Engine, drei Ansichten derselben Oberflaeche
Nummer 3 im Redaktionsplan, erscheint Mi 19.08. Carousel, vier Slides, Theme modern, Variante hell. DER BEITRAG Ein Ablauf, die Bausteine, aus denen er entsteht, und der Hinweis, dass man nicht bei null anfaengt: 1 Automatisiere deinen Betrieb. ein Ablauf auf dem Canvas 2 Erst der Ausloeser. die Ausloeser-Auswahl 3 Dann die Aktionen. die Aktionen-Auswahl 4 Fang nicht bei null an. drei fertige Vorlagen Slide 2 und 3 teilen sich eine Funktion mit zwei Rubriken, weil es im Produkt eine Auswahl ist: "Ausloeser" und "Aktionen" stehen dort untereinander im selben Feld. Getrennt gezeichnet waeren es zwei Bilder, die zufaellig gleich aussehen. Vier Slides statt der fuenf bis sieben aus dem Redaktionsplan. Das ist eine Spanne und kein Soll: eine Slide, die nichts hinzufuegt, kostet einen Wisch und gibt nichts zurueck. WAS AUS DEM PRODUKT KOMMT UND WAS NICHT Der Knoten ist NodeItem aus ui/components/NodeWorkflowEngine des Pitch-Pakets: quadratisch 128 x 128, rounded-lg, 6 px Rand, Titel und Beschreibung unter dem Feld, beim Ausloeser die linke Flanke voll gerundet. Genau so rendert es auch assets/screens/workflow.png. Ein Zwischenstand zeichnete stattdessen breite Karten mit farbiger Kante links und einem Block "BESCHREIBUNG" -- abgemalt vom Pitch-Bild 02_Praesentation/03. Im Code des Projekts gibt es das nirgends: weder "BESCHREIBUNG" als Label noch eine linke Farbkante, beides null Treffer. Der Kommentar behauptete trotzdem, es sei ein Nachbau der Komponente. Das ist berichtigt. Die Farben sind die des Produkts, aufgeloest aus ui/theme.css ueber die ganze Token-Kette und nicht aus dem Bild geschaetzt. Sie tragen Bedeutung: gruen faengt an, rot aendert Daten, blau meldet, amber macht eine Aufgabe daraus, violett entscheidet. Ein Zwischenstand hatte sie durch Markenfarben ersetzt, weil rules.md 2 diese Toene nicht kennt -- zurueckgenommen, der Beitrag zeigt die Oberflaeche, und umgefaerbt waere es eine Nacherzaehlung. Alle Produkttexte stehen woertlich in der Quelle. Wo ein Name nicht in eine Zeile passte, steht er zweizeilig: aus "Daten vereinheitlichen" ein "Pruefen" zu machen ist keine Kuerzung, sondern ein anderer Name. DREI STELLEN, AN DENEN BEWUSST ABGEWICHEN WIRD - Slide 1 gabelt nach dem zweiten Knoten. Alle drei echten Ablaeufe verzweigen erst an Position 3 oder 4, und das fuellt ein hochkantes Format schlecht -- solange der Stamm laeuft, steht ueber und unter ihm nichts. Dafuer fehlt zwischen "Formular eingegangen" und "Passender Lead?" der Schritt "Daten vereinheitlichen". Ein Ablauf, den es genau so gibt, ist es damit nicht mehr; einer, den es geben koennte, schon. - Slide 4 nennt die Demo-Ablaeufe "Vorlagen". Dass es eine Vorlagen-Bibliothek gibt, steht als Merkmal auf der Website; dass sie diese drei enthaelt, steht nirgends. Im Werkzeug werden sie ueber workflowId geladen, nicht als Galerie gezeigt, und das Wort "Vorlage" kommt in der Komponente nicht vor. - Kein PDS im Beitrag. Von den sechs Vorlagen nennen drei das Branchenprogramm. Uebrig bleibt genau die Gruppe GENERAL_WORKFLOW_PRESETS, in der es kein einziges Mal vorkommt -- also keine Auswahl nach Geschmack, sondern die vollstaendige zweite Gruppe. Gekuerzt wurde nichts. Erfundene Vorgaenge sind raus. Ein Zwischenstand hatte eine Slide mit einem Aktivitaetenverlauf samt Uhrzeiten. Nichts davon war gemessen, und bei einem Produkt vor dem Start ist eine erfundene Uhrzeit kein Beispiel, sondern ein Beleg, den es nicht gibt. DER PUNKTGRUND Die Arbeitsflaeche des Workflow-Editors, Werte aus WorkflowEditor.tsx der Website. Zwei begruendete Abweichungen: die Teilung ist verdoppelt, weil ein 24er Raster im Feed auf 9 px zusammenfaellt und zu grauem Schleier wird, und der Grund bleibt weiss statt getoent, weil rules.md 1a das verbietet. EIN FEHLER, DER FAST DURCHGERUTSCHT WAERE Beim Entfernen der Karten-Regeln von Post 2 blieben rund neunzig Zeilen Deklarationen ohne Selektor stehen, dazu ein Kommentar ohne Ende: nur die Selektorzeilen waren weggeschnitten. CSS faengt sich davon nicht wieder, der Parser ueberspringt bis zur naechsten Marke -- und dabei verschwand die Regel [data-edit] darunter. Damit war das Verschieben von Elementen im Canvas tot, ohne dass die Seite einen Fehler zeigte. Sichtbar wurde es erst, als ein gespeicherter Versatz von 3 px nicht mehr ankam. Behoben, und an der Stelle steht jetzt eine Warnung: Regeln als ganzen Block entfernen und danach nachsehen, ob document.styleSheets sie noch alle kennt. NEBENBEI - Die Ueberschriften stehen auf denselben Werten wie post3.html, bis auf den Pixel nachgemessen: 76 px, -0,032em, nowrap und der Versatz dy 3, den auch post2, post2-alt und post3 auf jeder Slide tragen. - Die Projektliste steht sechsmal im Repo, einmal je Post-Seite plus uebersicht.html. Post 4 ist ueberall eingetragen. Wer einen siebten Beitrag anlegt, muss an alle sechs Stellen denken. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
ceb63fec38 |
Post 3: zweite Slide, und eine Komponenten-Library fuers Video
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> |
||
|
|
a5ec0c565e |
Post 3: Verbinden statt ersetzen, ein Einzelbild mit dem Wabenfeld
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> |
||
|
|
16b85a285a |
Projektuebersicht: alle Streifen untereinander auf einer Flaeche
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> |
||
|
|
993dc3e5ef |
Themes als eigene Ebene, Theme modern angelegt
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> |
||
|
|
276cced03c |
Seitenleiste ausgeduennt, Vorschau statt Bearbeiten-Schalter
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> |
||
|
|
57d1f4c540 |
Nur noch das Raster als Grund, Menueleiste, Post 2
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>
|
||
|
|
92529a8c47 |
Element-Feld rechts: Text, Masse, Ausrichten, Ebene
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>
|
||
|
|
778aa7bab7 |
Elemente loeschen, Ebene einstellen, Streifen als eine Flaeche
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> |
||
|
|
cbb5141d8b |
Importiertes Bild landet mittig auf der gewaehlten Slide
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> |
||
|
|
11eaf3f3e7 |
Umlaute im Dateinamen, klarere Meldung bei altem Server
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> |
||
|
|
8e1ac0d2a9 |
Eigene Bilder importieren und auf Slides legen
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> |
||
|
|
1cce5ec492 |
Slides lassen sich anlegen, kopieren, loeschen und umsortieren
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> |
||
|
|
21e1d3009f |
Post 1 Alt und Post 2 entfernt
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> |
||
|
|
94dbd5c7d4 |
Rueckgaengig, Slide-Tausch und ausgeblendete Tags
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> |
||
|
|
0a378896c9 |
Titel-Slide auf Ueberschrift und Mockup reduziert
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> |
||
|
|
344f58dde0 |
Titel-Mockup getauscht, Projektstand geht beim Laden nicht mehr verloren
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> |
||
|
|
46cce993ca |
Fertiges Laptop-Mockup auf der Titel-Slide, Tags umbenannt
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> |
||
|
|
1923fbbb15 |
Ueberschriften nachgezogen, eigenes Blatt fuer die Chat-Slide
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> |
||
|
|
38c256e52f |
Ausrichten im Bearbeiten-Modus
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> |
||
|
|
3832f82a65 |
Export behaelt die volle Aufloesung, Kontrolle erkennt fehlende Bilder
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> |
||
|
|
94e1b9a84a |
Canvas mit der Maus schieben und zoomen
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> |
||
|
|
1359c6eba8 |
Projektstand liegt im Repo statt nur im Browser
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> |
||
|
|
f046f6d6f0 |
Screens der Szene vollstaendig sichtbar einpassen
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> |
||
|
|
89434d728e |
Notizzettel, keine Schatten, Szenen-Mockup
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> |
||
|
|
170b72a538 |
Canvas-Bearbeitung, Projektspeicher und Arbeitsfläche
Der Generator ist von einer Vorschau zu einer Werkbank geworden: Slides lassen sich direkt im Canvas verschieben und skalieren, der Stand bleibt erhalten. - Streifenansicht mit allen Slides nebeneinander, Auswahl per Klick - Durchlaufendes Blatt: jede Slide trägt die Inhalte ihrer Nachbarn, damit verschobene Elemente über die Kante hinweg weiterlaufen - Bearbeiten im Canvas: ziehen, Schriftgrößen und Bildbreiten, Reset je Element oder komplett - Projektstand pro Post im Browser gespeichert, Navigation zwischen den Posts - Arbeitsfläche vom Bedienfeld getrennt, eigener Zoom und Panning - Bildrahmen als Chamfer, rund, Stapel oder aus; Schatten schaltbar - Screenshots zeigen den vollen Screen statt eines Ausschnitts - Kategorien in der Sidebar standardmäßig zugeklappt Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
124524482b |
HiveGrid Social: Design-Library und Post-Generator
Autarke Werkbank für Social-Grafiken: Slides als HTML, Bearbeitung im Canvas, Export als Instagram-taugliche PNGs. - Assets nach brand/partner/mockups/screens sortiert, Karteileichen entfernt - G-Marke als eigene Datei statt nur als Polygon im Code - Partner-Logos und Geerkens-Logo ergänzt - Keine externen Referenzen: Schrift, Bibliotheken und Bilder liegen lokal |