← Zurück zum Portfolio
Fallstudie6 Min. Lesezeit

Wie ich ein SaaS für
EU-Rechnungen gebaut habe.

Ein produktionsreifer Rechnungsgenerator für Freelancer in 7 EU-Ländern. Drei Rechnungstypen, sieben Sprachen, clientseitige PDF-Erzeugung und ein Stripe-basiertes Freemium-Modell. Alleine gebaut und ausgeliefert.

Seite besuchen
7
Länder
3
Rechnungstypen
379
Tests
€12
/Monat
€0
Server-PDF-Kosten
Scrollen zum Entdecken
00Das Problem

EU-Rechnungen sind kaputt.

Freelancer in ganz Europa haben die gleiche Frustration. Jedes Land hat andere MwSt.-Sätze, andere Steuer-ID-Formate, andere rechtliche Anforderungen. Eine slowakische Rechnung braucht IČO, DIČ und IČ DPH. Eine deutsche braucht Steuernummer und USt-IdNr. Eine französische braucht SIRET und RCS. Fehlt ein Feld, ist die Rechnung rechtlich ungültig.

Vorhandene Tools sind entweder US-fokussiert, teuer oder versuchen alles auf einmal. Die meisten Freelancer landen bei Word-Vorlagen und manuellen Berechnungen. Ich habe euinvoice gebaut, um das wirklich zu lösen. Ein kostenloses Tool, das die Komplexität übernimmt, damit der Nutzer es nicht muss.

01Kernlogik · MwSt.-Engine

Sieben Länder. Drei Rechnungstypen.

Das Herzstück von euinvoice ist die MwSt.-Engine. Jedes der sieben unterstützten Länder (Slowakei, Deutschland, Österreich, Niederlande, Polen, Tschechien und Frankreich) hat eigene MwSt.-Sätze, Kleinunternehmer-Schwellenwerte, Rechtstexte, Steuer-ID-Felder und Datumsformate. Ein einziges Konfigurationsobjekt steuert die gesamte App: Formulare, PDF-Ausgabe, Validierung und SEO-Seiten lesen alle aus einer einzigen Quelle.

Die Engine behandelt drei Rechnungstypen automatisch. Standard-MwSt.-Rechnungen wenden den korrekten Ländersatz an. Reverse-Charge-Rechnungen werden automatisch erkannt, wenn Lieferant und Kunde in verschiedenen EU-Ländern sind und der Kunde eine gültige USt-IdNr. hat. Die Steuerschuld geht nach Artikel 196 auf den Käufer über. Steuerbefreite Rechnungen greifen, wenn der Lieferant unter der Kleinunternehmer-Schwelle seines Landes liegt. Alle Berechnungen verwenden Gleitkomma-sichere Arithmetik.

Tech Stack
TypeScriptNext.js7 EU CountriesArticle 196
Länder
SK, DE, AT, NL, PL, CZ, FR
Typen
Standard-MwSt., Reverse Charge, steuerbefreit
Präzision
IEEE 754-sichere Rundung für Finanzberechnungen
7 EU-Länder unterstützt
🇸🇰SK23%
🇩🇪DE19%
🇦🇹AT20%
🇳🇱NL21%
🇵🇱PL23%
🇨🇿CZ21%
🇫🇷FR20%
02Ausgabe · Clientseitige PDF

PDFs werden im Browser erzeugt.

Jede Rechnungs-PDF wird vollständig im Browser mit @react-pdf/renderer erzeugt. Kein Server-Aufruf, keine Warteschlange, keine Infrastrukturkosten. Der Nutzer füllt das Formular aus, klickt auf Download, und die PDF rendert clientseitig in Millisekunden. Daten verlassen nie den Browser.

Die PDF passt sich dem Kontext an. Inländische Rechnungen verwenden die Landessprache für Bezeichnungen: FAKTÚRA für die Slowakei, RECHNUNG für Deutschland, FACTURE für Frankreich. Grenzüberschreitende Rechnungen wechseln automatisch zu Englisch. Rechtshinweise sind länderspezifisch: Die Slowakei zitiert § 69 ods. 12, Deutschland referenziert § 13b UStG. Die auf der PDF angezeigten Steuer-ID-Felder entsprechen den Anforderungen des Lieferantenlandes.

Tech Stack
@react-pdf/rendererReact 18Intl.NumberFormat
Rendering
Clientseitig mit @react-pdf/renderer
Sprachen
Inland = Landessprache, grenzüberschreitend = Englisch
Kosten
Null Server-Infrastruktur für PDF-Erzeugung
Clientseitige PDF-Erzeugung
RECHNUNG
BeschreibungMwSt.Betrag
19%€2.400,00
19%€800,00
7%€150,00
Netto€3.350,00
MwSt. 19%€608,00
MwSt. 7%€10,50
Gesamt€3.968,50
Automatisch erkannte Sprache
Mehrfach-MwSt.-Aufschlüsselung
Länderspezifischer Rechtstext
03Lokalisierung · 7 Sprachen

Nicht nur übersetzt. Grundsätzlich anders.

Internationalisierung bei euinvoice geht weit über String-Übersetzungen hinaus. Die Oberfläche läuft in sieben Sprachen: Englisch, Deutsch, Slowakisch, Polnisch, Tschechisch, Französisch und Niederländisch. Aber jede Sprache bedeutet auch andere Formularfelder, andere Validierungsregeln und andere Geschäftslogik.

