Brief-Generator gebaut: Wenn der Ausdruck das Produkt ist
Die meisten Web-Apps werden am Bildschirm beurteilt. Ein Brief wird beurteilt, wenn er aus dem Drucker kommt, gefaltet wird und in einen Fensterumschlag rutscht. Steht die Anschrift dann nicht im Fenster, hat der Brief seinen Zweck verfehlt, egal wie schön der Editor aussah.
Genau darum geht es beim Brief-Generator. Du schreibst einen Brief im Browser, er wird nach DIN 5008 gesetzt und so gedruckt, dass die Anschrift im Fenster des Umschlags landet. Falzmarken sind auf der Seite. Längere Briefe laufen sauber über mehrere Seiten, mit Seitenzahlen nach dem Muster „Seite x von y”. Unterschreiben kannst du gezeichnet, in einer Schreibschrift getippt oder mit einem Scan. Dazu kommen Absenderprofile, ein Logo und ein Export in eine Sicherungsdatei, die sich wieder importieren lässt. Das Ganze funktioniert offline und braucht keine Installation.
Der Editor (v1) und die Landingpage mit einem Ratgeber zu DIN 5008 (v1.1) sind am 13. Oktober live gegangen. Die kostenpflichtige Pro-Lizenz (v1.2) kam noch am selben Tag dazu.
Wer sich noch nie gefragt hat, wo auf einer A4-Seite die Anschrift hingehört: Der Ratgeber zum DIN-5008-Brief erklärt die Regeln, nach denen die App setzt.
Getestet wird der Ausdruck, nicht die Seite
Ein typischer Frontend-Test fragt, ob ein Element im DOM existiert. Ob die Anschrift später im Umschlagfenster steht, verrät das nicht. Also druckt die Testsuite.
Jeder Test druckt Briefe in einem echten Firefox und einem echten Chrome als PDF und liest das PDF wieder ein. Drei Prüfungen tragen den Großteil.
Die Wörter im Anschrift- und Kopfbereich werden mit einem Referenz-PDF verglichen und müssen auf ±0,5 mm genau an ihrer erwarteten Position stehen. Die Logo-Box wird aus den gerasterten Pixeln ermittelt, der Test sieht also, was ein Drucker aufs Papier bringen würde, und nicht, was das Markup behauptet. Und die Seitenhilfslinien im Editor, die anzeigen, wo eine neue Seite beginnt, müssen vorhersagen, wo die gedruckten Seitenumbrüche tatsächlich liegen. Eine falsche Hilfslinie ist schlimmer als gar keine, weil man ihr vertraut.
Referenzbrowser ist Firefox. Chrome beachtet die CSS-Eigenschaften orphans und widows, deshalb können die Seitenumbrüche bei mehrseitigen Briefen dort an anderer Stelle liegen als in Firefox. Wenn dir der genaue Umbruch wichtig ist, drucke aus Firefox.
Lizenzen ohne Accounts
Es gibt keine Accounts. Briefe, Unterschriften und Profile bleiben in der IndexedDB des Browsers und erreichen nie den Server. Damit wird die Bezahlversion zu einer kleinen Denksportaufgabe: Wie verkauft man ein Upgrade an jemanden, den man nie identifiziert?
Kostenlos sind bis zu 3 gespeicherte Briefe, 1 Unterschrift und 1 Absenderprofil. Pro kostet einmalig 19 Euro, ohne Abo, und schaltet unbegrenzt viele Briefe, Unterschriften und Profile frei, dazu das Logo.
Der Kauf läuft über einen Stripe Payment Link. Stripe ruft einen Webhook auf, ein kleiner Node-Server signiert einen Lizenzschlüssel mit ECDSA P-256 und verschickt ihn per Mail über Brevo. Die App prüft die Signatur offline mit WebCrypto gegen den öffentlichen Schlüssel, den sie mitbringt. Kein Login, und kein Lizenzserver, den die App fragen müsste. Eine Datenbank gibt es auch nicht. Stripe speichert ohnehin jede Zahlung, also führt Stripe die Bücher.
Kein Framework, kein Build-Schritt
Der Brief-Generator ist eine statische Seite, ausgeliefert von nginx, in Docker auf Dokploy. Der Code besteht aus reinen ES-Modulen. Kein Framework und kein Build-Schritt, und keine einzige Laufzeit-Abhängigkeit. Der Browser lädt die Dateien so, wie sie im Repository liegen.
Die Content Security Policy ist streng: keine Inline-Skripte und keine fremden Origins. Bei einer App, die Unterschriften speichert, heißt das, dass ein Skript von irgendwo anders schlicht nicht ausgeführt wird. Die Statistik läuft über Plausible, selbst gehostet und ohne Cookies.
Was noch fehlt
Deine Daten liegen in einem Browser. Das ist das Datenschutzmodell, und gleichzeitig der Haken. Es gibt keinen Sync, der Umzug auf ein anderes Gerät oder in einen anderen Browser läuft über die Sicherungsdatei.
Ein paar Dinge, die man beim regelmäßigen Briefeschreiben vermisst, sind noch nicht da. Als Nächstes kommen mit v1.5: Versandvermerke wie „Einschreiben”, eine Suche in der Briefliste, eine Bezugszeichenzeile, ein Adressbuch für Empfänger und Schriftarten für den Brieftext.
Der Stack ist auf der Projektseite zum Brief-Generator zusammengefasst. Schneller geht der Test so: einen Brief auf brief-generator.de schreiben, ausdrucken und gegen einen Fensterumschlag halten.