A static Astro app for writing Offerten (quotes) and Rechnungen (invoices) that share one editable document. Two buttons print either as PDF; the Rechnung carries a full Swiss QR-bill payment slip on its own A4 page, positioned per the official QR-bill standard.
Try it at bbo.do/bills. Source on GitHub.
Features
- Offerte and Rechnung share the same client, line items, and text; only the framing (dates, labels) differs
- Line items can nest, so a section heading with unpriced narrative bullets sits in the same table as priced positions, with totals summed recursively
- Swiss QR-bill payment slip via swissqrbill, printed on its own page since the standard requires it flush at the bottom of whatever page it’s on
- YAML import/export: a document, including sender/contact/payment data, is one portable file (intro, items, outro, goodbye)
- Multi-page print preview: overflowing content renders as separate A4 page cards on screen, matching how the browser’s print engine actually paginates it, with page breaks preferring paragraph/table boundaries over cutting mid-content
Stack
Astro, TypeScript, no backend — documents live in localStorage, sender defaults come from env vars so nothing personal is committed to the (public) repo. Deployed via GitHub Actions to GitHub Pages.