Files
skrift-programme/Docker/directus/.env.example
Lucas Orth 6232cecdb1 Produktion: Format-Warteschlangen, Sammeldruck, Webhook, Preis-a/e
Produktions-Board:
- Massenauswahl (+ "Alle auswählen") mit Sammel-Druck und Sammel-Status
- Warteschlange je Maschine nach Format gebündelt; Formatabfrage
  (machines.current_format) statt automatischem Anschluss
- resiliente Ladeabfragen (Board bleibt ohne neue Felder nutzbar)

Agent (skrift-agent):
- druckt strikt ein Dokument nach dem anderen (Idle-Gate) -> behebt
  Verlust von Folgejobs während eines laufenden Drucks
- druckt nur Jobs des eingelegten Formats (current_format), kein Auto-Anschluss
- Heartbeat gedrosselt (nur bei Statuswechsel / alle 60 s)

Neues Modul "Manueller Druck" (skrift-neuauftrag):
- interner Auftrag ohne Zahlung, Vorschau, Platzhalter/Excel-Import,
  Felder bleiben nach dem Absenden stehen

Backend/Endpunkte (skrift-orders):
- jobs tragen format/format_label; /enqueue-bulk für Sammeldruck
- Webhook /inbound/:kind (JetFormBuilder) mit Token + tolerantem Body-Parser
- Kleinmengen-Aufschlag je Produkt über Faktoren a (Deckel) und e (Exponent)
- Fix: norm()-Shadowing in calculatePrice (norm is not a function)

Bootstrap:
- jobs.format/format_label, machines.current_format
- products.price_factor_a/e; Multiplikator-Formel auf a/e umgestellt inkl.
  verhaltensneutraler Migration bestehender Formel/Produkte

skrift-app (Konfigurator):
- Zeilenumbrüche im Textfeld erlaubt; Umschlag-Individualtext als Textfeld
- Platzhalter-Tabelle im Text-Schritt immer verfügbar (auch Sammelversand
  ohne Kuvert) inkl. Excel-Upload nur für Platzhalterwerte
- Danke-Seite: Button zurück zu skrift.de
- z-index-Fix: Platzhalter-Tabelle überlagert die Vorschau nicht mehr

WordPress-Preisrechner: a/e-Faktoren in PHP- und JS-Rechnung
Directus: SKRIFT_WEBHOOK_TOKEN in compose/.env.example

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 11:51:24 +02:00

56 lines
2.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Directus – kopiere zu .env und fülle die Werte aus. .env NICHT committen.
# ── Postgres ────────────────────────────────────────────────
DB_DATABASE=skrift
DB_USER=directus
DB_PASSWORD=CHANGE-ME-strong-db-password
# ── Directus ────────────────────────────────────────────────
# SECRET: langer Zufallswert, z. B. openssl rand -hex 32
DIRECTUS_SECRET=CHANGE-ME-64-hex-random
PUBLIC_URL=https://admin.skrift.de
# Erster Admin (nur beim ersten Start relevant)
ADMIN_EMAIL=admin@skrift.de
ADMIN_PASSWORD=CHANGE-ME-strong-admin-password
# CORS: URL des Frontends (Portal/Konfigurator). Kommagetrennt möglich.
CORS_ORIGIN=https://app.skrift.de
# ── E-Mail (SMTP) — für passwortlosen Login-Code + Benachrichtigungen ──
# WICHTIG: PORT und SECURE müssen zusammenpassen, sonst schlägt die Verbindung
# mit "SSL routines: wrong version number" fehl:
# Port 587 → STARTTLS → EMAIL_SMTP_SECURE=false
# Port 465 → implizites TLS → EMAIL_SMTP_SECURE=true
EMAIL_FROM=noreply@skrift.de
EMAIL_SMTP_HOST=
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=
EMAIL_SMTP_PASSWORD=
EMAIL_SMTP_SECURE=false
# Nur falls der Mailserver ein selbstsigniertes Zertifikat nutzt:
# EMAIL_SMTP_TLS_REJECT_UNAUTHORIZED=false
# ── Skrift-Backend (Vorschau + finaler Auftrag) ─────────────
# Intern über das gemeinsame npm-Netz erreichbar (container_name).
SKRIFT_BACKEND_URL=http://skrift-backend:4000
# MUSS exakt dem API_TOKEN aus Docker/skrift-backend/.env entsprechen,
# sonst antwortet das Backend mit 401 Unauthorized.
SKRIFT_BACKEND_TOKEN=CHANGE-ME-gleich-wie-backend-API_TOKEN
# Vorschauen pro Kennung und Tag
SKRIFT_PREVIEW_LIMIT=10
# Zieladresse für Angebots-/Musteranfragen
SKRIFT_TEAM_EMAIL=hello@skrift.de
# Shared Secret für den WordPress-Webhook (JetFormBuilder → /skrift-orders/inbound/*).
# Frei wählbarer langer Zufallswert; muss identisch als ?token=... in der
# Webhook-URL stehen. Ohne diesen Wert lehnt der Webhook alle Anfragen ab.
SKRIFT_WEBHOOK_TOKEN=CHANGE-ME-langer-zufallswert
# ── PayPal (server-seitige Zahlungsprüfung) ─────────────────
# Client-ID ist öffentlich (auch im Frontend), das Secret bleibt NUR hier.
PAYPAL_CLIENT_ID=
PAYPAL_CLIENT_SECRET=
# sandbox oder live
PAYPAL_ENV=sandbox