- assets/favicon/kalina-favicon.svg: K ohne Beeren-Cluster (bei 16 px unsichtbar) - Raster 16/32/48/180/192/512 + ico mit PIL gezeichnet: ImageMagick/MSVG ignoriert vererbte stroke-Attribute und liefert die Marke ohne K - tools/kalina-pdf: --min-fill (0.10, Bruch) von --ziel (0.55, Hinweis) getrennt, Deckblatt wird berichtet statt bewertet, Raster auch fuer Seite 1
KALINA CI
Corporate Identity der KALINA als versioniertes Artefakt: eine Satzvorlage (CSS), drei Dokumentvorlagen, die Marke als SVG, ein Stempel-Skript für fremde PDFs und eine CLI, die alle drei Wege bedient. Ein Dokument, das nach KALINA aussehen soll, nimmt diese Dateien — keine nachgebauten Farben, kein selbst gezeichnetes Logo.
css/kalina-ci.css Satzvorlage: @page A4, Kopfleiste, Tabellen, Plakette, Fußlinie
templates/ report.html · page.html · bild-mit-prompt.html
assets/ kalina-mark.svg · kalina-wordmark.svg · kalina-logo-combined.svg · favicon/
scripts/stamp_existing_pdf.py fremdes PDF mit Deckblatt/Marke/Fußzeile versehen
tools/kalina-pdf CLI: build · stamp · check · tokens
tokens.json Farben, Schriften, Geometrie, Zonen (maschinenlesbar)
SKILL.md Einstiegspunkt für Agenten (Frontmatter + Regeln + Fallen)
docs/aenderungen.md der verbindliche Änderungsweg
Schnellstart
git clone <dieses-repo> kalina-ci && cd kalina-ci
cp templates/report.html bericht.html # «Platzhalter» füllen
tools/kalina-pdf build bericht.html --stamp --titel "Angebot 2026-17"
tools/kalina-pdf stamp fremd.pdf -o fremd-kalina.pdf --titel "Rechnung 4711"
tools/kalina-pdf check bericht.pdf --raster raster/
Voraussetzungen: weasyprint (Layout), pymupdf (Messung/Raster),
matplotlib + pypdf (Stempel), pdftoppm optional für Sichtprüfung.
Farben
Ink #0B0F14 · Bone #F5F5EF · Kalina-Rot #C1121F · Steel #3A4250 · Muted #8A94A2
Wie Agenten das nutzen
Zwei Wege, gleicher Inhalt:
- Als Skill importiert (Paperclip:
POST /api/companies/<id>/skills/importmit{"source": "<URL dieses Repos>"}). Der Import liestSKILL.mdund alle Dateien darunter, hältrefundtrackingReffest und meldet Aktualisierungen überupdate-status. - Als Arbeitskopie (Hermes, Skripte, Cron): Repo klonen,
tools/kalina-pdfaus der Kopie aufrufen. Die CLI findet CSS, Vorlagen und Stempel relativ zu sich selbst.
Zugriff
Das Repo ist öffentlich lesbar — nicht aus Bequemlichkeit: der Skill-Import der Paperclip-Instanz holt Bäume und Rohdateien ohne Authentifizierung, ein privates Repo wäre dort nicht importierbar. Deshalb gilt die Inhaltsregel:
Keine internen Hostnamen, keine IP-Adressen, keine Zugangsschlüssel, keine Kundeninhalte. Interne Verdrahtung gehört in die jeweilige Betriebsdoku, nicht hierher.
Schreibzugriff haben mm (Owner) und das Agenten-Konto kalina (Collaborator,
write). Weitere Agenten werden als Collaborator mit write aufgenommen — die CI ist
kein Diskussionsgegenstand, sondern eine Vorlage, die Agenten anwenden.
Änderungen
Nicht ad hoc. Der Weg steht in docs/aenderungen.md:
Issue im Repo → Branch ci/<thema> → PR → Review → Merge → CHANGELOG.md ergänzen.
Wer die CI in einem Projekt „schnell anders" braucht, ändert das Projekt, nicht die CI.