25 Commits

Author SHA1 Message Date
s4luorth
a882bf37f5 C4-Kuvert (quer) als Render-Format
All checks were successful
Build & Deploy / deploy (push) Successful in 11s
Neues Umschlag-Format c4 (324x229 mm, Querformat-Beschriftung, maschinenseitig
quer eingelegt) in den Backend-Defaults + ENVELOPE_FORMAT-Map. Absender oben
links, Empfaenger unten rechts (bestehende Kuvert-Logik, proportional).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.26
2026-09-30 11:31:25 +02:00
s4luorth
7930c177ee A6-Greifrand an die lange Seite + A5/DIN-lang (Volltext)
All checks were successful
Build & Deploy / deploy (push) Successful in 15s
A6: Greifrand liegt jetzt IMMER an der langen (148mm) Seite - A6 quer (a6l)
unten (neuer margin_bottom-Mechanismus haelt untere Zeilen frei, 11->10),
A6 hoch (a6p) rechts. Neue Funktion getEffectiveLineLimit() deckelt das
Zeilenlimit zusaetzlich geometrisch; A4/A5 unberuehrt.

A5 (a5p 148x210, a5l 210x148) und DIN lang komplett beschrieben
(dinlang_karte 210x105) als Brief-Fallback-Formate ergaenzt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.25
2026-09-30 10:53:19 +02:00
s4luorth
c73109b8ca FTP: Passwort base64-sicher via SKRIFT_FTP_PASSWORD_B64
All checks were successful
Build & Deploy / deploy (push) Successful in 9s
Passwoerter mit Sonderzeichen ($ # @) werden in .env-Dateien verstuemmelt
(bestaetigt durch falsche pw_len -> 530 Login incorrect). Neue Variable
SKRIFT_FTP_PASSWORD_B64 nimmt den base64-kodierten Wert (env-sicher) und
wird dekodiert; hat Vorrang vor SKRIFT_FTP_PASSWORD.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.23 v1.0.24
2026-09-28 11:33:33 +02:00
s4luorth
2c2282e05a FTP-Diagnose: user + Passwort-Laenge beim Login loggen (kein Leak)
All checks were successful
Build & Deploy / deploy (push) Successful in 11s
Bei "530 Login incorrect" trotz FileZilla-OK zeigt pw_len im Backend-Log,
ob das Passwort im .env die falsche Laenge hat (Quotes/CRLF/Leerzeichen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.22
2026-09-28 10:59:50 +02:00
s4luorth
3bef26b332 FTP: Zugangsdaten robust einlesen (Quotes/CRLF entfernen)
All checks were successful
Build & Deploy / deploy (push) Successful in 12s
Gegen "530 Login incorrect" trotz korrekter Daten (FileZilla ok): host/
user/password werden von versehentlich umschliessenden Anfuehrungszeichen
und CR/LF bereinigt (haeufige .env-/docker-env_file-Fallen unter Windows).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.21
2026-09-28 10:54:07 +02:00
s4luorth
94751c12ff Batch-Buendelung: gezielte Auswahl per ids (FTP-Upload aus dem Board)
All checks were successful
Build & Deploy / deploy (push) Successful in 11s
/api/batch/build akzeptiert jetzt ids:[...] und buendelt genau diese
Uebermittlungen (je Zugang, xlsx + Sammel-PDF + FTP). Der Board-Knopf
"Per FTP hochladen" wirkt damit auf die Auswahl.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.19 v1.0.20
2026-09-28 10:23:58 +02:00
s4luorth
a6eb41f996 Batch: FTP-Cron standardmaessig aus (Standardweg = Uebernahme in Produktion)
All checks were successful
Build & Deploy / deploy (push) Successful in 16s
Der taegliche 03:00-FTP-Buendel-Lauf laeuft nur noch, wenn
SKRIFT_BATCH_FTP_CRON=true gesetzt ist. Ohne Flag kein automatischer
FTP-Upload; Uebermittlungen laufen ueber die Uebernahme ins Board.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.18
2026-09-28 10:15:01 +02:00
s4luorth
a39ae8cffd Batch-Buendelung (Phase 2): xlsx + Sammel-PDF + FTP + Cron
All checks were successful
Build & Deploy / deploy (push) Successful in 25s
Neuer Endpunkt POST /api/batch/build (Token) und Cron (03:00 Europe/Berlin):
buendelt offene batch_submissions JE ZUGANG (api_client) zu einer xlsx
(Schema Firma/Vorname/Nachname/Zeile1-3/PLZ/Stadt/Land) + einer Sammel-
Druck-PDF (alle mitgelieferten Druck-PDFs 1:1) und laedt beide per FTP(S)
in die Wurzel. Dateiname <api_client_id>_<YYYY-MM-DD>(.xlsx/.pdf); manuelle
Laeufe mit Uhrzeit-Suffix (kein Ueberschreiben des Tageslaufs). Text-only-
Datensaetze (ohne PDF) bleiben offen (manuelle Schreibvorlage), nicht im
Buendel. Sa+So gemeinsam am Montag (Sonntag-Lauf uebersprungen).

Neue Pakete: exceljs, basic-ftp. FTP-Config via ENV (SKRIFT_FTP_HOST/PORT/
USER/PASSWORD/SECURE), Passwort nur in ENV.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.17
2026-09-28 09:11:42 +02:00
s4luorth
c7fb778a8d Manueller Druck ohne Brieftext: keine Karte erzeugen (nur Kuvert)
All checks were successful
Build & Deploy / deploy (push) Successful in 10s
Ist kein Brieftext vorhanden, wird das Postkarten-Dokument nicht mehr erzeugt –
analog zum bereits übersprungenen Brief. So entsteht bei „nur Kuverts" wirklich
nur das Kuvert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.16
2026-09-11 21:32:33 +02:00
s4luorth
ee8e60bb0d Postkarte: Absender-/Empfängergröße steuerbar + weniger Abstand nach Absender
All checks were successful
Build & Deploy / deploy (push) Successful in 10s
- Absendergröße folgt der „Absender-Größe" (senderScale), Empfängergröße folgt
  der „Schriftgröße Kuvert" (recipientScale). Empfänger schrumpft weiter automatisch,
  wenn er nicht ins Adressfeld passt (Codierzone bleibt frei).
- Text beginnt nur noch ~2 mm unter dem tatsächlichen Absenderblock (statt fix 18 mm).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.15
2026-09-11 21:10:56 +02:00
s4luorth
812f4784fd Postkarte: Trennstrich als dünne Kugelschreiber-Linie + mehr Abstand nach Absender
All checks were successful
Build & Deploy / deploy (push) Successful in 10s
- Trennstrich jetzt Single-Stroke (stroke-width 0.6, non-scaling, keine Füllung)
  wie die Handschrift statt 1,2-mm-Balken.
- Brieftext beginnt bei y≈18 mm (statt 14) → mehr Luft nach dem Absender.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.14
2026-09-11 21:02:39 +02:00
s4luorth
af08202981 Adresszeilen als Platzhalter [[Zeile1]]..[[Zeile5]] (5-Zeilen-Modus)
All checks were successful
Build & Deploy / deploy (push) Successful in 10s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.13
2026-09-11 20:55:22 +02:00
s4luorth
e56a71dfdd Postkarte: kein falscher „Text zu lang"-Fehler mehr
All checks were successful
Build & Deploy / deploy (push) Successful in 10s
- Überlauf nur noch am Brieftext messen (echte lineCount/lineLimit statt 0/0) –
  behebt die Meldung „1 Zeile zu lang – 0 statt max. 0".
- Empfänger-Adresse wird automatisch verkleinert, wenn sie nicht ins sichere
  Adressfeld passt → Codierzone bleibt immer frei, keine Blockade der Vorschau.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.12
2026-09-11 20:53:41 +02:00
s4luorth
41a3bb46a1 Postkarten-Layout nach Plotter-Maßblatt (A6 Dialogpost)
All checks were successful
Build & Deploy / deploy (push) Successful in 13s
Absender oben links (x2–72/y2–12), Text L-förmig links (x2–72/y14–40 +
x2–81,4/y40–88), Empfänger im sicheren Adressfeld (x86,6–146/y42–88), Trennstrich
bei x84 (1,2 mm). Frankierzone (x74–148/y0–40) und Codierzone (y90–105) bleiben
frei. Zonen an W/H verankert (auch DIN lang). Variabler L-förmiger Textfluss.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.11
2026-09-11 19:52:09 +02:00
s4luorth
3399cece23 Umschlag-Empfänger (mit Absender): Mindestabstand rechts für den Plotter
All checks were successful
Build & Deploy / deploy (push) Successful in 13s
Der Empfänger-Adressblock (Kuvert mit Absender) hielt rechts nur ~8 mm Abstand –
der Plotter braucht mehr Greiffläche. Startpunkt leicht nach links (0.55) und
Textbreite so begrenzt, dass rechts RAND_RECHTS_MM (15 mm) frei bleiben. Dieselbe
Konstante nutzt jetzt auch das Postkarten-Layout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.10
2026-09-11 14:15:45 +02:00
s4luorth
8030d3d0ec Postkarten-Layout: Text links, Absender+Empfänger rechts, Briefmarkenfeld frei
All checks were successful
Build & Deploy / deploy (push) Successful in 13s
Neues render_format-kind 'postkarte'. generatePostcardSVG setzt den Text auf die
linke Kartenhälfte, Absender (klein, oben) und Empfänger (Anschriftzone unten) auf
die rechte Hälfte; oben rechts bleibt das Briefmarkenfeld frei. Ein SVG je Karte
(ein Plotter-Durchlauf), geschrieben als letter_NNN.svg.

- page-layout: kind je Format mitführen + getFormatKind().
- svg-generator: generatePostcardSVG (Body/Absender/Empfänger über Marker
  [[pk_abs]]/[[pk_adr]] getrennt, damit alle Teile scriptalisiert werden).
- order-/preview-/directus-controller: type 'postcard' dispatchen, Marker in der
  Scriptalisierung erhalten, Postkarten-Dokument aus render_format-kind bauen.
- directus-service: kind aus render_formats mitladen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.9
2026-09-11 13:58:06 +02:00
s4luorth
bf3352d82c Nur Kuverts: kein Schriftstueck erzeugen, wenn kein Text hinterlegt ist
All checks were successful
Build & Deploy / deploy (push) Successful in 11s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.8
2026-09-07 07:52:40 +02:00
s4luorth
832204c3d8 Formate: neue render_formats ohne Backend-Neustart aktiv (Miss-Nachladen entklemmt)
All checks were successful
Build & Deploy / deploy (push) Successful in 13s
signaledMisses-Sperre entfernt (blockierte das Nachladen, wenn die Drossel griff),
Nachlade-Drossel 30s -> 5s. Neue Formate greifen so binnen Sekunden.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.7
2026-09-07 07:22:15 +02:00
s4luorth
3dfcdcd3b5 Kuvert-Absender: groesser + prozentuale Groesse (envelope_sender_scale)
All checks were successful
Build & Deploy / deploy (push) Successful in 19s
Absender-Grundgroesse = Empfaenger-Grundschrift (war 0.62x = zu klein), zusaetzlich
ueber envelope_sender_scale (50-200%) einstellbar. Durchgereicht via Generierung + Vorschau.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.6
2026-09-03 11:04:23 +02:00
s4luorth
bffb7a1085 Kuvert: Empfaenger weiter nach rechts (60% statt 52% Breite)
All checks were successful
Build & Deploy / deploy (push) Successful in 20s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.5
2026-09-01 15:43:14 +02:00
s4luorth
13f8394512 Kuvert: Absender oben links, Empfaenger unten rechts sauber positioniert
All checks were successful
Build & Deploy / deploy (push) Successful in 20s
Positionierung ueber Hoehen-/Breiten-Anteile statt ueber den grossen Kuvert-Rand
(marginTop bis ~50% der Hoehe): Absender ~14% oben/6% links, Empfaenger ~65-80%
unten/rechts. Vorher klebten beide im mittleren Band.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.4
2026-09-01 15:30:40 +02:00
s4luorth
42a0d2d8b1 Kuvertbeschriftung: Absender oben links + Empfaenger unten rechts (opt-in)
All checks were successful
Build & Deploy / deploy (push) Successful in 22s
generateEnvelopeSVG rendert bei gesetztem Absender den Absender klein oben links und
den Empfaenger unten rechts (sonst unveraendert). Absender wird ueber die Auftrags-/
Vorschau-Pipeline durchgereicht (metadata.envelopeSender, envelope_sender), fetchOrder
laedt das Feld, Kuvert wird bei Absender frisch gerendert statt 1:1 aus der Vorschau.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.3
2026-09-01 15:01:07 +02:00
s4luorth
25ffb3727b Scriptalizer: nach Zeichenlaenge batchen (32000-Limit)
All checks were successful
Build & Deploy / deploy (push) Successful in 19s
Fixe 18er-Batches sprengen bei langen/mehrseitigen Texten das InputText-Limit der
Scriptalizer-API (32000 Zeichen) -> 'Input length limit 32000 exceeded'. Jetzt werden
Batches nach kumulativer Zeichenlaenge (max 28000, Sicherheitsabstand) gebildet, die
Anzahl 18 bleibt als zusaetzlicher Deckel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.2
2026-08-29 10:00:58 +02:00
s4luorth
d42a09ab81 Signatur-Einbettung: Single-Stroke erzwingen (fill:none), CSS-Klassen/Styles + width/height entfernen, viewBox-basiert skalieren
All checks were successful
Build & Deploy / deploy (push) Successful in 20s
Behebt gefuellte Signaturen bei Illustrator-Exporten (<style>-Klasse .cls-1 ging beim
Path-Extrahieren verloren -> fill:black). Skalierung nun auf die eigene viewBox der
Signatur statt fix auf den 600x160-Zeichen-Canvas; Punkt (<circle>) bleibt erhalten.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.1
2026-08-28 07:36:25 +02:00
Lucas Orth
0ddaab27d0 Import aus Monorepo (frischer Start)
All checks were successful
Build & Deploy / deploy (push) Successful in 10s
v1.0.0
2026-08-24 12:13:50 +02:00