CASE STUDY — SAAS · 2026

Tally

Self-hosted invoicing for solo freelancers. I built it to replace Hiveage when it stopped fitting — hosted pay pages, real payments, deliverable email, and the unglamorous reliability that separates a tool you trust with billing from one you don't.

Card + ACH
Stripe payments hosted pay pages
SPF/DKIM/DMARC
email that lands Postmark
Nightly
encrypted backups Cloudflare R2
Tally admin invoice view with public-link, PDF and reminder controls plus a record-payment panel
The admin side — hosted pay link, PDF, reminders, and manual payment recording
Tally hosted pay page offering Stripe card or ACH payment and direct-payment instructions
What clients see — pay by card or ACH via Stripe, or follow the direct-payment memo

The problem

I billed clients through Hiveage for years, until it stopped being the right fit. Migrating meant either surrendering to a heavier platform or building the exact tool I wanted. I built it. The catch with invoicing software is that it's all edge cases — the demo is easy, the trust is hard. A missed email or a mangled invoice number isn't a bug, it's a client wondering if they got paid.

The build

Tally is a self-hosted invoicing app on the Next.js 16 stack. Clients pay through hosted pay pages backed by Stripe — both cards and ACH, because freelance invoices aren't always small enough to want card fees on. Transactional email runs through Postmark with proper SPF, DKIM, and DMARC, so payment reminders and receipts actually reach the inbox instead of spam.

Migration was a first-class feature, not an afterthought: Hiveage CSV import that preserves existing invoice numbers, so the ledger stays continuous across the switch. Invoices render to PDF with @react-pdf, there's time tracking with monthly billing rollups, and encrypted nightly backups ship to Cloudflare R2 — because self-hosted means the backups are on me.

Stack decisions

Why self-hosted. It's my billing data. Owning the whole thing — database, backups, email domain — means no third party can deprecate my invoicing out from under me the way Hiveage nearly did.

Why Stripe with ACH. Card fees on a five-figure invoice are real money. ACH gives clients a low-fee path, and Stripe's hosted pay pages mean I never touch card data myself.

Why obsess over email deliverability. An invoice that lands in spam is an invoice that doesn't get paid. SPF/DKIM/DMARC and a real transactional provider are the difference between "I never got that" and "paid, thanks."

Outcomes

Tally runs my freelance billing today. It's deliberately unsexy — the value is entirely in the parts that don't break: the reminder that arrives, the PDF that's correct, the backup that exists. That's the boring plumbing clients actually pay for, and it's a genre of software I like building.

Need the unglamorous parts built right?

Payments, email, backups, migrations — the plumbing that has to work. I build that.

Start a project contact@austinschuetz.com