skrift-app (Konfigurator): - Datei-Produkte (Unterschriftenservice): Mehrfach-Upload (PDF/Word/Excel), komplett preisfrei (keine Preisleiste/Aufpreise/Kostenübersicht/Zahlung) - Extern-/Etsy-Modus (?extern=1&versand&kuvert&beschriftung&menge): vom Betreiber vorkonfiguriert, Kunde füllt nur Empfänger/Text/Rechnungsdaten/Übersicht, keine Preise/Zahlung; Menge greift immer (auch >25 / ohne Empfänger); eigener Danke-Text - Adressmodell: zwei feste Adressen (Rechnung/Lieferung) ohne Namen statt Dropdown; Auto-Vorbefüllung; Lieferadresse nur bei Sammelversand; abweichende Lieferadresse per Default aus; Pflichtfelder erzwungen - Platzhalter-Tabelle immer im Text-Schritt (auch Sammelversand ohne Kuvert) + Excel; Tabellen-Eingabe nur bis 25, „Ab 26"-Hinweis entfernt - Stammdaten: zwei Adressblöcke + Erfolgsmeldung Directus/Backend: - Signatur-Endpunkte /signature-preview + /signature-render (Proxy zum signature-service, Marker + Konto-Offsets), Modul-Reiter „Unterschriften" (aus Auftrag oder manuell), Tabelle über volle Breite - Generierung läuft bei jeder Bestellung; Kuverts immer (Datei-Produkt: nur Kuvert, DIN Lang als Default); source_files am Auftrag - Produktions-Board: „Dateien"-Button (hochgeladene Originale, keine SVGs) - Alt-Mail-Login: Zweit-Mails melden im selben Konto an (skrift-auth) - Team-Mails schlank + konfigurierbar (email_settings.team_email) für Bestellung/Muster/Anfrage; keine Bestellbestätigung bei Datei-Produkten, separate Vorlagen unterschriften_eingang/extern_eingang - Rechnungsadresse wird ins Konto übernommen, wenn dort noch keine steht - Kunden-Policy: directus_files create/read (Upload); Bootstrap: users billing_address/shipping_address/alt_emails, orders.source_files/source=extern, signatures marker/offsets, unterschriftenservice input_mode=datei/pricing_mode=formel Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
58 lines
2.6 KiB
Plaintext
58 lines
2.6 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
|
||
# 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
|
||
# Signatur-Plotter-Service (intern über das npm-Netz). Default passt zum container_name.
|
||
SKRIFT_SIGN_URL=http://skrift-signature-service:8000
|
||
|
||
# ── 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
|