For one freelancer an invoicing app is a handful of tables and a good-looking PDF: clients, line items with tax, numbers that never repeat, a status that moves from draft to paid, and an email with the PDF attached. An agent can build that, plus quotes, recurring invoices and an expense log, in a single sitting on SQLite. What it can't hand you is everything that touches other systems: a Pay Now button backed by a gateway, bank feeds, and e-invoicing over PEPPOL, which Invoice Ninja sells only on Enterprise. If you want those without building, its own source is free to self-host.
Before you buildInvoice Ninja Free covers 5 clients with unlimited invoices. If you invoice fewer clients than that, you may not need to pay or build anything.
Build me a personal invoicing app to replace Invoice Ninja. Requirements:
- Node.js 22 + TypeScript: a Fastify server with server-rendered pages (Eta) and a little vanilla JS.
`npm start` serves http://localhost:4900.
- Storage: better-sqlite3 in ./data/invoices.db: clients, products, invoices and quotes with line
items, payments, expenses and settings. Money is integer cents plus a currency code per document.
- Invoices: number format from settings (default INV-{YYYY}-{0001}); a number is never reused, and
voiding keeps it. Due date, per-line tax rate, a discount, notes. Statuses: draft, sent, partially
paid, paid, void.
- Quotes convert to an invoice in one click and keep a link back to the quote.
- PDF: a print-styled HTML template rendered by Playwright (Chromium) to ./data/pdf/<number>.pdf,
with my logo and company details from a settings page, and a preview before anything is sent.
- Email: send the PDF through nodemailer with SMTP_HOST, SMTP_USER and SMTP_PASSWORD in .env; mark an
invoice "sent" only after the SMTP server accepts it.
- Payments are recorded by hand (date, amount, method); balances and statuses follow from them. A
dashboard shows what each client owes and which invoices are overdue.
- Recurring templates (weekly, monthly, yearly) with a daily node-cron job that creates drafts.
- Expenses with a receipt file kept in ./data/receipts/, and CSV export for clients, invoices and
expenses.
- Single user, one password in .env (signed cookie). No accounts, no telemetry, local-first. The only
outbound connection is SMTP.
- Out of scope: online card payments, bank sync, e-invoicing networks, a client portal, country tax
rules (tax rates are numbers I type in).
- README: setup, where the data lives, how to back it up, and a warning to check numbering and tax
fields against local rules before sending real invoices.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Invoice Ninja.
Add an importer to the invoicing app in this folder. Requirements: - Take the path of an Invoice Ninja JSON export. Read the file first, list the record types and fields you found, then map clients, products, invoices with line items, and payments. - Keep the original invoice numbers and dates; set the numbering counter past the highest one. - Run as a dry run by default and print what would be created; write only with --apply. - Skip records that already exist, matched by number or email, and list the skipped ones. - Update the README.
Add card payments to the invoicing app in this folder. Requirements: - Use Stripe Checkout in test mode first; STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET go in .env. - A public /pay/<token> page per invoice with the amount due and a Pay button; tokens are random and unguessable. - A webhook route that verifies the Stripe signature and records the payment on the invoice. - Only /pay and the webhook listen on the public port, nothing from the admin. - Update the README with how to expose that port through a tunnel.
Add reminders to the invoicing app in this folder. Requirements: - A schedule in settings, for example 3 days before the due date, on the day, and 7 and 14 days after. - A daily job sends the matching email with the PDF attached and records each reminder on the invoice. - Never remind a paid or void invoice, and never send the same reminder twice. - A dry-run flag that lists what would go out. - Update the README.
Add a tax summary to the invoicing app in this folder. Requirements: - Pick a date range; show totals per tax rate for invoiced amounts, expenses and payments received. - Export the same data as CSV, one row per invoice line, with the tax rate and the currency. - Group by currency; do not convert between them. - Update the README.
The Free plan already covers five clients, so most paying users are buying the extras around the invoice: reminders that go out on time, reports for the accountant, the API, and a payment link that works. Anyone who bills businesses abroad also pays to avoid owning tax and e-invoicing rules themselves.
Estimate · Runs on your own machine; SMTP at this volume fits a free tier. A $5 VPS only matters if you want the app reachable from your phone. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | Up to 5 clients, unlimited invoices, 11 templates, online payments, recurring invoices, client portal, projects and billable time, expenses. |
| Ninja Pro | $14 | $11.67 | Unlimited clients, custom invoice designs, the Invoice Ninja credit line removed, email through Gmail or custom SMTP, REST API, automatic late-payment reminders, reports, a yourname.invoicing.co address. |
| Enterprise | $18 | $15 | Everything in Pro plus extra users with permissions, bank sync, e-invoicing over PEPPOL with 250 credits, file attachments and document uploads for clients. |
| Premium Business | — | $23.33 | Everything above plus migration help, custom reports built for you, an invoice design service and priority support. |
Free covers up to 5 clients with unlimited invoices and 11 templates.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $14 a month on the Ninja Pro plan, $168 a year (checked 2026-10-14).
A Pay Now button on every invoice, backed by Stripe, PayPal or another gateway; Bank feed sync and automatic matching of incoming payments; E-invoicing over the PEPPOL network and the legal formats some countries now ask for; A client portal where customers can look up their own invoice history; Native phone and desktop apps, and extra users with permissions. If any of those matter to you, keep paying.
Yes: Invoice Ninja self-hosted (free), InvoiceShelf (open source), Dolibarr (open source).