Implementierungs-Plan Woehrle Stack
Overview
Komplett-Stack fuer Weinhandel + Weingalerie auf Hetzner: Zettle (Kasse + TSE + Inventar) + Lexware Office XL (Buchhaltung, API) + Open WebUI (KI-Chat-Layer ueber MCPs) + ggf. Ticketsystem fuer Weingalerie-Events. Endkundenpreis 200 EUR/Monat brutto, ~143 EUR Marge.
Zwei Investments mit Compounding-Effekt fuer naechste Kunden:
mcp-zettleneu bauen (Standard-Stack-Layer fuer alle naechsten Retail/Gastro-Kunden mit Zettle)mcp-lexware-officevon read-only auf full-CRUD ausbauen (Standard-Stack-Layer fuer alle KMU mit lexoffice)
Problem Frame
Woehrle ist Weinhaendler mit Weingalerie als Event-Location (Weinproben, gelegentliche Veranstaltungen). Aktueller Zustand: kein digitales Buchhaltungs-Tool, vermutlich Excel/Papier-Kasse, kein TSE-konformes System. KassenSichV § 146a AO macht TSE pflichtig — also ohnehin Zwangsmodernisierung. Plus Wunsch nach KI-Chat-Bedienung als Differenzierung („AI-Workplace fuer Kleinunternehmen”-Storyline).
Gesamtsicht: Ein KMU-Stack-Bundle das wir produktisiert anbieten — fuer Woehrle einmalig hand-gebaut, ab Kunde 2 wiederverwendbar.
Requirements Trace
- R1 TSE-konforme Kasse, KassenSichV ab Tag 1.
- R2 GoBD-konforme Buchhaltung mit DATEV-Export fuer Steuerberater.
- R3 REST-API fuer OWUI-Layer auf beiden Datenquellen (Kasse + Buchhaltung).
- R4 Lagerverwaltung im Kasse-System (Wein-SKUs, Bestand, Mehrwertsteuer-Splits 7%/19%).
- R5 Ticketsystem fuer Weingalerie-Events — Format wird im Discovery festgelegt (Online-Vorverkauf oder Tageskasse).
- R6 KI-Chat-Layer ueber OWUI fuer ~5 konkrete Use-Cases (Tagesumsatz, Bestseller, Lagerstand, Event-Anmeldung, Kundennachricht).
- R7 Hosting komplett auf Hetzner (per Kundenwunsch).
- R8 200 EUR/Monat brutto Endkundenpreis nach Setup-Phase. Externe Kosten ~57 EUR, Marge ~143 EUR.
- R9 Self-Service-Setup fuer alle SaaS-Komponenten (Zettle, Lexware Office) — kein Vertriebs-Funnel.
Scope Boundaries
Nicht-Ziele:
- OWUI-Frontend-Aenderungen — OWUI ist Plattform, MCP-Layer reicht
- Multi-Tenant-Architektur fuer mcp-zettle — kommt erst mit Kunde 2
- Vollstaendige Steuerberater-Anbindung — DATEV-Export reicht erst mal, kein DATEV-Unternehmen-Online-Push
- Migrations-Logik — Greenfield, keine alten Daten zu uebernehmen
- Mobile OWUI-App — Web-UI reicht
- E-Commerce-Webshop — wenn Woehrle online verkaufen will, ist das separates Projekt
- Eigenbau Kassen-UI — Zettle-App auf Tablet reicht
- AWS-Hosting — bewusst Hetzner per Kundenwunsch (Marvin-Default waere av-Subaccount in AWS)
Context & Research
Recherche-Quellen (3 Pass-Reports inline, nicht als separate Run-Files)
Pass 1 — POS-Recherche (TSE + API + Self-Service in DE 2026):
- Zettle gewinnt: 9,90 EUR/Monat Cloud-TSE, Reader direkt online, Product Library + Inventory v3 als Full-POS-REST. Quellen: developer.zettle.com, zettle.com/de/kassensystem.
- Stripe Terminal raus (keine TSE-DE), SumUp raus (Payment-API ohne Inventory-Endpoints), Tillhub raus (Sales-Funnel).
Pass 4 — POS-Markt-Recheck 2026-05-21 (Best-Practices-Researcher-Run zu Zettle-Alternativen):
- Verdikt: Zettle bleibt richtige Wahl. Einziger ernsthafter Challenger ist KORONA.pos (Combase, Dresden — stark, aber kein Self-Service-Signup + Hardware-TSE statt Cloud-TSE).
- ready2order raus wegen Preis (51-56 EUR/Monat vs Zettles 9,90 EUR ohne Mehrwert).
- Shopify POS, orderbird, enfore, Lightspeed, Vectron: alle aus Use-Case-Gruenden raus.
- Drei neue Stoerfaktoren bei Zettle identifiziert (jetzt im Risk-Register + Unit 1.1 + Unit 1.3): 99-Varianten-Limit pro Produkt, Soft-Rate-Limit ohne planbare Backoff-Strategie, PayPal-Single-Vendor-Risiko.
Pass 2 + 3 — Buchhaltungs-API:
- Lexware Office XL (32,90 EUR netto, OAuth2, Sandbox, Webhooks, PayPal-Native, sehr gute Doku unter developer.lexware.io).
- DevEx-Ranking: Pennylane > Lexware > BuchhaltungsButler > Papierkram > WISO. Pennylane DE-Markt 2026 zu jung (kein DATEV-Kanzlei-Pfad).
- collmex (15 EUR mit API) raus wegen UI-Endkunden-Tauglichkeit.
Relevante Patterns + Codebases
- MCP-Eigenbau-Pattern: SKILL — FastMCP v2, stdio + HTTP,
.env.local, OpenAPI-Generation, Best-Practices in mcp-best-practices - Bestehender mcp-lexware-office (Read-only, 8 Tools): mcp-lexware-office — Basis fuer v2-Ausbau
- mcp-papierkram als Vorlage fuer ~70-Tools-Pattern: mcp-papierkram — Strukturierung von CRUD-MCPs
- Hetzner Project-pro-Kunde: projects — Mandanten-Trennung-Pattern
- MCP-Hosting Fargate-Tunnel-Pattern: mcp-hosting-fargate-tunnel — fuer den Fall dass MCPs ueber Hetzner+CF-Tunnel gehostet werden
- mcp-vf-hosted als Mono-MCP-Pattern: mcp-vf-hosted — analoge Architektur fuer einen Woehrle-Custom-Connector
- Festpreis-Pattern fuer Mittelstand-Sales: festpreis-phase1-notausgang — Setup + Monatlich + 4-Wochen-Notausgang
Institutionelle Learnings (relevant)
- „Nicht alles selber bauen”-Regel (nicht-alles-selber-bauen) — Zettle + Lexware sind SaaS, wir bauen NUR die OWUI-Schicht zwischen Tools, nicht eigene Backends.
- „Workshop statt Formular”-Regel — Discovery-Call statt PDF-Hausaufgabe an Woehrle.
- „Keine Email-Einladungen ohne OK”-Regel — alle Kalender-Events erstellen mit
sendUpdates=none, dann Marvin-Freigabe.
Key Technical Decisions
| Entscheidung | Begruendung |
|---|---|
| Zettle ueber Stripe Terminal / SumUp | Self-Service-Anmeldung Pflicht (Marvin-Wunsch), TSE nativ, Inventory-API als Voll-API (nicht nur Payment), Hardware-Reader online bestellbar. |
| Lexware Office XL ueber Papierkram/sevDesk | PayPal-Native-Anbindung — Zettle laeuft via PayPal-Konto rein, kein Zettle→FiBu-Bridge-Aufwand. Plus: bestehender mcp-lexware-office als Read-only-Basis. Plus: DE-Steuerberater-Akzeptanz beste. Plus: OAuth2 + Sandbox sauberer als Papierkram. Trade-off: 15 EUR/Monat teurer als Papierkram — bei 143 EUR Marge irrelevant. |
| Hetzner ueber AWS | Per Kundenwunsch. Marvins Default ist av-Subaccount in AWS Org o-p197skdqva, aber Woehrle hat Hetzner-Wunsch geaeussert. Geht — intern/capabilities/hetzner/projects.md-Pattern. Trade-off: kein Bedrock-EU fuer LLM-Aufrufe direkt aus Hetzner — entweder OWUI-LLM-Calls ueber Bedrock-Proxy in AWS-av-prod-Account oder direkt Claude/OpenAI-API (Compliance pruefen). |
| OWUI als KI-Chat-Layer ueber MCPs (nicht Eigenbau-UI) | OWUI ist das Frontend-Tool (Multi-User-Chat) das wir Kunden anbieten — fuer Woehrle keine Custom-UI bauen. Custom Connector analog mcp-vf-hosted-Pattern. |
| Phase-1-Notausgang verbindlich (~20% Setup-Pauschal) | Pattern aus festpreis-phase1-notausgang. Nach 4 Wochen: OWUI-Demo gegen Zettle-Test-Account + Lexware-Sandbox lauffaehig. Wenn Woehrle nicht ueberzeugt: Phase-1-Pauschal, kein weiterer Aufwand. |
| Ticketsystem: hi.events Multi-Tenant Self-Host als Default-Pfad | hi.events ist Open-Source-Eventbrite-Alternative (AGPL-3.0), Docker-Compose-Setup mit ~2/5 Komplexitaet, native Stripe Connect, QR-Check-in, Multi-Organizer von Tag 1. Wird auf separatem Hetzner-Project av-events gehostet (NICHT in av-woehrle) und ab Kunde 2 mit Event-Bedarf null-Aufwand-Onboarding. Fallback Cal.com bei AGPL-Lizenz-Blocker, Mini-Pfad Zettle-Artikel bei reiner Tageskasse. |
| mcp-zettle + mcp-lexware-office v2 + mcp-hi-events in Scope | Drei Standard-Stack-Layer die ueber Woehrle hinaus wiederverwendbar sind. Aufwand verteilen ueber Kunden 1-3, nicht als Woehrle-spezifischer Sunk-Cost positionieren. |
| AGPL-3.0-Lizenz-Check vor hi.events-Commit | AGPL Network-Use-Clause kann SaaS-Vermietung an Kunden problematisch machen — eigene Modifikationen muessten ggf. veroeffentlicht werden. Vor Phase 2 mit hi.events-Devs klaeren (kommerzielle Lizenz-Option erfragen oder bestaetigen dass Self-Host-fuer-Kunden ohne Modifikationen unproblematisch ist). Phase-1-Blocker fuer Pfad A. |
Open Questions
Resolved During Planning
- POS-System: Zettle (Pass 2 + 3 der Recherche festgelegt).
- Buchhaltung: Lexware Office XL (Pass 3 der Recherche festgelegt).
- API-Quality fuer MCP-Bau: Lexware Office XL ist „good enough” + bestehender MCP-Basis vorhanden.
- Self-Service-Anforderung: beide Komponenten erfuellen (Zettle Reader im Shop, Lexware Online-Trial).
Deferred to Implementation
- Wein-SKU-Anzahl — Discovery-Frage. Bei >500 SKUs ggf. Zettle-Inventory limitiert, dann Bestand-Sub-Layer im OWUI-MCP noetig.
- Jahrgangs-Modellierung — Discovery-Frage. Empfehlung jeder Jahrgang = eigene SKU (umgeht 99-Varianten-Limit bei Zettle, einfacherer Bestand pro Jahrgang). Wenn Woehrle aus UI-Gruenden Varianten will: bei Jahrgangs-Anzahl <90 OK, sonst architektonisch unsicher.
- Event-Format Weingalerie — Discovery-Frage. Entscheidet Ticketsystem-Auswahl.
- Steuerberater-Akzeptanz Lexware — Discovery-Frage. Bei Konflikt: alternativer DATEV-Workflow nach Phase 1.
- OWUI-LLM-Routing — Phase-2-Detail: Bedrock-Proxy ueber AWS-av-prod oder direkter Anthropic-API-Call von Hetzner? DSGVO-relevant, im OWUI-Repo zu entscheiden.
- MCP-Hosting — Phase-2-Detail: laufen
mcp-zettle+mcp-lexware-officeals stdio in OWUI-Container ODER als HTTP-MCPs ueber CF-Tunnel? Stdio reicht fuer Single-Tenant, HTTP brauchts bei Multi-Tenant. Woehrle = Single-Tenant → stdio reicht zunaechst.
Implementation Units
Phase 1 — Technik-MVP (4 Wochen, Notausgang-Punkt)
Phase-Ziel: Lauffaehiger OWUI-Demo gegen Test-Daten. Woehrle entscheidet nach 4 Wochen (durch Alex moderiert) ob Phase 2 startet oder Notausgang.
Arbeitsteilung: Kundenseite (Discovery, Vertrieb, Festpreis-Verhandlung, Champion-Identifikation) liegt bei Alex. Marvin ist auf Technik-Track. Discovery-Outputs (Wein-SKUs, Event-Format, Steuerberater, Hardware) bekommen wir via Alex.
- Unit 1.1: Discovery-Workshop mit Woehrle — verantwortet durch Alex, technische Outputs an Marvin via internem Briefing
Goal: Vier Discovery-Fragen klaeren, Festpreis-Setup-Angebot bestaetigen, Champion-Onboarding-Pattern etablieren.
Requirements: R1, R2, R4, R5, R6, R7 (alle).
Dependencies: Kalender-Slot mit Woehrle-GF vereinbart, Workshop-Leitfaden vorbereitet.
Files (Vault, intern):
- Erstellen:
intern/kunden/woehrle.md(falls noch nicht vorhanden — Frontmatter Schema Kunde) - Erstellen:
intern/projekte/woehrle-stack/discovery-workshop-leitfaden.md - Erstellen:
intern/projekte/woehrle-stack/discovery-protokoll-YYYY-MM-DD.md(nach Workshop)
Approach:
- Workshop, nicht Formular (workshop-statt-formular)
- 90 Minuten vor Ort oder per Video
- Fuenf Pflicht-Fragen: Wein-SKU-Anzahl, Jahrgangs-Modellierung (jeder Jahrgang = eigene SKU vs. Variante — wir empfehlen eigene SKU wegen Zettle-99-Varianten-Limit pro Produkt, siehe Risk-Register), Hardware-Bestand (Tablet/iPad/Bondrucker), Event-Format (VVK oder Tageskasse), Steuerberater + Datev-Workflow
- Festpreis-Setup-Angebot direkt im Workshop kommunizieren (Pattern: festpreis-phase1-notausgang)
- Champion bei Woehrle benennen lassen (1 Person die 2 Tage Schulung bekommt + monatliches 30-Min-Review)
Test scenarios:
- Happy path: alle 4 Pflicht-Fragen beantwortet, Festpreis-Angebot grundsaetzlich akzeptiert, Champion benannt.
- Edge case: Woehrle zoegert bei Festpreis → Phase-1-Notausgang explizit erklaeren, sonst Verlust-Aversion-Bias hilft.
- Edge case: Steuerberater bindet Woehrle an anderes FiBu-System → Notausgang, Stack-Entscheidung neu prufen (worst case: Papierkram statt Lexware).
Verification:
- Discovery-Protokoll im Vault, 4 Fragen schriftlich beantwortet
- Festpreis-Angebot per Mail an Woehrle gegangen (Skill
email-schreibennutzen) - Champion-Name + Kontakt in
intern/menschen/<champion-slug>.md
- Unit 1.2: Zettle-Test-Account + Hardware-Bestellung (Pre-Live-Demo)
Goal: Eigener Zettle-Test-Account live, Demo-Reader im Buero verfuegbar fuer Pre-Sales-Demo gegenueber Woehrle.
Requirements: R1, R4, R9.
Dependencies: PayPal-Business-Account vorhanden (hello@marvinkuehlmann.com), Reader-Hardware-Budget (~99 EUR einmalig).
Files:
- Erstellen:
intern/capabilities/mcps/zettle.md(Setup-Doku-Stub mit „configured”-Status, wird in Unit 1.3 zu „active” befoerdert) - Update: _index — Zettle-Zeile in „configured”-Tabelle
Approach:
- Zettle-Account anlegen ueber
zettle.com/de(Self-Service-Signup) - TSE-Aktivierung im Onboarding-Flow erledigen (laut Recherche im Lizenzpreis inklusive)
- Reader Solo bestellen (online-Shop)
- 5 Test-Wein-SKUs anlegen (Spaetburgunder, Riesling, Pinot Noir, Sekt, Whiskey — mit MwSt-Splits 7%/19% pruefen)
- 3-5 Test-Transaktionen durchfuehren um Inventar + Sales-API durchzuspielen
Test scenarios:
- Happy path: Account aktiv, Reader funktioniert mit Tablet/iPad-App, TSE liefert Signaturen pro Transaktion, Belege haben Pflichtfelder (Seriennummer, Signaturzaehler, Transaktions-Endzeit).
- Edge case: MwSt 7% (Wein) vs 19% (Whiskey) — beide Splits in einem Beleg pruefen.
- Edge case: Bestand auf 0 → naechster Verkauf darf nicht crashen, sondern Warnung in Inventory-API.
Verification:
- Zettle-Dashboard zeigt 5 Test-SKUs + 3 Test-Verkaufe
- API-Test via curl gegen
https://oauth.zettle.com(Auth) +https://inventory.izettle.com(Inventory) erfolgreich - TSE-Signaturen auf Test-Belegen sichtbar
- Unit 1.3:
mcp-zettleEigenbau v0.1 (Read-Layer)
Goal: Funktionierender lokaler MCP-Server der Zettle Product Library + Inventory v3 abfragen kann. Read-Only zuerst, write kommt in Phase 2.
Requirements: R3, R4, R6.
Dependencies: Zettle-Test-Account aus Unit 1.2, mcp-eigenbau-Skill gelesen, FastMCP v2 verfuegbar.
Files (Repo-relative zu ~/source/):
- Erstellen:
~/source/mcp-zettle/Repo - Erstellen:
mcp-zettle/.env.local.example(PAYPAL_API_KEY, ZETTLE_USERNAME, ZETTLE_PASSWORD-Hashes) - Erstellen:
mcp-zettle/src/server.py(FastMCP-Server-Entrypoint) - Erstellen:
mcp-zettle/src/zettle_client.py(OAuth2 + REST-Wrapper) - Erstellen:
mcp-zettle/src/tools/products.py(list_products, get_product) - Erstellen:
mcp-zettle/src/tools/inventory.py(get_inventory_balance, list_inventory_locations) - Erstellen:
mcp-zettle/src/tools/sales.py(list_sales, get_sale, get_daily_summary) - Erstellen:
mcp-zettle/tests/test_zettle_client.py - Erstellen:
mcp-zettle/README.md(Setup + Tools-Liste) - Update: _index — neuer Eintrag
- Update: _index — Zettle-Status von „configured” auf „active”
Approach:
- FastMCP v2 Pattern aus SKILL
- stdio-Transport zuerst (Single-Tenant Woehrle), HTTP-Transport vorbereiten aber nicht aktivieren
- OAuth2-Auth-Layer fuer Zettle (Access-Token-Caching via
.cache/zettle-token.json) - 6 Tools in Phase-1:
list_products,get_product,get_inventory_balance,list_sales,get_daily_summary,get_bestseller_last_7_days - Logging mit strukturierten Log-Lines (key=value, kein freier Text)
- Best-Practices aus mcp-best-practices anwenden (Docstrings, Error-Hints, Raw-Tools-Gating)
- Response-Caching ist Pflicht, nicht Optimierung — Zettle hat soft rate limits (rollierender Durchschnitt, keine festen Kontingente), Backoff alleine reicht nicht. TTL-Strategie:
get_daily_summaryundget_bestseller_last_7_days5 Min Cache,list_products1 Std Cache,get_inventory_balance1 Min Cache. Cache-Backend zunaechst in-memory pro MCP-Process, ab Multi-Tenant auf Redis. Quelle: Zettle Inventory v3 — How inventories work - 99-Varianten-Limit pro Produkt beachten — wenn Champion Jahrgaenge als Varianten anlegt knallt es bei >99. MCP-Tool
list_productsmuss bei Variant-Count > 90 eine Warnung in den Response-Metadata-Block schreiben. Quelle: Zettle Product Library Management
Patterns to follow:
~/source/mcp-papierkram/als Struktur-Templatemcp-best-practices.mdAudit-Checkliste
Test scenarios:
- Happy path:
list_productsliefert die 5 Test-SKUs aus Zettle.get_daily_summarymit Datum=heute liefert die 3 Test-Verkaufe summiert.get_bestseller_last_7_daysliefert die meist-verkaufte SKU. - Edge case: Bestand auf 0 →
get_inventory_balanceliefert{"stock": 0}sauber, kein Crash. - Error path: Falscher API-Key → 401 mit klarer Error-Hint („Token invalid, check
.env.localZETTLE_API_KEY”). - Error path: Rate-Limit getroffen → Retry mit Backoff, max 3 Versuche, dann sauberer Error.
- Integration: MCP-Tool in OWUI-Test-Session aufrufen, Antwort kommt im Chat als strukturierte Daten an.
Verification:
- 6 Tools listet sich in MCP-Inspector
- OWUI-Test-Session ruft
get_daily_summaryund bekommt sinnvolle Antwort - Tests gruen (pytest)
- README erklaert Setup in <5 Min fuer fremden Entwickler
- Unit 1.4:
mcp-lexware-office v2Write-Erweiterung (CRUD)
Goal: Bestehender Read-only-MCP (8 Tools) erhaelt Write-Faehigkeit fuer Belege, Kontakte, Zahlungen — damit OWUI Belege erstellen und Buchungssaetze fuer Zettle-Tagesabschluesse ablegen kann.
Requirements: R2, R3, R6.
Dependencies: Lexware-Sandbox-Account, OAuth2-App-Credentials in developer.lexware.io registriert, bestehender mcp-lexware-office-Repo.
Files (Repo-relative zu ~/source/):
- Modify:
mcp-lexware-office/src/server.py(neue Write-Tools registrieren) - Erstellen:
mcp-lexware-office/src/tools/invoices.py(create_invoice, update_invoice, delete_invoice_draft) - Erstellen:
mcp-lexware-office/src/tools/contacts.py(create_contact, update_contact) - Erstellen:
mcp-lexware-office/src/tools/payments.py(create_voucher, attach_receipt_to_voucher) - Modify:
mcp-lexware-office/tests/test_write_paths.py(neu) - Update: README mit neuer Tools-Liste
- Update: mcp-lexware-office — Status read-only → full-CRUD
- Update: lexware — Tools-Anzahl ~8 → ~20
Approach:
- OAuth2-Refresh-Token-Flow sauber (kein API-Key wie in Read-only-v1)
- Idempotency-Keys bei
create_invoiceeinbauen (UUID4) — kein Duplikat bei Retry - Sandbox-Mode-Flag via Env-Var, damit Tests gegen Sandbox laufen, produktion gegen prod
- Schema-Validation via Pydantic vor API-Call (keine Server-500-Loops)
- DATEV-Export-Tool als Pflicht:
export_datev_csv(period_start, period_end)→ DATEV-konforme CSV
Patterns to follow:
- mcp-papierkram CRUD-Tool-Struktur (saubere Trennung Read/Write)
- mcp-best-practices.md Error-Handling-Sektion
Test scenarios:
- Happy path:
create_invoicemit minimalem Body liefert Lexware-ID zurueck, Sandbox zeigt Rechnung im UI. - Happy path:
create_vouchermit Anhang-Datei (PDF) bindet Beleg an Buchungssatz. - Edge case:
create_invoicemit nicht-existentem Kontakt → klarer Error-Hint, kein Server-Crash. - Edge case: Idempotency —
create_invoicezweimal mit gleichem Key → zweiter Call gibt erste-ID zurueck, kein Duplikat. - Error path: OAuth-Token abgelaufen → automatisches Refresh, dann Retry.
- Error path: Lexware-Rate-Limit (5 req/s) → Exponential-Backoff, max 3 Versuche.
- Integration:
export_datev_csvfuer Testperiode → CSV ist DATEV-Format-konform (Spaltenzahl, Encoding ISO-8859-15).
Verification:
- ~20 Tools listet sich in MCP-Inspector
- End-to-End-Test: Tag-Abschluss von Zettle (via mcp-zettle.get_daily_summary) → Buchungssatz in Lexware (via mcp-lexware-office.create_voucher)
- DATEV-Export laed sich in Steuerberater-Tool ohne Format-Fehler
- Unit 1.5: OWUI-MVP-Demo gegen Test-Daten
Goal: OWUI-Custom-Connector laeuft lokal, ruft mcp-zettle + mcp-lexware-office ueber MCP-Layer, beantwortet 5 Pre-Sales-Fragen.
Requirements: R3, R6.
Dependencies: Unit 1.3 + 1.4 fertig, OWUI-Repo (~/source/apps/open-webui-vf/ (Pattern-Vorlage)) lauffaehig, Anthropic-API-Key in .env.local.
Files (Repo-relative zu ~/source/apps/open-webui-vf/ (Pattern-Vorlage)):
- Modify:
open-webui/config/mcp-servers.yaml(Eintraege fuer mcp-zettle + mcp-lexware-office stdio) - Modify:
open-webui/prompts/system.md(Stack-Context fuer Wein-Vertical: „Du bedienst einen Weinhandel mit Galerie”) - Erstellen:
open-webui/demos/woehrle-mvp/(Demo-Szenario mit 5 Beispiel-Fragen)
Approach:
- Stdio-MCP-Hosting innerhalb OWUI-Container (kein HTTP-Tunnel noetig fuer Single-Tenant)
- 5 Demo-Fragen festlegen, gegen Zettle-Test-Account + Lexware-Sandbox getestet:
- „Was war gestern unser Tagesumsatz?” → mcp-zettle.get_daily_summary
- „Welcher Wein verkauft sich am besten?” → mcp-zettle.get_bestseller_last_7_days
- „Wie viel Riesling haben wir noch auf Lager?” → mcp-zettle.get_inventory_balance
- „Erstelle Rechnung fuer Eventbuchung X EUR an Kunde Y” → mcp-lexware-office.create_invoice
- „Wie viel Umsatz im April mit MwSt 7%?” → mcp-zettle.list_sales + Aggregation
- Performance-Ziel: <3s Antwortzeit pro Frage
Patterns to follow:
- mcp-vf-hosted als Vorbild fuer Custom-Connector-Architektur (auch wenn Woehrle nicht im claude.ai-Connector laeuft)
- Best-Practices OWUI-System-Prompt (existieren im OWUI-Repo)
Test scenarios:
- Happy path: alle 5 Fragen liefern sinnvolle Antwort in <3s.
- Edge case: Frage mit Bezug auf SKU die nicht existiert → klarer „nicht gefunden”-Hinweis, kein Halluzinieren.
- Edge case: Beleg-Erstellung schlaegt fehl wegen Lexware-Sandbox-Limit → OWUI gibt Fehler-Hint zurueck statt zu halluzinieren dass es geklappt hat.
- Integration: Demo-Walkthrough Skript laufen lassen (5 Fragen sequentiell) → kein Crash, alle Antworten plausibel.
Verification:
- Demo-Video aufgenommen (Screencap, 2-3 Min) das Marvin Woehrle in Phase-1-Praesentation zeigen kann
- 5 Fragen end-to-end gruen
- OWUI-Logs zeigen MCP-Tool-Calls + Response-Times
Phase 2 — Live-Stack bei Woehrle (Wochen 5-10)
Phase-Ziel: Echter Stack live im Wein-Laden, Woehrle nutzt Zettle als Kasse, Lexware als FiBu, OWUI fuer 5 Use-Cases.
Notausgang-Check vor Phase 2-Start: Woehrle muss schriftlich Phase 1 akzeptieren. Wenn nein: Phase-1-Pauschal beenden.
- Unit 2.1: Hetzner-Project
av-woehrle+ Infrastruktur
Goal: Dediziertes Hetzner-Projekt mit CX22-Server, Cloudflare-Tunnel, Object-Storage-Backup.
Requirements: R7.
Dependencies: Hetzner-Account, Cloudflare-Account (Domain agenticventures.de aktiv).
Files (Vault):
- Erstellen:
intern/capabilities/hetzner/av-woehrle.md(Pattern aus projects) - Update: projects — neuer Project-Eintrag
Approach:
- Hetzner-Cloud-API via
mcp-hetznernutzen, NICHT UI-Klickerei - CX22 in
nbg1(Nuremberg, EU) - Ubuntu 24.04 LTS, Docker-Compose-Stack
- Cloudflare-Tunnel
mcp-woehrle.agenticventures.de(subdomain auf av-Domain) fuer OWUI-MCP-Hub - Object-Storage-Bucket
av-woehrle-backupsfuer DSGVO-konforme Backup-Aufbewahrung - Firewall: nur 22 (SSH von Marvin), 80/443 (CF-Tunnel-Egress)
Patterns to follow:
- projects av-tools-Pattern
- mcp-hosting-fargate-tunnel (analoge Tunnel-Architektur, aber auf Hetzner statt Fargate)
Test scenarios:
- Happy path: Server pingbar, CF-Tunnel-Endpoint erreichbar, Backup laeuft naechtlich auf Object-Storage.
- Edge case: Server-Reboot → Tunnel kommt selbststaendig zurueck (systemd-Service).
- Error path: API-Key falsch → klarer Error im Setup-Script, kein Halb-Setup.
Verification:
mcp-woehrle.agenticventures.deantwortet mit 200 auf/healthz- Backup-Bucket zeigt letzte 7 Tage
- Vault-Eintrag aktualisiert
- Unit 2.2: Zettle Live-Account + Hardware bei Woehrle
Goal: Woehrles Zettle-Account aktiv, Reader im Laden, Bestand und Personal eingerichtet.
Requirements: R1, R4, R9.
Dependencies: Unit 1.1 Discovery abgeschlossen (Wein-SKU-Anzahl bekannt), Hardware bestellt oder vorhanden.
Files:
- Update:
intern/projekte/woehrle-stack/_index.md— Status auf „delivery” - Erstellen:
intern/projekte/woehrle-stack/woehrle-zettle-config.md(Inventar-Setup-Doku)
Approach:
- Zettle-Account fuer Woehrle (Champion-User-Anlage)
- Wein-SKUs migrieren — Bulk-Upload CSV mit Marvin und Champion 2h Workshop
- TSE-Aktivierung + ELSTER-Meldung mit Champion durchgehen
- 2 Tage Champion-Schulung (Festpreis-Pattern-Pflicht)
Test scenarios:
- Happy path: Champion kann alleine Verkauf abwickeln, Beleg drucken, Bestand pruefen.
- Edge case: Wein-SKU mit MwSt 7% UND Whisky mit 19% in einem Beleg → korrekt aufgeteilt.
- Edge case: Reader-Bluetooth-Verbindung verloren → App zeigt klaren Hint zum Reconnect.
Verification:
- Champion abnahme: 5 echte Verkaufe ohne Marvin-Support
- ELSTER-Meldung bestaetigt
- Token-Konfig in Hetzner-
av-woehrle-Env-Vars
- Unit 2.3: Lexware Office XL Live-Account + Anbindungs-Setup
Goal: Woehrles Lexware-Account aktiv, PayPal-Konto verknuepft, DATEV-Export an Steuerberater getestet.
Requirements: R2.
Dependencies: Unit 1.1 Discovery, Steuerberater bekannt + DATEV-Workflow geklaert.
Files:
- Erstellen:
intern/projekte/woehrle-stack/woehrle-lexware-config.md(Tarif, Kontenrahmen, Steuerberater-Workflow)
Approach:
- Lexware Office XL-Tarif buchen (~39 EUR/Monat brutto)
- PayPal-Konto verknuepfen (Lexware PayPal-Doku)
- Kontenrahmen SKR03 oder SKR04 mit Steuerberater abstimmen (Workshop-Frage)
- DATEV-Export-Test mit Steuerberater (Probe-Datei)
- OAuth2-App fuer OWUI registrieren (developer.lexware.io)
Test scenarios:
- Happy path: PayPal-Konto sync, Zettle-Tagesabschlusse landen automatisch als Buchungssatz in Lexware.
- Edge case: Steuerberater meldet DATEV-Import-Fehler → Format pruefen, fix.
- Error path: OAuth2-Refresh-Token expired → Auto-Refresh, kein Manuell-Eingriff.
Verification:
- Erster Monat live: Lexware enthaelt alle Zettle-Transaktionen ohne manuellen Abgleich
- DATEV-Export erfolgreich an Steuerberater
- OWUI-OAuth2-Flow getestet (mcp-lexware-office v2 schreibt Test-Beleg)
- Unit 2.4: Ticketsystem-Entscheidung implementieren — hi.events Self-Host als Default
Goal: Multi-Tenant Event-Ticketing-Plattform auf Hetzner aufgesetzt — wiederverwendbar fuer alle kuenftigen Kunden mit Event-Bedarf (Weinhandel, Restaurants, Galerien, Friseure-mit-Workshops, Yogastudios). Erster Tenant ist Woehrle, Architektur ist Multi-Organizer von Tag 1.
Requirements: R5.
Dependencies: AGPL-Lizenz-Check ergibt SaaS-Anbieten ist OK (Action-Item, vor Phase 2 klaeren), Hetzner-Project av-events separat von av-woehrle (weil Multi-Tenant — gehoert nicht ins Kunden-Projekt sondern in unsere Plattform-Schicht).
Files (Vault + Repos):
- Erstellen:
intern/capabilities/apps/hi-events-av.md(Plattform-Doku analogopen-webui-vf.md-Pattern) - Erstellen:
intern/capabilities/hetzner/av-events.md(separates Hetzner-Project fuer die Plattform) - Erstellen:
~/source/mcp-hi-events/Repo (FastMCP v2, analog mcp-zettle-Pattern) - Erstellen:
intern/projekte/woehrle-stack/woehrle-hi-events-tenant-config.md(Woehrle-spezifische Organizer-Config + Event-Templates) - Update: _index — neuer Eintrag mcp-hi-events
- Update: _index — neuer Eintrag mcp-hi-events
- Update: produkt-bundle — Event-Ticketing als Plattform-Capability ergaenzen
Approach (Pfad A Default — hi.events Self-Host):
- Multi-Tenant-Plattform NICHT in
av-woehrlesondern eigenes Hetzner-Projectav-events(Pattern: einmal aufgesetzt, alle Kunden bekommen Organizer-Account drin) - Docker-Compose-Setup aus
HiEventsDev/hi.events(docker/all-in-one/) - Hetzner CX22 in
nbg1mit Cloudflare-Tunnel-Subdomaintickets.agenticventures.de - Pro Kunde eigene Subdomain via Wildcard-CF-Tunnel (z.B.
woehrle.tickets.agenticventures.deoderevents-woehrle.agenticventures.de) - Stripe Connect — Woehrle hat eigenen Stripe-Account, Payouts gehen direkt an Woehrle (kein Treuhand-Risiko bei uns)
- Branding pro Organizer via hi.events-eigene Theming-Faehigkeit
mcp-hi-eventsneu bauen (FastMCP v2, REST-API von hi.events wrappen, ~2 TW) — Tools:list_events,get_event,list_tickets_sold,get_event_revenue,create_event_draft,list_attendees,cancel_order- OWUI-Use-Case: Woehrle fragt „wieviele Tickets fuer Riesling-Abend?” → mcp-hi-events
- Belegfluss zu Lexware via Stripe-Verbindung (PayPal-Native bei Lexware funktioniert auch fuer Stripe-Konto)
Approach Pfad B (Fallback) — Cal.com + Stripe:
- Falls AGPL-Check ergibt dass Multi-Tenant-SaaS-Hosting problematisch ist
- Aufwand 1 TW, kein neuer MCP noetig (bestehender
mcp-calcomreicht) - Cal.com-Event-Types mit Capacity + Stripe-Payment
- Schwaechere Branding-Story, kein QR-Check-in
Approach Pfad C (Mini) — Zettle-Artikel:
- Falls Woehrle im Discovery sagt „nur Tageskasse, kein Online-VVK”
- 0 TW, keine zusaetzliche Infrastruktur
- Eventtickets als Zettle-SKU mit Kategorie „Event”
Patterns to follow:
- open-webui-vf als Vorlage fuer Multi-Tenant-Plattform-Doku
- SKILL fuer mcp-hi-events
- mcp-best-practices
Test scenarios:
- Happy path: Test-Organizer „Demo-Weingalerie” angelegt, Test-Event mit 12 Plaetzen, 49 EUR/Ticket, 5 Test-Tickets verkauft, QR-Codes generiert, Check-in mit Mobile-App funktioniert.
- Happy path: OWUI-Frage „wieviele Tickets fuer Event X?” → mcp-hi-events.get_event liefert korrekte Zahl.
- Edge case: Event ausverkauft (12/12) → 13. Kauf blockiert mit klarer User-Fehlermeldung.
- Edge case: Storno-Anfrage →
cancel_ordertriggert Stripe-Refund, Beleg-Reversal in Lexware. - Edge case: 2 Organizer in einer Instanz → Daten-Isolation gewaehrleistet (Woehrle sieht nicht Kunde-2-Events).
- Error path: hi.events-Container down → OWUI gibt klare Fehler-Hint, kein Halluzinieren.
- Error path: Stripe-Webhook verloren → Reconciliation-Job nach 24h prueft offene Bookings.
- Integration: end-to-end Ticket-Verkauf (Landing-Page → Stripe-Checkout → hi.events-Order → Email-Bestaetigung mit QR → Check-in vor Ort).
Verification:
- hi.events-Instanz erreichbar unter
tickets.agenticventures.de - Mindestens 1 Demo-Event + 5 verkaufte Test-Tickets in Test-Organizer
- mcp-hi-events listet sich in MCP-Inspector mit ~7 Tools
- Plattform-Doku
hi-events-av.mdenthaelt Onboarding-Schritte fuer neue Organizer (in <30 Min auf neuem Kunden ausrollbar)
- Unit 2.5: OWUI-Produktion bei Woehrle (5 Use-Cases live)
Goal: OWUI-Instanz produktiv, Woehrle nutzt 5 Use-Cases im Alltag.
Requirements: R6.
Dependencies: Units 2.1-2.4 abgeschlossen, Champion eingeschult.
Files:
- Modify:
open-webui/config/customers/woehrle.yaml(Customer-Config im OWUI-Repo) - Erstellen:
intern/projekte/woehrle-stack/voit-handbuch-woehrle.md(Champion-Doku, 5 Use-Cases)
Approach:
- OWUI-Container auf Hetzner-CX22 (av-woehrle) lauft mit MCP-Stack
- 5 produktive Use-Cases (siehe Unit 1.5 Demo-Fragen) — angepasst auf Woehrle-Daten
- Champion-Onboarding 2 Tage vor Ort
- Monatliches 30-Min-Review etablieren (Pattern Festpreis-Notausgang)
Test scenarios:
- Happy path Live: Champion stellt jede der 5 Fragen, korrekte Antwort in <3s.
- Edge case: Multi-User-Zugriff (Champion + Marvin) → keine Race-Conditions.
- Error path: Lexware oder Zettle-API down → OWUI gibt klare Fehler-Hint, kein Halluzinieren.
- Integration: Tagesumsatz-Use-Case end-to-end (Zettle → mcp-zettle → OWUI → Champion-Chat) klappt 5x in Folge.
Verification:
- 1 Woche Live-Betrieb ohne Eingriff Marvin
- Champion-Review nach 2 Wochen: 5 Use-Cases werden taeglich genutzt
- Monitoring: kein API-Error >0.5% Rate
Phase 3 — Operations + Handover (Wochen 11-12)
Phase-Ziel: SLA-fertig, Handover an Woehrle, 6-Monate-Garantie-Pflicht etabliert.
- Unit 3.1: DSGVO + AVV-Vertrag
Goal: Auftragsverarbeitungs-Vertrag mit Woehrle unterschrieben, DSGVO-Doku komplett.
Requirements: R7 (compliance).
Files:
- Erstellen:
extern/outbound/woehrle/avv-2026-XX.pdf(analog avv-musterxx-Pattern) - Erstellen:
intern/projekte/woehrle-stack/dsgvo-checkliste.md
Approach:
- AVV-Mustertext aus Vault-Vorlage anpassen
- Daten-Kategorien dokumentieren (Kunden-Stammdaten, Verkaufs-Daten, Beleg-PDFs)
- Sub-Processors: PayPal/Zettle, Lexware GmbH, Hetzner Online GmbH, Anthropic (LLM)
- 10-Jahre-Aufbewahrungs-Konzept (GoBD-Pflicht) auf Object-Storage Bucket-Lock
Verification:
- AVV unterschrieben (beide Seiten)
- DSGVO-Checkliste komplett
- TOM (technische und organisatorische Massnahmen) Beilage geliefert
- Unit 3.2: Champion-Handover + SLA
Goal: Woehrles Champion arbeitet autonom, monatliches Review etabliert, SLA dokumentiert.
Files:
- Erstellen:
extern/outbound/woehrle/sla-2026-XX.pdf - Erstellen:
intern/projekte/woehrle-stack/monatliches-review-template.md - Update: active-work — Woehrle-Status auf „live”
Approach:
- 2 Tage Champion-Schulung (Pattern-Pflicht)
- SLA-Doku: 4h Geschaeftszeit-Reaktion, 24h ausserhalb, 8h/Monat Anpassungen inkl.
- 6-Monate-Garantie schriftlich
- Monatliches 30-Min-Review-Termin als wiederkehrender Kalender-Event (mit Woehrle-Bestaetigung, siehe Email-Einladungs-Regel)
Verification:
- Champion-Schulungs-Protokoll
- Erster monatlicher Review-Termin im Kalender
- Woehrle-Eintrag in active-work auf „live + recurring”
- Unit 3.3: Pattern-Destillat + Standard-Stack-Layer
Goal: Erfahrungen aus Woehrle-Projekt als wiederverwendbares Pattern festhalten, mcp-zettle und mcp-lexware-office v2 als Standard-Stack-Layer dokumentieren.
Files:
- Erstellen:
intern/wissen/patterns/weinhandel-stack-pattern.md(oder allgemeinerkmu-zettle-lexware-stack-pattern.md) - Update: _index — mcp-zettle eingehakt
- Update: produkt-bundle — neuer Tier „KMU-Retail-Bundle” mit Zettle + Lexware + OWUI
Approach:
ce:compound-Skill nutzen — destillieren was wiederverwendbar ist- 3-5 Lessons-Learned als Bullet-Points
- Festpreis-Setup-Spannweite dokumentieren (was war 11k EUR vs. 16k EUR Setup-Treiber?)
Verification:
- Pattern-Doc existiert, ist im Vault verlinkt
- Naechster Kunde mit aehnlichem Profil bekommt das Bundle als Setup-Vorlage
System-Wide Impact
- MCPs neu/erweitert:
mcp-zettle(neu),mcp-lexware-office v2(write-Erweiterung),mcp-hi-events(neu — Pfad A) — alle drei werden Standard-Stack-Layer - Hetzner-Projects-Inventar: zwei neue Eintraege in projects —
av-woehrle(Kunden-Stack) plusav-events(Multi-Tenant-Event-Plattform, kunden-uebergreifend) - OWUI-Repo-Aenderungen: neue Customer-Config + System-Prompt-Anpassung fuer Wein-Vertical, MCP-Stack-Konfig
- Plattform-Layer waechst: hi.events als neue „App-as-a-Service”-Capability analog zu
open-webui-vf— ab Kunde 2 mit Event-Bedarf null-Aufwand-Onboarding (Organizer-Account in <30 Min) - Vault-Doku: neuer Projekt-Eintrag in
intern/projekte/, neue Capability-Dokuintern/capabilities/apps/hi-events-av.md, neuer Kunden-Eintrag inintern/kunden/, Pattern-Doc nach Live-Gang - Active-Work-Liste: Eintrag in active-work beim Discovery-Start und beim Live-Gang aktualisieren
- Produkt-Bundle erweitert: Event-Ticketing als optionale Capability im KMU-Retail-Bundle (produkt-bundle)
- Unchanged invariants: Marvins AWS-First-Hosting-Default bleibt fuer andere Kunden gueltig — Woehrle ist explizite Hetzner-Ausnahme per Kundenwunsch.
Risks & Dependencies
| Risk | Wahrscheinlichkeit | Impact | Mitigation |
|---|---|---|---|
| Steuerberater lehnt Lexware ab | mittel | hoch | Discovery-Frage adressiert, Notausgang nach Phase 1 — Alternative Papierkram-Stack |
| Wein-SKUs >500 sprengen Zettle-Inventory | niedrig | mittel | im Discovery klaeren, ggf. SKU-Konsolidierung empfehlen oder mcp-zettle-Cache-Layer |
| ELSTER-Meldung wird verzoegert / Finanzamt-Rueckfragen | mittel | niedrig | Discovery: Champion macht Meldung mit Marvin gemeinsam, Standardprozess |
| Zettle-API-Aenderungen oder Rate-Limits | niedrig | mittel | mcp-zettle mit Versions-Pinning + Retry-Logic, Monitoring auf Rate-Limit-Hits |
| Zettle Soft-Rate-Limit (rollierender Schnitt, keine festen Kontingente) → unvorhersehbare Drosselung im MCP | mittel | mittel | Response-Caching im mcp-zettle als Pflicht (Unit 1.3 Approach), TTLs pro Tool, Cache-Hit-Rate-Monitoring |
| Zettle 99-Varianten-Limit pro Produkt → Champion legt Jahrgaenge als Varianten an, Inventory-Push schlaegt fehl | mittel | mittel | Discovery-Pflicht-Frage zur Jahrgangs-Modellierung (Unit 1.1), Empfehlung jeder Jahrgang = eigene SKU, MCP-Warnung bei Variant-Count >90 |
| PayPal-Single-Vendor-Risiko (Praezedenz PayPal Here US-Deprecation 2023) | niedrig | hoch | Daten-Portabilitaet bei Zettle pruefen vor Live-Gang, im Risk-Register fuer Folgekunden vermerken — fuer Woehrle akzeptabel, fuer Industriekunden ggf. KORONA.pos als Alternative |
| Lexware-OAuth2-App-Approval dauert | mittel | mittel | App-Antrag fruehzeitig in Phase 1 stellen, parallel mcp-zettle bauen |
| Hetzner-Region-Ausfall | sehr niedrig | hoch | Object-Storage-Backup in anderem Hetzner-Standort, RTO 4h dokumentiert |
| OWUI-Code aendert sich, Customer-Config bricht | niedrig | mittel | OWUI-Repo-Tag fuer Woehrle-Release pinnen, vor Major-Updates testen |
| Phase-1-Notausgang wird gezogen | niedrig | niedrig | Phase-1-Pauschal deckt Aufwand, mcp-zettle + mcp-lexware-office v2 + mcp-hi-events bleiben als Standard-Stack-Layer im Portfolio (Investment nicht verloren) |
| AGPL-3.0-Lizenz blockiert hi.events-Multi-Tenant-Hosting | mittel | mittel | Lizenz-Check VOR Phase-2-Start in Action-Items. Bei Blocker: Pfad B (Cal.com) ohne Verzoegerung — mcp-calcom ist live |
| hi.events v1.9-beta-Bug in Production | mittel | mittel | Version-Pin auf getesteten Release, Hetzner-Snapshot taeglich, RTO 30 Min — bei Woehrle als erstem Kunden noch im Phase-1-Garantie-Fenster |
| Woehrle-Champion verlaesst Firma | niedrig | hoch | Backup-Champion einrichten, monatliches Review als „Wissens-Transfer” framen |
| DSGVO-Vorfall (Sub-Processor-Bruch) | sehr niedrig | hoch | AVV unterschrieben mit allen Sub-Processors, Incident-Response-Doku im Vault |
Documentation / Operational Notes
- Setup-Pauschale-Spannweite: 11.000-16.000 EUR netto (14-20 Tagewerke). Phase-1-Notausgang: 2.500-3.500 EUR (~20%)
- Monatliche Recurring: 200 EUR brutto, davon Marge ~143 EUR
- Setup-Dauer: 12 Wochen, 3 Phasen (Discovery+MVP, Live-Stack, Operations)
- Champion-Pflicht: 1 Person bei Woehrle mit 2 Tagen Schulung + monatliches 30-Min-Review (Pattern-Pflicht)
- 6-Monate-Garantie: wenn zugesicherte 5 Use-Cases nicht stabil laufen, Fix ohne Mehrkosten
- Monitoring: Uptime-Robot fuer
mcp-woehrle.agenticventures.de, Sentry fuer OWUI-Errors, CloudWatch-Aequivalent (Hetzner-eigenes Metrics) fuer CX22 - Rollback-Plan: falls OWUI-Update bricht: Hetzner-Snapshot-Restore (RTO 30 Min), Zettle + Lexware laufen unabhaengig weiter, kein Daten-Verlust
- Externe Kommunikation: Marvin ist Ansprechpartner, Email an
hello@marvinkuehlmann.com, Telefon-Eskalation moeglich - Vertraulichkeit: Woehrle-Name nicht in extern-gerichteten Texten erwaehnen (Regel 22) — generisch als „Weinhandel-Kunde NRW” referenzieren in Akquise-Material
Sources & References
- Origin: _index
- Recherche-Pass 1 (POS): dieser Plan-Thread (3 best-practices-researcher Agent-Runs)
- Recherche-Pass 2 + 3 (Buchhaltung + DevEx): dieser Plan-Thread
- Festpreis-Pattern: festpreis-phase1-notausgang
- MCP-Eigenbau-Skill: SKILL
- MCP-Best-Practices: mcp-best-practices
- Hetzner-Projects-Pattern: projects
- mcp-lexware-office (Read-only-Basis): mcp-lexware-office
- mcp-papierkram (Struktur-Vorlage): mcp-papierkram
- Externe API-Docs:
- Zettle: developer.zettle.com
- Lexware: developer.lexware.io
- Hetzner Cloud-API: docs.hetzner.cloud
- Cloudflare-Tunnel: developers.cloudflare.com/cloudflare-one/connections/connect-networks
- hi.events: hi.events + GitHub HiEventsDev/hi.events (AGPL-3.0, v1.9.0-beta April 2026, 3.500+ Stars)
- Regulatorisch:
- KassenSichV § 146a AO: BSI-TR-03153
- GoBD: BMF-Schreiben 2019
- DSGVO Art. 28 AVV