Skip to content

Minvoice

Invoicing for one business: PDF invoices by email, Stripe or PayPal pay links and overdue reminders

Minvoice invoice list with status tabs, client filter, due dates, totals and Draft, Sent, Overdue and Paid labels

Minvoice runs in your own Cloudflare account and keeps the books in a D1 database. Clients see invoices, emails, the pay page and PDFs in English, Spanish, German or French. The admin sits behind a password or Cloudflare Access.

Invoices take multiple line items, per-client payment terms and default rates, and custom or automatic numbering with optional date-based prefixes. A print view stamps them PAID or VOID, and invoice emails carry a generated PDF. Each invoice keeps a timeline of edits, sends, payments and pay-link views, and you can undo a recorded payment. Clients pay from a link carrying a 100-bit token, by card through Stripe Checkout or through PayPal. You record checks and bank transfers by hand. Stripe and PayPal webhooks are the source of truth: the Worker deduplicates them and commits each payment, status change and queued receipt email in one transaction. Opt-in reminders email overdue clients on an editable schedule, by default 1, 7 and 14 days after the due date. Monthly reports can be filtered by client, and invoices and payments export to CSV. The Worker is built on Hono with server-rendered JSX and uses D1, static assets for self-hosted fonts and styles, and a Cron Trigger that sends reminders at 15:00 UTC. Email goes out through Resend or a Cloudflare send_email binding. The admin accepts the ADMIN_PASSWORD secret until you configure Cloudflare Access; from then on the Worker verifies Access JWTs and fails closed. The Worker envelope-encrypts API keys you enter in the app with AES-256-GCM before storing them in D1. The Deploy to Cloudflare button clones the repository to your GitHub account, provisions and migrates D1, and asks only for ADMIN_PASSWORD. A setup wizard runs on your first visit to /admin. Stripe, PayPal and Resend keys can be entered in Settings or set as Wrangler secrets, which take precedence. For a CLI setup, npm create minvoice scaffolds a fresh copy and prints the same steps.

Built for: Freelancers, consultants and single-business owners who want self-hosted invoicing without a monthly subscription

What you can use it for

  • Send invoices to clients with the PDF attached
  • Collect card and PayPal payments through a pay link
  • Remind clients automatically when an invoice is overdue
  • Check monthly totals and export payments to CSV for bookkeeping

Deploy

  • One-click · main path

    Branch main

  • CLI

    Branch main

    Paste the database_id that d1 create prints into wrangler.jsonc before running the remaining commands.

    npm install
    npx wrangler d1 create minvoice
    npx wrangler types
    npm run db:migrate:remote
    npx wrangler secret put ADMIN_PASSWORD
    npm run deploy

Payments and email are optional and can be added after the button deploy. Stripe and PayPal each need their keys and a webhook registered in their own dashboard, and email needs a provider and a From address in Settings.

What it needs to run

  • D1 databasesminvoice
  • Email sendingEMAIL

Also uses

  • PayPal (optional): Takes PayPal payments
  • Resend (optional): Sends invoice, reminder and receipt emails as an alternative to Cloudflare Email SendingSource
  • Stripe (optional): Card payments through Stripe CheckoutSource

Good to know

Putting the admin behind Cloudflare Access needs a custom domain. Invoice PDFs do not support right-to-left or Indic scripts, and CJK text needs your own font files in a fork. The admin UI is English only. The project started in July 2026 and has one maintainer. There are no tagged releases.

Cost on Cloudflare

Likely fits the free plan

Per the README, Workers Free is enough when email goes through Resend, whose free tier covers 3,000 emails a month. D1 on Free includes 5 GB and 5 million rows read per day. Cloudflare Email Sending to clients needs Workers Paid. So do PDFs with extended Latin, Greek or Cyrillic text, which embed Noto fonts and take about 130 ms of CPU, beyond the 10 ms Workers Free allows.

Source

The estimate is based on Cloudflare’s documented limits and the app’s configuration. What you pay depends on your usage and plan.

Where this comes from

An alternative to FreshBooks, Invoice Simple, PayPal Invoicing, Stripe Invoicing, Wave, Zoho Invoice.

Listing history

  • Oct 2, 2026 · Minvoice listed

Similar apps

All Commerce apps
  • minshop demo storefront: All products grid with category links, sort options and sold-out badges

    Small server-rendered store with an admin, Stripe and Lightning checkout, and APIs that let AI agents shop

    Deploy
    One-click
    License
    MIT
    GitHub stars
    164 stars
    Last commit