feat: Bienenpatenschaft mit Urkunde, Abo, Medaillen und 3D-Konto

Setzt Teilprojekte 1-5 der Spec 2026-10-16 um:
- Urkunden-Engine (lib/certificate): ein Layout fuer PDF, Vorschau und
  3D-Textur, Vorlage classic@1, eingebettete OFL-Schriften, Testmatrix
- Einmal-Patenschaft ueber Traegerprodukte (Kategorie PATENSCHAFT),
  Paket wird im Checkout in Patenschaft (Regelsatz) und Honig aufgeteilt,
  Kontopflicht, rein digitale Bestellungen (FulfillmentMethod DIGITAL)
- Ausstellung nach Zahlung idempotent, Wiederholung im App-Prozess
  (instrumentation + background-jobs), Ablage in CERTIFICATE_DIR
- Verkaufsseite /patenschaft mit Konfigurator und Live-Vorschau,
  Warenkorb mit Schluessel je Position
- Kundenkonto: 3D-Ansicht von Urkunde und Medaille, Downloads, ZIP,
  Uebertragung per befristetem Einmal-Link, Treuestufen bis VIP
- Admin: Angebote, Patenschaften, Druck, Korrektur mit Revisionen,
  Abos, Erntefenster, Deckung, SEPA-Frist, Treuestufen
- Abo ueber Stripe Billing: Lieferung erst nach bezahlten Monaten,
  SEPA-Neukunden-Frist und Rueckbuchungsschutz, Honigreservierung,
  Kuendigungsbutton, Monatsrechnungen, Stripe-Einrichtungsskript

Startangebote werden inaktiv angelegt; Livebetrieb erst nach Freigabe.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-10-16 14:07:30 +02:00
1 parent dcb578f062
commit f227aeb8f9
269 files changed
+28054 -141

No files matched your search

+26
View File
@@ -69,6 +69,28 @@ data:
# src/lib/invoice-storage.ts und 04-uploads-pvc.yaml.
INVOICE_DIR: "/app/invoices"
# Urkunden-PDFs der Bienenpatenschaft (src/lib/sponsorship/storage.ts):
# /app/invoices/urkunden/2026/WH-P-2026-00042/r1.pdf
# Unterordner des Rechnungs-Volumes: ebenso privat (keine oeffentliche Route
# zeigt dorthin), ebenso taeglich gesichert (07-backup-cronjob.yaml sichert
# das ganze Volume), und kein zweites ReadWriteOnce-Volume am App-Pod. Die
# Pfade der Rechnungen beginnen mit dem Jahr, "urkunden" kollidiert nicht.
CERTIFICATE_DIR: "/app/invoices/urkunden"
# Hintergrundaufgaben im App-Prozess (src/lib/background-jobs.ts): Urkunden
# nachholen, Abo-Lieferungen anlegen, Verzug nach Rueckbuchung beenden.
# Laufen im App-Pod, weil nur er das Volume mit CERTIFICATE_DIR einhaengt.
# "off" nur fuer zusaetzliche Instanzen, die keine Aufgaben uebernehmen sollen.
BACKGROUND_JOBS: "on"
# Stripe-Kundenportal fuer "Zahlungsart aendern" im Abo (bpc_..., kein
# Geheimnis). Legt scripts/stripe-setup.ts --apply an und gibt die ID aus.
# Leer lassen ist der Normalfall: dann sucht die App die Konfiguration ueber
# ihre Metadaten (wabenhain=abo-zahlungsart). Gibt es keine, bietet das Konto
# "Zahlungsart aendern" nicht an — die Standardkonfiguration von Stripe wird
# bewusst nie benutzt, weil sie Kuendigung oder Tarifwechsel erlauben koennte.
STRIPE_PORTAL_CONFIGURATION_ID: ""
# Umsatzsteuersatz in GANZEN Prozent, der auf der Rechnung ausgewiesen wird.
# 7 = ermaessigter Satz (Honig als Lebensmittel, Anlage 2 zum UStG)
# 19 = voller Satz
@@ -95,6 +117,10 @@ data:
VAT_RATE_PERCENT_PROPOLIS: "19"
# Weitere Bienenprodukte (Kategorie SONSTIGES, z. B. Salben, Wachstuecher).
VAT_RATE_PERCENT_SONSTIGES: "19"
# Bienenpatenschaft (Urkunde, Namensgebung, Abo-Monatsbeitrag ohne
# Honiganteil): Leistung zum Regelsatz. Vor der Veroeffentlichung mit der
# Steuerberatung bestaetigen (Spec, "Geschaeftliche Konfiguration").
VAT_RATE_PERCENT_PATENSCHAFT: "19"
# Threads fuer das Umrechnen hochgeladener Videos (Admin -> Inhalte ->
# Hero-Video). NICHT ohne Not erhoehen: ffmpeg teilt sich das Speicherlimit