Directus - Neues Modul „Produktion": Board mit Neu/Warteschlange/Im Druck/ Kuvertierung/Versandfertig/Versendet/Archiv, zentraler Suche, Druck-Popup (Maschine, Template, Maße, Nummernbereich, Direktdruck vs. Warteschlange) und Empfängerliste mit Vorschau von Schriftstück und Kuvert. - Interface-Plugins: Auftragsdateien, Drucken, Testdruck, Empfängersuche. - Mailer-Hook für Auftrags- und Statusmails inkl. Signatur und AGB-Anhang. - Auftrag: Empfängerzeilen inline, Produktionsstatus (inkl. storniert), Versanddatum, Brief-/Kuvert-Indikatoren, Insights-Dashboard. - Absender aller Mails ist Skrift (Projektname + email_settings); die Angebotsanfrage nennt jetzt das angefragte Produkt. Preislogik - Eine gemeinsame Multiplikator-Formel; Normalpreis-Menge je Produkt (products.norm_qty). Alte B2B/B2C-Fallback-Felder entfernt. - Mengenrabatt-Staffel (ab X Stück Y %) in den Preis-Einstellungen. - Preis pro Stück ohne einmalige Kosten (unit_net_total). - Einzelversand rechnet Kuvert und Beschriftung nicht mehr doppelt. - Fehlerhafte Grundpreis-Formel legt die Preisauskunft nicht mehr lahm. - Briefnummern 1-basiert: Dateiname entspricht der Briefnummer. app.skrift.de - Direktlinks für Muster, Unterschriftenservice und Follow-ups; Muster als eigene Seite, Kontaktprodukte direkt im Anfrageformular. - Mehrere Adressen in den Stammdaten plus Adressauswahl im Konfigurator. - Verbotene Zeichen werden bei der Eingabe entfernt und gemeldet. - Zeilenüberlauf als Fehlerkasten vor „Weiter"; Mengenfeld leerbar, Standardmenge 100; Checkout-Checkboxen im Kartenstil. Produktion - skrift-agent: Poll-Modell je Maschine, Maß-Übersteuerung, Nummernfilter und automatischer Übergang in die Kuvertierung. WordPress - Neues Plugin „Skrift Preisrechner": Shortcodes inkl./exkl. MwSt, stündlicher Abgleich der Preisdaten in WordPress und ein sicherer Formel-Interpreter, damit Formeländerungen automatisch greifen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
52 lines
2.2 KiB
Plaintext
52 lines
2.2 KiB
Plaintext
# 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
|
||
|
||
# ── 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
|