diff --git a/.gitignore b/.gitignore index 08b2447..8f9232b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ redaktionsplan/*.html # Wegwerf-Profil des Browsers beim Bau der Video-Komponenten video/.chrome/ + +# Python-Zwischendateien von serve.py +__pycache__/ diff --git a/redaktionsplan/Instagram-Redaktionsplan.pdf b/redaktionsplan/Instagram-Redaktionsplan.pdf index bab227b..6b6f3d6 100644 Binary files a/redaktionsplan/Instagram-Redaktionsplan.pdf and b/redaktionsplan/Instagram-Redaktionsplan.pdf differ diff --git a/redaktionsplan/bauen.py b/redaktionsplan/bauen.py index 5fae30a..2dd38af 100644 --- a/redaktionsplan/bauen.py +++ b/redaktionsplan/bauen.py @@ -63,6 +63,11 @@ def slots(start: date, anzahl: int, auslassen=frozenset()): # Thema, Format, Ziel. Reihenfolge ist nicht beliebig: erst warum es uns gibt, # dann die Haltung, dann die Funktionen von der täglichen Last nach hinten zu # dem, was Vorwissen braucht. +# E-Mail-Marketing und Zettelwirtschaft sind am 11.09.2026 getauscht worden. +# Die Reihenfolge geht sonst von der taeglichen Last nach hinten zu dem, was +# Vorwissen braucht -- Zettelwirtschaft ist aber der einzige Beitrag ohne +# Produkt dahinter und muss deshalb erst gebaut werden, waehrend E-Mail- +# Marketing eine fertige Oberflaeche zum Zeigen hat. PLAN = [ ("Die Geschichte", "Carousel, 6", "Herkunft. Warum es HiveGrid gibt."), ("Verbinden statt ersetzen", "Einzelbild", "Haltung. Die Kernaussage in einem Satz."), @@ -70,8 +75,8 @@ PLAN = [ ("Projektmanagement", "Carousel", "Der Überblick, den jeder Betrieb vermisst."), ("Team-Chat", "Carousel", "Ein Kanal pro Projekt, Foto rein, Aufgabe raus."), ("Form Builder", "Carousel", "Vom Kontaktformular bis zum Aufmaß."), - ("Zettelwirtschaft", "Carousel", "Wissen ohne Produkt. Wo im Betrieb Zeit verloren geht."), ("E-Mail-Marketing", "Carousel", "Aus Anfragen werden Kontakte, aus Kontakten Aufträge."), + ("Zettelwirtschaft", "Carousel", "Wissen ohne Produkt. Wo im Betrieb Zeit verloren geht."), ("Mitarbeiter-Management", "Carousel", "Wer kann was, wer ist wo, wer braucht was."), ("Der Betrieb dahinter", "Carousel", "Vierte Generation SHK. Keine Studio-Bilder."), ("KI-Anbindung, MCP", "Carousel", "Externe KI darf mitlesen, ohne Datenabfluss."), @@ -86,7 +91,7 @@ TERMINE = slots(START, len(PLAN), AUSGELASSEN) # Wie viele Beitraege fertig im Generator liegen. Sie sind in der Tabelle # gelb hinterlegt, und der Satz darueber nennt die Zahl -- beides kommt aus # derselben Konstante, damit es nicht auseinanderlaeuft. -FERTIG = 6 +FERTIG = 7 ZAHLWORT = {1: "Der eine markierte Termin ist", 2: "Die beiden markierten Termine sind", 3: "Die drei markierten Termine sind", 4: "Die vier markierten Termine sind", 5: "Die fünf markierten Termine sind", 6: "Die sechs markierten Termine sind", diff --git a/rules.md b/rules.md index a9d7e91..c1b5588 100644 --- a/rules.md +++ b/rules.md @@ -10,6 +10,39 @@ Der Generator läuft lokal: `./serve.sh` → ## 1. Wo die Wahrheit steht +> **Neue Basis ab 12.10.2026: `hivegrid-cloud`.** Das ist die aktuelle Version +> der Software, mit den neuen Komponenten. Neue Posts bauen auf ihrem Look auf, +> nicht mehr auf der Website. Bei Zweifel dort nachschauen: +> +> | Was | Quelle in `hivegrid-cloud/` | +> |---|---| +> | Farben, Schriftgrößen, Radien, Schatten | `apps/web/app/ui/theme.css` | +> | Komponenten (109, aus Subframe) | `apps/web/app/ui/components/` | +> | Subframe-Projekt | `f023064a5ca0`, siehe `.subframe/sync.json` | +> | Schrift-Dateien | `apps/web/public/fonts/instrument-sans-*.woff2` | +> | Module und Screens | `apps/web/app/modules/` | +> | Logo | `apps/web/app/ui/components/Logo/` | +> +> Die wichtigsten Werte aus `theme.css`: +> +> | Was | Wert | +> |---|---| +> | Schrift | Instrument Sans (heute hier: Manrope) | +> | Text, Knöpfe | `#24242B` (grey-900), Knöpfe sind fast schwarz | +> | Text zweitrangig | `#505057`, drittrangig `#6D6D71` | +> | Markengelb | `#F1B729` (brand-600), unverändert | +> | Zweitfarbe | Sky `#0791F0` (brand-secondary-500) | +> | Flächen | `#FAFAFA` und `#F5F4F4` | +> | Rahmen | `#E5E5E5` (neutral-200) | +> | Radien | 4, 8, 12 px | +> | Größen | Hero 72/72, Seite 48/56, Untertitel 32/40, alle 600 | +> | Symbole | Feather über `@subframe/core` (heute hier: Phosphor) | +> +> Drei Punkte widersprechen den bisherigen Regeln und sind noch nicht +> entschieden: die Schatten (`--shadow-md`, `--shadow-lg`) gegen §5 „Keine +> Schatten“, der Rahmen `#E5E5E5` gegen `#D5DBE1` aus §1a, Feather gegen +> Phosphor. Die Werte sind hier noch nicht gespiegelt. + Alle Marken-Werte stammen aus der Website, nicht aus diesem Repo. Bei Zweifel **dort nachschauen, nicht hier raten**: @@ -362,12 +395,33 @@ Quelle kam. Seitdem prüft es die Maschine, an zwei Stellen: | Bildexport | `renderSlide()` bricht ab, bevor ein PNG entsteht | | Bewegtbild | `animation.mjs` prüft an 24 Stellen über den Ablauf | -**Ein reines Muster genügt dafür nicht.** Deutsch schreibt „neue“, „Dauer“ und -„Michael“ völlig zu Recht mit `ae`/`oe`/`ue`. Nachgezählt über den gezeichneten -Text aller Projekte sind es aber nur eine Handvoll solcher Wörter — deshalb -Muster **plus** Ausnahmeliste `UMLAUT_ERLAUBT`. Bei `ss` ist es umgekehrt: -fast immer richtig (dass, Schluss, Netzanschluss), nur wenige Wörter brauchen -ein scharfes s. Die stehen einzeln in `BRAUCHT_SCHARFES_S`. +Geprüft wird beides: fehlende Umlaute **und** Em-Dashes. Die Em-Dash-Regel +stand von Anfang an hier und wurde in Post 8 trotzdem gebrochen — eine Regel, +die nur im Dokument steht, hält nur so lange, wie jemand daran denkt. + +**Bei den Umlauten genügt ein reines Muster nicht**, aber fast. Ein +ersatzweise geschriebenes `ae`/`oe`/`ue` steht nie hinter einem Vokal: „für“, +„über“, „grün“, „Sanitär“, „Lüftung“ folgen alle auf einen Konsonanten oder +stehen am Wortanfang. Hinter einem Vokal sind es dagegen immer zwei eigene +Laute — bauen, Bauer, neue, Dauer, Steuer, Mauer, genauer. Das Muster prüft +deshalb `(^|[^aeiou])(ae|oe|ue)`, und die Ausnahmeliste `UMLAUT_ERLAUBT` ist +auf die echten Sonderfälle geschrumpft: „Michael“ (ae hinter h), „aktuell“ +(ue hinter t). Vorher standen dort sechs Wörter nach demselben Muster, und +die Liste wäre mit jedem Beitrag weitergewachsen. + +Bei `ss` ist es umgekehrt: fast immer richtig (dass, Schluss, Netzanschluss), +nur wenige Wörter brauchen ein scharfes s. Die stehen einzeln in +`BRAUCHT_SCHARFES_S`. + +**Mailadressen und Domains sind ausgenommen.** In `buero@muster-shk.de` kann +gar kein ü stehen; die umlautfreie Schreibung ist dort keine Schludrigkeit, +sondern Pflicht. + +**Ein Zeilenumbruch ist eine Wortgrenze.** Die Prüfung liest nicht +`textContent`, sondern die einzelnen Textknoten mit Leerzeichen dazwischen. +Sonst klebt eine Überschrift wie „Formulare selbst bauen.`
`Per +Drag-and-drop.“ zu `bauen.Per` zusammen — ein Wort, das es nicht gibt, das +aber `ue` enthält und die Prüfung auslöst. Schlägt die Prüfung bei einem Wort an, das so richtig ist, gehört es in die Ausnahmeliste — nicht die Prüfung abgeschaltet.