2026-06-24 14:40:43 +00:00
2026-06-24 14:40:43 +00:00
2026-06-24 14:40:43 +00:00
2026-06-24 14:40:43 +00:00
2026-06-24 14:40:43 +00:00
2026-06-24 14:40:43 +00:00
2026-06-24 14:40:43 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:31:42 +00:00
2026-06-24 14:42:02 +00:00

Monthly Report Kit

Ein reproduzierbares Starterpaket fuer monatliche Kundenreports mit:

  • Claude Structured Outputs fuer valide, schemakonforme Inhalte
  • fester HTML/CSS-Vorlage statt KI-generiertem Layout
  • 28 austauschbaren Designs in 10 Layoutfamilien
  • Python/FastAPI-Render-Service
  • Gotenberg fuer die PDF-Erzeugung mit Chromium
  • JSON-Schema-Validierung vor jedem Rendern
  • n8n-Bausteinen und einem importierbaren Beispielworkflow
  • Beispielreport, Prompt-Vorlagen und PostgreSQL-Grundstruktur

Architektur

PostgreSQL / andere Datenquelle
        |
        v
n8n normalisiert Monatsdaten
        |
        v
Claude Messages API + output_config.format
        |
        v
validiertes Claude-JSON
        |
        v
Report-Payload aus Kunde + Kennzahlen + Claude-Inhalt
        |
        v
report-renderer -> HTML/Jinja2 -> Gotenberg -> PDF

Claude entscheidet nur, was im Report steht. Das Template entscheidet, wie es aussieht.

Schnellstart

cp .env.example .env
docker compose up -d --build
curl http://localhost:8080/health

Beispielreport erzeugen:

curl \
  --request POST http://localhost:8080/render \
  --header 'Content-Type: application/json' \
  --data @examples/sample-report.json \
  --output output/monatsreport-beispiel.pdf

HTML-Vorschau im Browser:

curl \
  --request POST http://localhost:8080/preview/html \
  --header 'Content-Type: application/json' \
  --data @examples/sample-report.json \
  --output output/preview.html

Wichtigste Dateien

Datei Zweck
renderer/app/theme_catalog.py Katalog aller 28 Designs und Farbpaletten
renderer/app/templates/ 10 wiederverwendbare Layoutfamilien
scripts/render-theme-gallery.py erzeugt Vorschauen und einen PDF-Designkatalog
renderer/app/schemas/claude-output-anthropic.schema.json API-kompatibles Structured-Output-Schema
renderer/app/schemas/claude-output.schema.json strenge Nachvalidierung mit Textlaengen und Grenzen
renderer/app/schemas/report-payload.schema.json kompletter Render-Payload
prompts/system-prompt.txt feste Claude-Rolle und Regeln
prompts/user-prompt-template.txt dynamischer Auftrag je Kunde/Monat
n8n/workflow-template.json importierbarer Workflow-Startpunkt
n8n/postgres-schema.sql Tabellen fuer Konfiguration und Reportlaeufe

Design auswählen

Alle verfügbaren Designs liefert der Renderer über GET /themes. Im Payload genügt die Theme-ID:

{
  "design": {
    "theme": "executive-blue",
    "palette_mode": "theme"
  }
}

palette_mode: "theme" verwendet die fest definierte Farbwelt des Designs. Mit palette_mode: "custom" bleiben Layout und Typografie erhalten, während die im Payload gelieferten Kundenfarben verwendet werden. Die flexiblen Varianten modern und classic verwenden standardmäßig Kundenfarben.

Enthaltene Layoutfamilien

Familie Charakter Designs
Modern Karten, Verlaufskopf, weich modern, soft-lavender, midnight-gold
Classic Serifenschrift, feine Linien classic
Minimal viel Weißraum, ruhige Flächen nordic-light, nordic-night, alpine-sage
Dashboard Management-orientierte KPI-Flächen executive-blue, executive-charcoal, executive-burgundy
Sidebar markante Seitenleiste ocean-breeze, forest-lodge, sunset-coral
Editorial magazinartige Serifengestaltung editorial-ivory, editorial-ink, editorial-rose
Magazine große Typografie, asymmetrische Module magazine-cobalt, magazine-citrus, magazine-plum
Ledger dicht, tabellarisch, zahlenorientiert ledger-green, ledger-blue, ledger-sepia
Split geteilte Titel- und Inhaltsflächen split-teal, split-violet, split-terracotta
Poster plakativ, sehr große Kennzahlen poster-red, poster-yellow, poster-mono

Den vollständigen visuellen Katalog findest du nach dem Entpacken unter output/theme-catalog/theme-gallery.pdf. Neu erzeugen kannst du ihn mit:

python scripts/render-theme-gallery.py

Produktionshinweise

  • API-Key niemals in Workflows exportieren oder im Repository speichern.
  • report_version, prompt_version und template_version je Report sichern.
  • Vor dem Versand immer Payload- und PDF-Pruefungen ausfuehren.
  • Wiederholungen ueber einen eindeutigen Schluessel aus customer_id + period verhindern.
  • Externe Bild-URLs vermeiden. Logos als Base64 Data URI uebergeben.

Weitere Hinweise stehen unter docs/.

S
Description
No description provided
Readme 157 KiB
Languages
HTML 76.5%
Jinja 14.7%
Python 5.9%
JavaScript 1.4%
PLpgSQL 0.9%
Other 0.6%