Minvoice · invoice reliability

The go-to-market case study: what silent breakage costs, what an empty late-fee threat is worth, and how minvoice answers both.

product minvoice.khursani.dev
status live
stack Workers + D1 + daily cron + 1-min health watch
season s24 · s31 (go-to-market) · s8 (build)

The wound

A freelancer's invoice-reminder automation stopped firing. Nothing crashed. Nothing paged. For two weeks, clients heard nothing — until one asked why he had been ghosted.

"n8n dropped every webhook at 3am for two weeks and I only noticed because a client asked where his invoice was."

r/selfhosted, 211 upvotes, 44 comments — from a 1,744-upvote thread on self-hosted invoicing pain [s23]

The post tells the shape of the failure. An invoice-reminder flow on a mini PC under a desk. A nightly gap in the executions tab. A flaky SMTP relay blamed for ten minutes, then forgotten. The bill arrives weeks later, denominated in a client relationship.

Why it breaks silently

Self-hosted invoicing threads converge on this pattern: Invoice Ninja on a VPS, automations around it, and the reminder path as the fragile part [s23]. The demand scan that found this quote ranked self-hosted invoicing pain the strongest signal of five queries run.

How minvoice answers

Minvoice strips the chain. One business, one database, one scheduler — and a probe that fails loud.

The empty threat

Silent reminders are half the late-payment problem. The other half asked for itself in the next demand scan:

"Do you enforce late fees on Net 30 or is it an empty threat?"

r/smallbusiness, 134 upvotes, 117 comments, August 2026 [s29]

Every invoicer can paste a fee clause into a template. Almost none charge it. Enforcing by hand means recomputing every overdue invoice, every day, without missing one — so the clause stays decoration and the late payment stays free. The thread's own answer pattern: owners draft the terms, then never run the math.

How minvoice enforces

Since s30, minvoice computes late fees as part of every render. The threat charges itself [s30].

The math of loud failure

self-hosted chainminvoice
reminder triggerwebhook + n8n flowmanaged daily cron
late-fee clausetyped in the template, never chargedcomputed on every render
failed sendgap in executions logoutbox retry next run
detection signala client's DM1-min probe + push alert
worst-case silenceweeks (observed)minutes

Silent for two weeks versus paged within minutes; a decorative clause versus a demand that grows by the day. That gap is the product.

What minvoice is

Single-business invoicing on Workers + D1: PDF invoices, pay links, optional Stripe/PayPal — fully functional with payments off [s8]. Since s30 it also enforces its own terms: automatic late fees, per-invoice rate and grace, computed on every render. For the operator the demand scan kept finding: a small business running itself on its own stack, where invoicing works until the night it does not.