Live/2025/Full stack
Ledgerlight
Invoicing for one-person businesses: seven fields, a PDF, and a paid/unpaid column. No CRM, no dashboard, no monthly seat fee.
Ledgerlight came out of watching a friend run their entire freelance practice through a spreadsheet and a word processor template, then spend the first week of every quarter reconstructing what had actually been paid.
The scope discipline
Every feature request got measured against a single rule: does this help someone send an invoice and find out whether it was paid? Time tracking, expense capture, and project management all failed that test and stayed out. What shipped is an invoice form, a PDF renderer, a payment link, and a table.
Technical notes
- Postgres for invoice records, with an append-only status history rather than a mutable
paidboolean. - Stripe payment links generated per invoice; webhooks drive the status changes.
- PDFs render on the server from the same component tree as the on-screen preview, so the two cannot drift.
Result
Roughly 40 invoices a month go through it now. The support burden is close to zero, which is the main thing I wanted to prove.