
Existing tools charge monthly fees or store financial data on third-party servers. I wanted a self-hosted solution that does exactly what I need — with support for German tax requirements and international use.
German invoice requirements (§14 UStG, §19 UStG, §14b UStG) as the foundation.
Monorepo with SvelteKit frontend and Fastify API. PostgreSQL with Drizzle ORM.
Server-side PDF generation with pdf-lib. No browser, no Puppeteer.
Explore the key capabilities

Sequential numbering, §14-UStG-compliant fields, live preview, archiving.
Monthly overview, open items, year comparison.


Three stages: payment reminder, first dunning, final dunning. Dedicated PDF templates.
Tracking with tags, payment methods, receipt uploads. CSV export for tax advisors.

Monorepo architecture. TypeScript end-to-end from API to frontend.
Svelte 5 Runes for state management. SvelteKit for routing and SSR.
Fast Node.js server. JWT auth, REST API, file uploads.
Relational database for financial data. Drizzle for type-safe queries.
Server-side PDF creation. Manual positioning, but zero dependencies.
Covers the complete freelancer workflow: clients, invoices, dunning, expenses, exports. Runs self-hosted on your own server or locally on your PC.
Open source on GitHub.
pdf-lib has no HTML rendering — every element needs manual positioning. More work, but full control over every detail.
Drizzle migrations don't run automatically on schema changes. Manual trigger at startup saves debugging.