Skip to content

Finance · App Starter

Invoicing Template

Estimates, invoices, payments, and the aging report that chases them — generated into a codebase you own.

Describe how you bill — hourly, fixed, deposits, whatever your clients agreed to — and Dual7 generates this invoicing app around it: six connected tables, a line-item builder, payment tracking, and the report that tells you who owes what. Your numbering scheme, your tax rules, your code.

  • 6 core entities
  • Aging report built in
  • Code you own
  • Vibe + Governed modes

01 · Data model

What's inside: the data model

Billing tools get bought for the invoice screen and abandoned over the data model — the moment a credit note, a partial payment, or a billable expense doesn't fit. These six tables are built for the awkward cases, and they're yours to extend when your billing gets more awkward still.

tablewhat it holds
clientsWho you bill — contact, billing address, payment terms, and every estimate, invoice, and payment rolled up per client.
estimatesQuotes with line items and an accepted-or-declined status — one click converts an accepted estimate into an invoice, nothing re-typed.
invoicesNumbered documents with issue and due dates, status from draft through paid, and totals computed from their line items — never stored askew.
line_itemsThe billable rows — description, quantity, rate, tax treatment — attached to estimates and invoices alike.
paymentsMoney received against invoices — date, method, amount — with partial payments and overpayments modeled, not fudged.
expensesCosts you incur with category, receipt reference, and a billable flag — rebillable ones flow onto the next invoice as line items.

02 · Screens

Signature modules

Invoice builder

01

Compose invoices from line items with per-line tax treatment and automatic totals, then send as a PDF or a payment link. Drafts are editable; issued invoices are immutable with corrections as credit notes — the discipline accountants ask for, built in.

Payment status tracking

02

Every invoice carries a live status — draft, sent, viewed, partial, paid, overdue — driven by payment records, not manual updates. Record a bank transfer or wire up a payment provider; either way the status and the client balance move together.

Aging report

03

Outstanding balances bucketed by 30, 60, and 90-plus days, per client and in total. It's the report that turns 'we should chase some invoices' into a ranked call list, computed live from your own tables.

Expense log

04

Capture expenses with category and receipt as they happen. Billable ones queue against their client and drop onto the next invoice as line items — the ten percent of costs that usually slip through un-rebilled, caught by the schema.

03 · Process

How it works

  1. 1You

    Describe how you bill

    Hourly or fixed, deposits or net-30, one tax or three — tell Dual7 how money moves between you and your clients. The starter shapes itself to your terms.

  2. 2Vibe mode

    Refine it in Vibe mode

    Adjust the invoice layout, add a purchase-order field, change the numbering format — conversational edits that land in real code you can read.

  3. 3Governed mode

    Deploy through the governed pipeline

    Billing data is money data. Ship through approval gates with an audit trail, onto your infrastructure, with every invoice and payment in your own database.

04 · Fit

Who the Invoicing starter is for

Freelancers done with invoice-tool rent

Paying a monthly fee to send four invoices is the wrong direction of cash flow. Generate the app once, run it for the cost of hosting, and keep your client billing history in a database you can query directly.

Small firms with billing quirks no tool supports

A deposit on signing, milestones on delivery, a retainer that tops up — real agreements outgrow invoice-tool templates fast. Here the quirk becomes schema: model the agreement you actually signed instead of approximating it.

Operators consolidating estimate-to-cash

When quotes live in documents, invoices in a billing tool, and payments in a bank export, month-end is archaeology. One schema connects estimate to invoice to payment, so the answer to 'what's outstanding?' is a query, not a reconciliation.

SaaS builders adding billing to a product

Use the starter as the billing core of something bigger — the entities and status flow are the boring, correct plumbing every product with invoices needs, and it's your code to embed rather than an API bill to grow into.

05 · Yours

Customize it, own it

Make it yours

Start by making it yours in Vibe mode: your logo and numbering on the invoice PDF, your tax registration lines, a currency field if you bill across borders, late-fee terms in the footer. Rename entities to your vocabulary — clients to patrons, estimates to proposals — and the screens follow the schema.

Then extend where your billing lives: add a recurring-invoice schedule that drafts invoices monthly, wire a payment provider so the payment link marks invoices paid on webhook, or add an approval step before invoices over a threshold go out. It's a normal full-stack codebase with no runtime dependency on Dual7 — your accountant's weirdest requirement is an afternoon of code, not a feature request.

Why a starter, not a subscription

Invoicing subscriptions charge you monthly forever for what is, at heart, a small database and a PDF generator — and they hold your billing history hostage to the subscription. This starter generates that database and those screens as source code in your repository. Stop paying and nothing happens; your invoices are still yours, still running, still numbered correctly.

The honest trade is that you operate it: backups, hosting, and changes are on your side of the table. Dual7's governed pipeline keeps that safe — approval gates before changes touch production billing, an audit trail for every change, and regeneration when you want to restructure rather than patch.

06 · Industries

Industry versions

Invoicing template — frequently asked questions

What do I get when I start from the invoicing template?

A working billing app generated into code you own: clients, estimates, invoices, line items, payments, and expenses, plus an invoice builder with PDF output, live payment status, an aging report, and a billable-expense flow. It runs on your infrastructure with your data in your database.

Can it take online payments?

The starter models payments natively and ships with manual recording; connecting a payment provider is a standard integration against your own schema — the payment link on the invoice creates the payment record via webhook. Which provider is your choice, and no percentage of your revenue goes to the invoicing layer.

Does it handle taxes and multiple currencies?

Line items carry tax treatment, and invoice totals compute tax per your rules — VAT, GST, sales tax, or none. Multi-currency is an extension: add a currency field and an exchange-rate source in Vibe mode. Your tax logic is code you can show your accountant.

Can I do recurring invoices and retainers?

Recurring schedules are a natural extension — an entity that drafts invoices on a cadence — and the professional-services variant models retainers explicitly. Both are edits to a codebase you own, not plan upgrades.

What about legal billing with trust accounting?

Law-firm billing has its own rules — matters, trust accounts, detailed time capture — and a dedicated legal practice starter owns that ground. Start there if you're a firm; this starter is the general-purpose base.

Can I migrate my existing invoices in?

Yes — the schema is standard relational, so exported CSVs of clients, invoices, and payments map into the corresponding tables. Preserving your historical numbering matters for audits, and because you own the schema, the importer bends to your history rather than the reverse.

Related

Vinoth Kumar R, Full-Stack Software Engineer at Dual7
Published by Vinoth Kumar R, Full-Stack Software Engineer

Dual7 App Starters

Build your Invoicing on your terms

Estimates, invoices, payments, and the aging report that chases them — generated into a codebase you own. Describe your version to start — the output is a project you own.