For one freelancer the daily loop is small: send numbered invoices, take payment, log some expenses and hours, and hand the numbers to an accountant. An agent builds that in a weekend, and free self-hosted apps such as Invoice Ninja show it can be done. The gaps are the parts a bookkeeping tool exists for: bank feeds and reconciliation, double-entry reports your accountant accepts, tax lines that are right for your country, and payments with the card fees and disputes handled. The prompt keeps to invoices, time, expenses and Stripe links, and leaves the ledger out.
Before you buildWave's free Starter plan and a self-hosted Invoice Ninja already cover invoicing. Build your own only if you want a smaller tool you fully control.
Build me a freelancer invoicing and expense app to replace FreshBooks. Requirements: - Node.js 22 + TypeScript: Fastify with server-rendered pages (Eta) and a little vanilla JS. `npm start` serves http://localhost:4900; the admin side sits behind one password from .env. - Storage: better-sqlite3 in ./data/books.db: clients (name, email, address, tax ID, currency, payment terms), services, invoices with lines and a tax rate per line, payments, expenses (date, vendor, category, amount, tax, receipt file in ./data/receipts) and time entries (client, project, minutes, hourly rate, billable). - Invoices: sequential numbers like INV-2026-001 with no gaps, statuses draft, sent, viewed, paid and void; a voided invoice keeps its number. Create one from billable time and unbilled expenses in two clicks. PDF with pdfkit, using ./data/logo.png. - Sending: email the PDF through nodemailer SMTP with a public link /i/<token> that shows the invoice and records the first view; a daily node-cron job sends reminders 3 days before the due date and 3 and 10 days after it, and logs each one. - Payments: a Stripe Payment Link per invoice (STRIPE_SECRET_KEY in .env), a webhook that marks the invoice paid, and a manual "mark paid" for bank transfers with a date and a note. - Recurring invoices: monthly or weekly templates that create drafts for me to review; they never send on their own. - Reports: income by month, overdue aging (0-30, 31-60, 61+ days), expenses by category and tax collected per quarter; every table exports to UTF-8 CSV for my accountant. - Single user. No accounts, no telemetry, local-first; Stripe and SMTP are the only outside calls. - Out of scope: bank feeds, a double-entry ledger and reconciliation, payroll, currency conversion, tax filing, a client login portal. - README: backing up the SQLite file and the receipts folder, the Stripe webhook, and a warning that invoice wording and tax lines differ by country, so have an accountant check the template.
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 FreshBooks.
Add a FreshBooks importer to the invoicing app in this folder. Requirements: - A command `books import-freshbooks <folder>` that reads the CSV exports of clients, invoices and expenses from FreshBooks, mapping columns by header name. - Print a summary of new, duplicate and unmappable rows before writing anything; write only with --apply, inside one SQLite transaction. - Keep each imported invoice's original number and status, mark them imported, and never email or remind for them. - List the columns it couldn't map. Update the README with the three FreshBooks export steps.
Add a quarterly summary to the invoicing app in this folder. Requirements: - A report per quarter (calendar or a start month set in .env): invoiced, paid, tax collected by rate, expenses by category and tax paid on them, using payment dates for cash basis and invoice dates for accrual, switchable. - Show the invoices and expenses behind every number in a drill-down list. - Export a CSV and a printable HTML page with the totals on top. - Update the README with a warning that this is a summary, not a tax return.
Add receipt capture to the invoicing app in this folder. Requirements: - An upload page that works from a phone: take a photo or pick a PDF, store it in ./data/receipts, and create a draft expense with the file attached. - If OPENAI_API_KEY (or another OpenAI-compatible endpoint in .env) is set, send the image and ask for vendor, date, total and tax as JSON; fill the draft but mark each field as suggested until I confirm it. - Never send anything when no key is set. Say in the README exactly what is uploaded.
FreshBooks gives a freelancer invoices that look professional, payments that work with cards and bank transfers, reminders that run themselves and reports an accountant accepts, from a company with a phone number. The cost rises with every extra client, which is what pushes some people to look elsewhere.
Estimate · Runs on a laptop for $0, or on a small VPS for about $5 so that clients can open invoices. SMTP at freelancer volume fits free tiers. Stripe's card fees apply either way. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Lite | $23 | $20.70 | 5 billable clients, unlimited invoices, estimates, recurring invoices, expense tracking, late-payment reminders, a client portal, and card, ACH, Apple Pay, Google Pay and buy-now-pay-later payments. |
| Plus | $43 | $38.70 | 50 billable clients; adds proposals, retainers, e-signatures, double-entry accounting reports, bank reconciliation, accountant access, financial reports and expense receipt scanning. |
| Premium | $70 | $63 | Unlimited billable clients; adds custom email templates, automated client emails, bill receipt scanning, project profitability and accounts payable. |
| Select | custom | — | Everything in Premium plus lower card and ACH fees, card storage and charging, FreshBooks branding removal, 2 team members, Advanced Payments, phone support and onboarding. |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Bank connections and automatic transaction import, Double-entry accounting reports, bank reconciliation and accountant access.
About $23 a month on the Lite plan, $276 a year (checked 2026-10-19).
Bank connections and automatic transaction import; Double-entry accounting reports, bank reconciliation and accountant access; Built-in card, ACH, Apple Pay, Google Pay and buy-now-pay-later payments; A client portal, proposals, e-signatures and retainers; Receipt scanning, project profitability, payroll and phone support. If any of those matter to you, keep paying.
Yes: Invoice Ninja (free), InvoiceShelf (open source), Akaunting (free).