Files
skrift-programme/Docker/directus/docker-compose.yml
Lucas Orth 06c4078290 Produktions-Modul, überarbeitete Preislogik und WordPress-Preisrechner
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>
2026-07-23 13:24:12 +02:00

102 lines
3.2 KiB
YAML
Raw Permalink 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 + Postgres — Daten-/Auth-/Admin-Schicht für Skrift.
#
# Hinter dem Nginx Proxy Manager (kein Host-Port; NPM proxyt intern per container_name).
# Im NPM als Proxy Host anlegen:
# Domain Names : admin.skrift.de (PUBLIC_URL in .env muss dazu passen)
# Scheme : http
# Forward Hostname : skrift-directus
# Forward Port : 8055
# SSL : Let's-Encrypt-Zertifikat aktivieren
#
# Start: cp .env.example .env → Werte setzen → docker compose up -d
services:
database:
image: postgres:16-alpine
container_name: skrift-directus-db
restart: unless-stopped
volumes:
- directus-db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE}
healthcheck:
test: ["CMD", "pg_isready", "-U", "${DB_USER}", "-d", "${DB_DATABASE}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- internal
directus:
image: directus/directus:11
container_name: skrift-directus
restart: unless-stopped
depends_on:
database:
condition: service_healthy
volumes:
- directus-uploads:/directus/uploads
# Bind-Mount: Extensions kommen aus dem Repo-Ordner ./extensions
- ./extensions:/directus/extensions
# Generierte Auftragsdateien read-only einblenden (gleicher Ordner wie
# das Backend beschreibt / SFTP-Ziel) – für Direktzugriff statt Kopie.
- /var/skrift-output:/var/skrift-output:ro
environment:
SECRET: ${DIRECTUS_SECRET}
DB_CLIENT: pg
DB_HOST: database
DB_PORT: 5432
DB_DATABASE: ${DB_DATABASE}
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
# Erster Admin – wird nur beim allerersten Start angelegt
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
PUBLIC_URL: ${PUBLIC_URL}
# CORS für das Frontend (Portal/Konfigurator)
CORS_ENABLED: "true"
CORS_ORIGIN: ${CORS_ORIGIN}
# E-Mail: für passwortlosen Login-Code + Benachrichtigungen (Flows)
EMAIL_FROM: ${EMAIL_FROM}
EMAIL_TRANSPORT: smtp
EMAIL_SMTP_HOST: ${EMAIL_SMTP_HOST}
EMAIL_SMTP_PORT: ${EMAIL_SMTP_PORT}
EMAIL_SMTP_USER: ${EMAIL_SMTP_USER}
EMAIL_SMTP_PASSWORD: ${EMAIL_SMTP_PASSWORD}
EMAIL_SMTP_SECURE: ${EMAIL_SMTP_SECURE}
# Skrift-Backend (SVG-Generierung: Vorschau + finaler Auftrag).
# SKRIFT_BACKEND_TOKEN MUSS dem API_TOKEN des Backends entsprechen,
# sonst antwortet das Backend mit 401.
SKRIFT_BACKEND_URL: ${SKRIFT_BACKEND_URL:-http://skrift-backend:4000}
SKRIFT_BACKEND_TOKEN: ${SKRIFT_BACKEND_TOKEN}
SKRIFT_PREVIEW_LIMIT: ${SKRIFT_PREVIEW_LIMIT:-10}
SKRIFT_TEAM_EMAIL: ${SKRIFT_TEAM_EMAIL:-hello@skrift.de}
# PayPal – server-seitige Zahlungsprüfung (Secret liegt NUR hier, nie im Frontend)
PAYPAL_CLIENT_ID: ${PAYPAL_CLIENT_ID}
PAYPAL_CLIENT_SECRET: ${PAYPAL_CLIENT_SECRET}
PAYPAL_ENV: ${PAYPAL_ENV:-sandbox}
expose:
- "8055"
networks:
- internal
- npm
volumes:
directus-db:
directus-uploads:
networks:
internal:
npm:
name: nginx-proxy-manager_default
external: true