Eine polnische Rechnung zeigt NIP als Steuerkennung. Eine niederländische zeigt KVK-nummer. Eine deutsche Rechnung unter der Kleinunternehmerregelung bekommt den entsprechenden Rechtstext, während eine tschechische Osvobození od DPH erhält. Datumsformate unterscheiden sich: TT.MM.JJJJ in Deutschland, TT/MM/JJJJ in Frankreich, TT-MM-JJJJ in den Niederlanden. Die Währung wechselt automatisch. EUR für die meisten Länder, CZK für Tschechien, PLN für Polen.

Tech Stack
7 Languages7 CurrencieshreflangJSON-LD
UI-Sprachen
EN, DE, SK, PL, CS, FR, NL
PDF-Sprachen
7 PDF-Ausgabesprachen mit Auto-Umschaltung
Felder
Länderspezifische Steuer-IDs, Datumsformate, Währungen
7 Sprachen, 7 Regelwerke
ENVAT Number
DEUSt-IdNr.
SKIČ DPH
PLNIP
CSDIČ
FRN° TVA
NLBTW-nr.
04Daten · Supabase + RLS

Row-Level Security. Standardmäßig.

Die Datenbank läuft auf Supabase PostgreSQL mit Row-Level Security auf jeder Tabelle. Nutzer können nur auf ihre eigenen Profile, Rechnungen und Kunden zugreifen. Nicht durch Anwendungslogik, sondern durch Datenbankrichtlinien. Selbst bei API-Missbrauch bleiben die Daten isoliert.

Rechnungen speichern Lieferanten- und Kundendaten als JSONB-Snapshots, entkoppelt vom aktuellen Profil. Wenn ein Nutzer seine Adresse ändert, bleiben bestehende Rechnungen unverändert. Ein atomarer Zähler erfasst die globale Rechnungserstellung für Social Proof auf der Landing Page. Kontolöschung kaskadiert durch alle zugehörigen Daten. Datenexport generiert einen vollständigen JSON-Dump für DSGVO-Portabilität. Magic-Link-Authentifizierung über Resend bedeutet keine Passwörter zum Speichern.

Tech Stack
SupabasePostgreSQLRLSResend
Auth
Magic-Link-Authentifizierung über Resend
Sicherheit
RLS auf jeder Tabelle, DSGVO-konforme Löschung und Export
Features
JSONB-Rechnungs-Snapshots, atomare Zähler
Row-Level Security auf jeder Tabelle
users
email
company
tier
documents
type
snapshot
totals
line_items
desc
rate
amount
contacts
name
tax_id
country
counters
key
value
05Umsatz · Stripe

Freemium, das wirklich funktioniert.

euinvoice nutzt ein dreistufiges Freemium-Modell. Die kostenlose Stufe ermöglicht unbegrenzte Rechnungserstellung ohne Konto. Daten bleiben im Browser. Ein kostenloses Konto fügt Rechnungsverlauf, Lieferanten-Autofill und gespeicherte Rechnungen hinzu. Die Pro-Stufe für 12 €/Monat schaltet ein Kundenverzeichnis, individuelle Rechnungsnummern und Priority-Support frei.

Stripe übernimmt die Zahlungsinfrastruktur. Checkout-Sessions erstellen Abonnements, Webhooks verwalten den Lebenszyklus: Upgrade bei erfolgreicher Zahlung, Downgrade bei Kündigung. Das Kundenportal ermöglicht Abonnement-Verwaltung ohne die App. Webhook-Signaturprüfung stellt sicher, dass jedes Event echt ist.

Tech Stack
StripeWebhooksCustomer PortalFreemium
Stufen
Für immer kostenlos, kostenloses Konto, Pro für 12 €/Monat
Abrechnung
Stripe Checkout, Webhooks, Kundenportal
Pro-Features
Kundenverzeichnis, individuelle Nummern, Priority-Support
Kostenlos → Konto → Pro
Free
€0forever
Unlimited invoices
7 countries
Client-side PDF
Account
€0forever
Invoice history
Supplier auto-fill
Data export
Pro
€12/month
Client directory
Custom numbering
Priority support
06Qualität · 379 Tests

Jeder Grenzfall. Abgedeckt.

Finanzsoftware hat keinen Spielraum für Bugs. Ein Rundungsfehler bei der MwSt.-Berechnung bedeutet eine falsche Rechnung. Eine verpasste Reverse-Charge-Erkennung bedeutet Steuerschuld im falschen Land. Deshalb ist jeder kritische Pfad getestet.

379 Vitest-Tests decken MwSt.-Berechnungen mit Gleitkomma-Grenzfällen ab, Reverse-Charge-Autoerkennung über alle Länderpaare, PDF-Ausgabe-Validierung für alle drei Rechnungstypen, länderspezifische Rechtstexte und Steuer-ID-Sichtbarkeit, Pro-Tier-Feature-Gating und Kundenverzeichnis-Prefill. Die Test-Suite läuft in unter 200 Millisekunden. Sentry trackt Fehler in Produktion. Umami liefert datenschutzfreundliche Analytik ohne Cookies.

Tech Stack
VitestSentryUmamiTypeScript
Framework
Vitest, 379 Tests in unter 200ms
Abdeckung
MwSt.-Mathematik, Reverse Charge, PDF-Ausgabe, Pro-Gating
Monitoring
Sentry Error-Tracking, Umami Analytics
379 Tests bestanden
VAT Math
Floating Point
Reverse Charge
PDF Output
Pro Gating
Integration
0 / 379 passing
Das Fazit

Ein Entwickler.
Produktions-SaaS.

euinvoice.app ist der Beweis, dass eine Person ein konformes Multi-Länder-SaaS-Produkt bauen, monetarisieren und pflegen kann. Jede MwSt.-Regel, jede PDF, jeder Test. Alleine gebaut und ausgeliefert.