The invoicing SaaS I was using to bill my clients raised its credit card processing fee to 6.9% for free accounts (4% on top of Stripe's 2.9% + 30c fee), so I decided to build my own to fit my minimal needs, hence I called it Minvoice.
It runs on Cloudflare Workers + D1 for DB, it should easily be within their free tier for most use cases. The application is built on Hono server-rendered JSX with no client framework for simplicity. Payments are optional and handled through Stripe or Paypal hosted checkout (processing fees set directly by them, the only fees involved). Login is protected with a password set as env variable by default, but I recommend switching to Cloudflare Access with the provided instructions for additional security.
An added benefit of running on your own Cloudflare account is that you own all your data, including your client list and invoices.
Supported features include an invoice pdf generator (via pdf-lib on Worker), webhooks to verify payment completion, optional reminder emails via Worker cron, and CSV export.
What's intentionally not included is: multi-user, multi-tenant, recurring billing, and time tracking.
Along the way of building this, I ran into an issue with env variables being inadvertently set with Cloudflare "1 click deploy" functionality, which bypassed the login, so I documented that here in case it would prevent anyone else from making the same mistake: https://daniel-yang.com/writing/cloudflare-deploy-button-dis...
To try it out, you can use the Cloudflare 1 click deploy button on the repo README or run "npm create minvoice".
If anyone is using self-hosted invoicing tools, are there any specific features that made you either quit or stick with it? Any feedback or suggestions would be greatly appreciated.
Hi HN,
The invoicing SaaS I was using to bill my clients raised its credit card processing fee to 6.9% for free accounts (4% on top of Stripe's 2.9% + 30c fee), so I decided to build my own to fit my minimal needs, hence I called it Minvoice.
It runs on Cloudflare Workers + D1 for DB, it should easily be within their free tier for most use cases. The application is built on Hono server-rendered JSX with no client framework for simplicity. Payments are optional and handled through Stripe or Paypal hosted checkout (processing fees set directly by them, the only fees involved). Login is protected with a password set as env variable by default, but I recommend switching to Cloudflare Access with the provided instructions for additional security.
An added benefit of running on your own Cloudflare account is that you own all your data, including your client list and invoices.
Supported features include an invoice pdf generator (via pdf-lib on Worker), webhooks to verify payment completion, optional reminder emails via Worker cron, and CSV export.
What's intentionally not included is: multi-user, multi-tenant, recurring billing, and time tracking.
Along the way of building this, I ran into an issue with env variables being inadvertently set with Cloudflare "1 click deploy" functionality, which bypassed the login, so I documented that here in case it would prevent anyone else from making the same mistake: https://daniel-yang.com/writing/cloudflare-deploy-button-dis...
To try it out, you can use the Cloudflare 1 click deploy button on the repo README or run "npm create minvoice".
If anyone is using self-hosted invoicing tools, are there any specific features that made you either quit or stick with it? Any feedback or suggestions would be greatly appreciated.