Build with AI

How to build an invoice and quote builder with OpenAI Codex

Own your invoicing instead of renting it by the month. Quotes with line items, discounts and tax in any currency, one click from quote to invoice, statuses the database enforces, a branded PDF and reports, all under your own sign-in. Describe it one task at a time in plain language and Codex writes the app, showing you each change before it stays.

September 2026 · 51 min read · Updated September 2026

OpenAI Codex

$ Build an invoicing app: quotes with line items, discounts, a tax rate and a currency, converted to invoices with one click, documents moved through draft, finalized and archived, clients on file, a branded PDF per document and reports. Every row belongs to my account and nobody else can reach it.

  • Ownership rules proven first
  • Editors, PDF and reports written
  • Ready for your review
You describe it, Codex builds it
Start here

What an invoice and quote builder actually is

At its core, this tool does exactly what you need: it manages your client list, calculates totals, turns quotes into invoices, and creates PDFs for your customers. Everything is completely private, linked only to your account, and hidden from the public.

Usually, you have to rent invoicing software. Monthly subscriptions often limit what you can do, charging extra based on how many clients you have, how many invoices you send, or taking a cut of your payments. They might even force their logo onto your documents unless you upgrade. Most other tools restrict you in at least one of these ways.

We keep things simple and all in one place. You can easily add line items, taxes, discounts (fixed or percentage), shipping fees, and choose your currency. Convert a quote to an invoice with a single click. You can easily track the status of any document: Draft, Finalized, or Archived. All your client details, custom fields, and brand colors are saved securely, and you can choose how your final PDF looks from our template gallery.

The biggest difference is how you pay. We don’t charge you per client, per invoice, or for removing our logo. Your only costs are data storage and standard web hosting, which can often be free. Because we don’t process payments or send emails for you, there are no hidden fees: you just download the PDF and get paid however you normally do. We even include a smart feature that helps you easily copy the design of an old invoice on your own AI key.

Perfect math every time

Subtotals, discounts, taxes, and shipping are automatically calculated as you type. Everything is formatted correctly for your chosen currency. Whether you’re looking at your screen or the final PDF, the numbers always match perfectly, saving you from the headaches and errors of manual spreadsheets.

Just your business, nothing else

Your account is entirely yours. Everything you create (clients, invoices, templates) is securely linked only to you. We designed this specifically for freelancers and solo business owners, meaning there are no complicated team roles to manage. You log in and see exactly what you need for your work.

100% private document creation

Your final invoices are created directly on your computer, using your logo, colors, and fonts. Your financial data is never sent to a remote server to be processed. This means your numbers stay completely private and secure, and your documents are generated instantly right in your browser.

What you are building

The parts every invoice builder is built from

These six building blocks give you everything you need to manage your billing effortlessly. Start by creating quotes and invoices with instant calculations, then manage your entire workflow from a single dashboard.

01

Instant calculations for quotes & invoices

Add items with descriptions, quantities, unit prices, and individual discounts. Apply overall document discounts, set tax rates, and add shipping fees: everything recalculates instantly as you type. Quotes include expiration dates and terms, while invoices add due dates, payment methods, and bank details.

02

One-click conversion & revision tracking

Turn any approved quote into an invoice with a single click, keeping all client details, items, and totals connected. Need to make changes? Duplicate a quote to create numbered revisions (like R/1, R/2), while your invoices stay neatly ordered (like INV-1, INV-2).

03

Simple document status & tracking

Keep your workspace clean by marking documents as Draft, Finalized, or Archived. Filter your documents in seconds to find what you need. The system keeps your record-keeping accurate and flexible so you stay in full control of your workflow.

04

Custom branding & print-ready PDFs

Choose from stylish design templates like Professional, Classic, or Ledger. Personalize them with your logo, brand colors, custom fonts, and footers with a live preview as you make changes. Download print-ready PDFs anytime or export your financial reports.

05

Multi-currency support for global clients

Easily select from 30 major currencies for any quote or invoice. All amounts and totals are automatically formatted to match the official standard for that currency, helping you present clean, accurate documents to international clients.

06

Clients, reports & activity log

Store detailed client profiles with contact info, addresses, tax IDs, and private notes. Create custom fields for extra details, view visual dashboards with CSV report exports, and review an activity log to see what was changed and when.

Build vs buy

Own the invoicing or rent it by the month

Most billing services charge you more as your business grows: limiting your clients, taking a cut of your payments, or raising monthly fees. Building your own simple tool gives you full ownership, complete data privacy, and zero recurring fees or hidden limits.

Build your own

Take full control of your invoicing. Enjoy a custom billing tool that belongs entirely to you, running smoothly without expensive software subscriptions. You get clean, professional branding and full freedom without paying third-party fees.

  • No cap on clients, invoices or people who sign in, so the fiftieth client costs what the first one did
  • Your logo on the PDF and nobody else’s, on every design
  • A quote that becomes an invoice without retyping, with revisions numbered from the original
  • Thirty currencies formatted per document, and no conversion you did not ask for
  • Your clients’ names, addresses and amounts in a database you can dump and move
  • Nothing to migrate away from later, because the code and the database are ordinary and yours

Rent traditional software

FreshBooks · Xero · Zoho Invoice · Wave · PandaDoc

Renting gets you up and running immediately with ready-made payment buttons and maintenance handled for you. However, you pay a recurring subscription that grows more expensive as your business scales.

  • Live today, with a Pay now button and a paid status you did not have to build
  • Accounting behind the invoice on the bigger products: expenses, bank feeds, an accountant’s login
  • A monthly price that follows how many clients, invoices or seats you have
  • A free tier that is free because the vendor’s logo is on your PDF, or because it earns on every payment
  • Your design inside the vendor’s templates, and your data inside its export
  • A percentage of every invoice paid through it, on top of the card fee
FreshBooksLite at "$23.00 USD/mo" for "5 Clients", Plus at "$43.00 USD/mo" for "50 Clients", Premium at "$70.00 USD/mo" for "Unlimited" clients, with "Team Members ($11/mo per user)" and a "Yearly Extra 10% Off" toggle

The plainest version of the meter: a price per month, a cap on how many clients you may bill at each tier, and a seat price for anyone else who signs in. A small business with more than five clients lands on Plus, which is the row to read for what renting a mature invoicing product actually costs once it fits. Card payments through it carry their own fee, quoted on the page as 2.9% plus 30 cents.

freshbooks.com · checked September 2026

XeroEarly at "$25 per month" after the promotion with "Send quotes and 20 invoices†", Growing at "$55 per month", Established at "$90 per month", with "No per-user license fees"

The meter here is invoices. The entry plan caps you at twenty a month, counting approving as well as sending, so a business that invoices weekly lands on Growing. What you get for the step up is an accounting system rather than an invoicing tool, which is the honest comparison: Xero is what you rent when you want the ledger too, and this template is what you build when you do not.

xero.com · checked September 2026

Zoho Invoice"$0 for Seamless and Stress-free Invoicing", with "Add up to two users", "Send up to 500 invoices per year" and "Powered by Zoho Invoice" branding

Free, and the meter is the fine print: two users, five hundred invoices a year, and the vendor’s name on every PDF you send. For a freelancer that is a fair trade and this guide says so in the verdict. What the free tier is selling is the paid billing product beside it, and the branding line is how it does that.

zoho.com · checked September 2026

WaveStarter at "$0" with "2.9% + $0.60 per credit card transaction", Pro at "$19 USD/month Billed monthly" or "$190 USD/year Billed annually" to "Remove Wave branding" and "Add logo and brand colors"

Free software that earns on the payment button: every card payment through it carries the fee, and the paid plan is mostly about taking Wave’s name off your invoice and putting your logo on it. Read this row for the shape most free invoicing takes, which is a payment processor with an invoice editor in front of it.

waveapps.com · checked September 2026

PandaDocStarter at "$19 USD" per seat per month billed annually or "$35 USD" monthly, Business at "$49 USD" per seat per month billed annually or "$65 USD" monthly, with quotes from Business only

The quote half of this template, priced by the seat. PandaDoc sells proposals and signatures, and a quote with line items is a Business-tier feature at about fifty dollars a seat on the annual plan. Worth reading if what you actually send is a quote that has to look good, because it is the row where the meter is people rather than documents.

pandadoc.com · checked September 2026

Rule of thumb: if you send a handful of invoices a month and want to be paid by card tonight, rent one, and Wave or Zoho Invoice will do it for nothing but the card fee or their logo on your PDF. If invoicing is part of a product you sell, if your quotes carry revisions and your PDFs carry your brand, or if you bill in several currencies and do not want them converted for you, the software is worth owning, because the caps above are exactly where a growing business pays and your clients’ names and amounts are yours to keep in a database you control. The honest middle case is a business that needs to be paid online. Build this and connect a payment rail, and read the block on choosing how you get paid, because that fee exists whether you rent the software or own it.

No dev needed

Why build with Codex

Skip the accounting suite and the server engineering. Describe the quotes and invoices you send, the clients you bill and the way your PDF should look, and every document is saved under your own sign-in without you writing server code.

Codex closes that gap by working the way a developer would, just faster. The whole workflow becomes a simple loop:

The build loop
1

Describe

Tell Codex what you want, in plain language.

2

Build

It edits the real project files, backend and auth and UI, rather than replying in a chat.

3

Check

Run the app yourself and confirm the change works.

Repeat

Describe the next change.

Loop back to Describe

None of that loop needs a computer-science background, which is why one person can take an idea to a working app over a handful of focused sessions.

Three hard partshandled for you

The data model, authentication, and access rules are the pieces that make software like this genuinely hard to build alone. Describe them and Codex scaffolds all three, leaving mostly screens to build on top.

Any language is the interface

There’s no code to write, and no requirement to describe it in English. Ask for a new field, a renamed step, or an AI summary in whatever language you think in, and Codex implements it.

Local files it edits directly

Codex works on the project on your own disk rather than a copy somewhere else, so what it changes is exactly what you see when you run the app. Point it at the handful of files that matter and it stays fast and focused.

What it costs

Pay a developer, or do it with AI

Running your own invoicing app requires two simple things: data storage and website hosting, both of which start completely free. The real choice comes down to how you build the app itself: hiring a developer by the hour or creating it yourself with an AI coding assistant.

Hire a developer

Custom build, from scratch
Developer
~$11k-$43k
Supabase (backend)
Free tier · $25/mo (Pro plan)*
Hosting
$0 free tier
AI template import
Per upload on your own key
Build time
~215 hrs of their work

~$11k-$43k for the build, then from $25/mo once real invoices go out

Our ~215-hour estimate, costed against the rate survey linked below, whose bands run from a $45-$75/hr global freelance average up through $100-$150+/hr for senior US developers, before the 20-40% an agency adds, which brackets the range at roughly $50/hr and $200/hr. Most of those hours go on arithmetic that has to be right in thirty currencies, a PDF that has to look like your company, and twelve tables that all have to agree about whose document this is.

Build it with Codex

From scratch, with Codex
Codex
~$20/month (Plus) to ~$200/month (Pro)
Backend (Supabase)
Free tier · $25/month (Pro plan)*
Hosting
$0 on a free tier
Your time
~103 hrs

~$20-$200/month while you build, then whichever plan you keep using

Codex itself is free to install. The cost sits in the ChatGPT plan behind it, or in API usage if you sign in with a key instead. Plus, around $20/month, covers a template import or a short build. A from-scratch build that runs for weeks usually needs Pro’s top usage-multiplier tier instead, which lands around $100 to $200 a month. The fee doesn’t shrink when you start from a template the way a per-hour developer bill would: the template changes how many of the hours in the estimator above you actually spend, not which ChatGPT plan you’re paying for.

* On this template the free-tier line to watch is the pause, not storage. The only file is a logo and the rows are small, but a free project is paused after a week without activity, and a business that invoices at month end leaves it idle for three. Pro, from $25/mo, ends the pause and keeps a daily backup for 7 days, which matters more here than anywhere else in the catalogue, because an invoice is a record you may be required to keep.

Prices and rates from supabase.com, developex.com and learn.chatgpt.com, checked September 2026.

Plan first

Decide before you build

Six simple choices to consider before customizing your app. Decide how your business will handle team access, currency exchange, invoice sending, legal locking, payment processing, and AI budget limits.

01

Solo owner or team access?

By default, the app is built for a single user. If you have multiple team members who need separate logins or different access levels, it’s best to plan this from the start. Setting up team access early ensures your privacy and data controls stay clean and organized.

02

Single currency or live conversion?

The app supports 30 major currencies without forcing conversion rates. Decide whether you want to bill everything in one primary currency or attach live exchange rates to international invoices so your tax and financial reports stay perfectly accurate for audits.

03

Direct emailing or manual downloads?

You can simply download print-ready PDFs and email them to clients yourself. If you want the app to send invoices automatically, you can connect an email service to deliver documents directly and track their delivery status inside the app.

04

Editable or locked invoices?

By default, documents can be edited anytime. However, accounting laws in many countries require sent invoices to be locked permanently against edits. Decide if finalizing an invoice should freeze it completely to keep your business fully compliant.

05

Bank transfers or instant payment buttons?

The standard setup displays your bank details on the PDF so clients pay manually with zero extra fees. If you prefer adding a "Pay Now" button, you can connect a payment processor, though keep in mind they will charge a small fee per transaction.

06

AI feature setup & spending limits

The built-in AI tool scans uploaded invoice designs and converts them into editable templates. Select your preferred modern AI provider and set cost controls so you can enjoy smart document conversion while keeping your monthly budget predictable.

Approaches

Comparing your build options

A form that adds up a few lines is an afternoon. The hard part is everything behind it: totals that stay right through discounts, tax and shipping in thirty currencies, a quote that becomes an invoice without retyping, statuses the database will not let you skip, and a PDF that looks like your company rather than a spreadsheet. Here are three ways to build the exact same product.

~215 hrsBuilding by hand

A form that adds up three lines is an afternoon. The weeks go on the parts a client never sees: a percentage discount, a tax rate and shipping that agree to the cent in a currency with no decimals, a quote that becomes an invoice without retyping a line, a status the database refuses to skip, and a PDF that looks like your company on every one of five designs.

~160 hrsGeneric UI starter kit

A kit gives you a form, a table and a settings page. It has never heard of a line item, a tax rate or a finalized document, so the arithmetic, the quote-to-invoice step and the PDF, which are the whole product, start from nothing.

~103 hrsAI-powered development with OpenAI Codex

You hand Codex one task at a time and it edits the real files, the tables, the ownership rules, the editors and the PDF, and shows you the change before it stays. The check that matters: sign in as a second account and confirm the first account’s quotes and invoices never appear.

Interactive calculator

Estimate your exact build timeframe

Uncheck features your business doesn’t need. Whether you drop quotes or skip AI template imports, you still get a fully functional billing app with a faster setup time. Use this figure as a helpful starting estimate.

What your invoice builder needs

Your estimate

103 hrs

start to finish

Based on the 7 of 7 features you’ve selected, plus ~26h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.

A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.

Setting up your workspace

Let’s set up the tools you need

Before step 01, four things go on your computer. It takes about 15 minutes in total, and none of it is coding. Three are ordinary installers, and the fourth is a ChatGPT plan with Codex access switched on. After that, you build by describing what you want in plain language.

1

OpenAI Codex

Cost: Free to install · needs a paid plan to build with

Your main AI assistant. The app itself costs nothing and installs with a single command from OpenAI, then runs in your Terminal. What it costs to use is the next card: every request spends the usage allowance on your ChatGPT plan, and the free plan’s allowance is small enough that a build of this size stops early. Codex is also built into an extension for popular code editors and into the ChatGPT desktop app, which can hand a longer task off to Codex cloud to keep running in an isolated environment while you do something else.

Install Codex CLI
2

ChatGPT plan

Cost: ~$20/month (Plus) or from ~$100/month (Pro)

Codex is technically included on the free ChatGPT plan too, but Free’s usage is the tightest of any tier. OpenAI doesn’t publish Free’s own cap, only that every paid tier gets a larger multiple of it, so treat Free as a way to try Codex rather than to build with it. ChatGPT Plus, around $20/month, is the realistic starting point, and a long, from-scratch build tends to need the top ChatGPT Pro tier, priced by usage multiplier at roughly $100 to $200/month. Codex can also run on pay-as-you-go API billing instead of a ChatGPT plan, if you’d rather pay per token than hold a subscription.

Compare ChatGPT plans
3

Node.js engine

Cost: Free

The engine that runs your app on your own computer. You never have to learn how it works: download the version marked LTS (the most stable one), install it, and forget about it.

Download Node.js (LTS)
4

Supabase (database)

Cost: Free to start

Where your project keeps its data. Install it, then sign in once by running supabase login. Words like migrations and row-level security turn up later in the guide, and Codex writes those parts for you.

Install Supabase CLI

Nothing here is worth memorizing. These four just need to exist on your machine. From step 01 on, you say what you want and Codex runs the commands.

Step by step

Build your invoice builder, one Codex task at a time

You describe a task, Codex writes the files and runs the commands, and you read what changed. Two things shape the order: the ownership rules land before any document exists, and the schema is read before it runs, because twelve tables that all carry an owner are exactly the kind worth reading.

  1. 01

    Write AGENTS.md before anything is scaffolded

    Codex loads AGENTS.md at the start of every task, so the three rules that matter most on this build (every row has an owner, money is never converted, the AI key stays on the server) are loaded before any code exists to break them.

    PromptSet up the project
    Start by writing an AGENTS.md at the project root: the stack is React 18, Vite, TypeScript, Tailwind and the Supabase JS client, and this project is an invoicing and quoting app. Fix the vocabulary (clients, quotes, invoices, line items, templates, tax rates) and record three standing constraints: every row belongs to the signed-in account and the database enforces that rather than the screen, money is stored as numbers in each document’s own currency and never converted, and any AI key lives in a server-side function and never in the browser. You load that file automatically at the start of every later task. Then scaffold the project: a typed Supabase client under src/lib reading VITE_SUPABASE_URL and the publishable key (the sb_publishable_… key that replaced the older anon key) from .env, with .env confirmed present in .gitignore.

    The three constraints are the ones worth writing down. Filtering by user in the component, converting currencies with a made-up rate, and calling the provider from the browser are all reasonable-sounding shortcuts, and each one costs somebody money.

  2. 02

    Narrow permissions, then have Codex add sign-in, the schema and the ownership rules

    This task touches authentication and every table, which is exactly the kind of change worth scoping Codex down for and reading the SQL of before it runs.

    PromptAdd auth, tables and ownership rules
    This task touches authentication, so narrow your permissions to just this one. Wire in Supabase Auth with email and password: sign-up with a full name and a company name, login, logout, a persisted session, a useUser hook and a profiles row per account created by a trigger. Then write the migrations and show me the SQL before running it. Clients with name, email, phone, billing and shipping address, tax ID, account number, contact person and notes. Quotes with a number, a Draft, Finalized or Archived status enforced by a database check and defaulting to Draft, the client’s details, a quote date and a valid-until date, a tax rate, a discount that is a fixed amount or a percentage, shipping, a currency code, notes, terms and a link to the invoice it became. Invoices with the same shape plus a due date, payment terms in days, payment instructions and bank details. A line-items table for each with description, quantity, unit price and a per-line discount. Tax rates, templates (name and settings JSON), settings as key and value JSON, and custom fields scoped to quotes, invoices or both, with a values table for each. Every table carries the owning account, has row-level security on and lets a user reach only their own rows with explicit WITH CHECK clauses, line items included through a function that checks the parent document’s owner. Show me how to verify a second account gets nothing back.

    Reading the SQL here costs ten minutes. Finding another company’s invoice in your list costs a customer.

  3. 03

    Give the clients screen its own task, and the quote editor the next one

    The quote editor is the hard centre and the clients screen feeds it. Keep them as two tasks so each change is small enough to read.

    PromptBuild the clients screen
    Build the clients screen: a searchable list and add and edit dialogs covering every client field, with a status of active or inactive. Walk me through the component structure before you build it.
    PromptBuild the quote editor
    Build the quote editor: pick a client from file to fill their details or type them in, add line items with description, quantity, unit price and an optional per-line discount, and show the subtotal, a document discount as a fixed amount or a percentage, a tax rate chosen from my tax rates, an optional shipping line and the total, recalculating as I type. Let me choose the document’s currency from a list of about thirty common ones and format every amount with the browser’s own number formatting for that currency, converting nothing. Add a quote date, a valid-until date, notes and terms, then a quotes list with search, a status filter and a sort, with the quote number as the address of its detail page.

    Test with a percentage discount, a tax rate and shipping together, in a currency with no decimals. Rounding that is right in dollars and wrong in yen is the bug this task exists to find.

  4. 04

    Turn a quote into an invoice, and give both a lifecycle

    Converting without retyping, revisions of a quote, sequential numbers and the three statuses. No sent and no paid, because nothing here sends or takes money.

    PromptAdd conversion, revisions, numbering and statuses
    Add a Convert to invoice action on a finalized quote that creates an invoice with the same client, lines, discount, tax, shipping and currency, numbers it INV-1, INV-2 and so on, links the two documents both ways and opens the invoice editor with a due date and payment terms in days added. Add a Duplicate action on a quote that creates a revision numbered from the original (R becomes R/1, then R/2) and make the routes handle a number with a slash in it. Then the statuses Draft, Finalized and Archived on both documents, changed from the detail page, with the database refusing any other value. Build the invoices list and editor to match the quote screens.

    Keep the status list to those three. Adding sent or paid without the machinery behind them is how a status lies to the person reading it.

  5. 05

    Build the PDF and branding, then hand the AI analyzer to its own task

    A handful of PDF designs generated in the browser with your branding on all of them, and then the one AI feature, which is self-contained enough to be its own task with its own log and ceiling.

    PromptBuild the PDF designs and branding
    Generate the PDF in the browser with a PDF library. Build a template gallery with a handful of designs (professional, classic, a ledger style and a couple more), each rendering the document’s header, addresses, line items, totals, notes and terms in its currency. Add branding settings: a logo uploaded to a storage bucket limited to 5 MB and image types, primary and accent colours, a font choice and header and footer text, applied to every design with a live preview. Add a print-ready preview page per document with a Download PDF button.
    PromptAdd the AI template analyzer, with a log and a ceiling
    Create a Supabase edge function called analyze-template that requires a signed-in user, accepts an uploaded image or PDF of an existing invoice as a data URL, sends it to my AI provider with the key held in function secrets, and asks the model, through a forced structured tool call, for a layout specification only: colours, typography, header layout, address sections, line-item columns, how totals are shown, footer and decorative elements. It must not read amounts or line items. Before contacting the provider, write a row to an ai_calls table and check the caller’s calls today against a limit read from settings. Save the specification as a custom template rendered by the same preview and PDF code as the built-in designs. Show me the system prompt you wrote before you run anything.

    Asking to see the system prompt first is worth the round trip. Whether the analyzer stays a designer or drifts into reading amounts is decided in that text.

  6. 06
    Destination

    Hand the dashboard, reports and settings to a cloud run, then test it yourself

    The screens around the documents are self-contained and well specified, a reasonable set to hand to a cloud run while you do something else, provided you read the change before it merges.

    PromptAdd dashboard, reports, settings, demo, and test
    Four remaining pieces. A dashboard with counts and totals by status and the most recent documents. A reports page with cards for Draft, Finalized and Archived, a sortable table of every document with client, date, number and total, and CSV and PDF export. An activity page listing recent changes to quotes, invoices and clients from their timestamps. A settings page for the company profile, branding, tax rates, custom fields, numbering and the default currency, plus a demo account seeded on sign-in and wiped on sign-out behind a Try the demo button I can remove before launch. When they are in, run the app and take it end to end yourself: sign up a second account and confirm it sees no documents, create a quote in a currency with no decimals, convert it, download the PDF and check the totals match the screen, hit the analyzer limit on purpose and read what the app says, and fix whatever does not hold up.
Authentication & security

Protecting your app: sign-in, user data, and AI keys

Your invoicing app manages sensitive information: client addresses, tax IDs, billing histories, and private API keys. Here are the essential security steps to review before launching.

Use your system’s built-in login

When users create accounts, log in, or reset passwords, let your backend system handle all the account security automatically. A dedicated user profile is created for every new sign-up. Stick with this standard setup without modifying it. Building custom login logic from scratch often creates hidden security flaws that you won’t notice until an unauthorized stranger accidentally gains access to your private financial records.

Every account keeps its own private data

The system comes with strict privacy rules configured across all your data tables. Every rule enforces the exact same boundary: client lists, quotes, invoices, itemized rows, visual templates, and personal settings belong exclusively to the account that created them. No other user can view or edit another person’s documents. Because there are no complex team roles, every user manages their own completely private business books.

Document statuses are strictly protected

The app allows only three official document states: Draft, Finalized, or Archived. These boundaries are enforced directly at the database level rather than just on the screen, meaning the system automatically rejects any attempt to invent unsupported statuses like "sent" or "paid." While this rule keeps your workflow clean and consistent, it does not automatically lock finalized invoices against editing, which remains a separate choice for your business.

Secure your AI features and set spending limits

The feature that sends uploaded invoice documents to your AI provider requires users to be fully logged in before it works. This double-layer check stops random visitors on the web from discovering your app’s address and spending your money. However, signing in only verifies who is using the tool: it does not limit how many documents they can upload. Treat unmonitored usage as a financial risk and set clear usage limits early.

Keep company logos public and documents private

The app includes one public storage folder designed specifically for company logos, accepting image files up to 5 MB. Anyone with the direct image link can view it, which is necessary for logos to render properly on printed invoices. Do not store anything else here. Scanned customer invoices, signed legal contracts, or confidential client paperwork must always be kept in a separate, password-protected private storage folder.

Keep AI secret keys hidden and protect client data

Your AI secret key must stay hidden on the server and never be sent to a user’s web browser, where tech-savvy users could easily steal it. Additionally, remember that using the AI analyzer sends actual invoice images to a third-party service. Since real invoices contain customer names, addresses, and payment totals, try to use blank templates or sample files whenever possible, and carefully review your AI provider’s privacy policies.

Remove demo buttons and add live project keys

The starter template includes a "Try the demo" button on the main page. This button signs visitors into a shared temporary account filled with sample documents, which are deleted when they log out. Before launching your app publicly, remove this demo button completely, replace the placeholder development keys with your real production account keys in your environment setup, and only then invite real customers to sign up.

Enable automatic daily backups before taking real payments

The free tier does not save automatic backups, which means your live database is the only existing copy of your business records. Upgrading to the $25/month plan enables automatic daily backups stored safely for seven days. You should activate this upgrade before sending your first paid invoice to a client, as financial records are legally required to be preserved safely for tax and accounting audits.

PromptCheck who can see what
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.

Paste this before launch so Codex checks nobody can see data they shouldn’t.

One rule outranks everything above it: the database service key and the AI provider key stay on the server, and neither one ever goes into the app a browser downloads or into a repository. Should either leak, assume it has been used, look at what your provider says was spent with it, and issue a new one the same day.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • An AGENTS.md file at your project root: Codex reads it automatically before every task, so you never have to remind it
  • Setting Codex’s permissions once for the session, instead of approving every small edit by hand
  • Handing a long, well-scoped task to Codex cloud, so it keeps working in an isolated environment while you do something else
  • Reviewing a diff in the IDE extension, next to the code it touched, before you keep it

Slows the build

  • Leaving permissions wide open for a sensitive change instead of narrowing them for that one task
  • Skipping the AGENTS.md file, so Codex starts each new task without your conventions loaded
  • Handing Codex cloud a vague, open-ended task, where you can’t steer it mid-run the way you can in a live terminal session
  • Merging a cloud task’s changes back in without reading the diff first
Version control

Git: what it is, and why you need it

Before you build anything, meet the one tool that makes building safe. You need no coding background for it: Git remembers every version of your project, so you can try things, break things, and get back to a working state in seconds.

What Git actually is

Git is a quiet recorder that runs alongside your project. Each time you save your work it keeps a full snapshot, so the entire history of your project lives on your computer, not just whatever the files look like right now.

Why you need it

Codex asks before it edits files or runs commands, unless you widen its permissions for the session. Once you do, Git is what makes that safe: there’s always a working version to return to, so you can hand it a bigger task without the fear of losing what already works.

A commit is a save point

Each commit is a snapshot with a short note, like “added the home page”. Make one after every working step and you can jump back to any of them later.

GitHub’s beginner guide to Git

Undo anything, safely

If a change breaks something, you roll back to the last good commit instead of unpicking it by hand. It’s the safety net that keeps a Codex session low-risk even once you’ve widened its permissions.

GitHub is also where Codex can start from

Git lives on your computer. GitHub is a free, private cloud copy of the same project. Keep it private, and never commit secret keys or passwords. Once your project is pushed there, Codex cloud can pick up a task straight from a GitHub issue or repo, without you opening a terminal at all.

Create a free GitHub account

You rarely type git commands

There’s little to memorize. Ask Codex to “commit this” or “undo the last change” and it runs the git steps for you, inside whatever permission boundary you’ve set. Prefer clicking to typing? The Codex extension for your editor shows each change next to the code it touched before you keep it, and GitHub Desktop gives you plain buttons for saving and rolling back.

Get Codex
Going live

Where to host your application

Hosting gives your app a home on the internet so anyone can open it via a web link. Choose a service below to make your site live. (Your database, logins, and business records are stored separately in Supabase, covered below).

HostBest forNotesFree tier
VercelOne-click deploysLink the repository once and each push goes live on its own. The routing file Vercel expects ships in the template, which is what lets a bookmarked invoice open on the invoice instead of the sign-in page. Hobby is for personal use only, and billing clients is a business by definition, so Pro at $20/user/mo is the plan.Pro from $20/user/mo (Hobby is non-commercial)
NetlifyDrag-and-drop or GitEither link the repository or drag the built folder onto the page, and the app is live within a minute. Take the redirect rule Netlify suggests, because without it a bookmarked invoice address opens a not-found page after sign-in.Free tier
Cloudflare PagesA team in more than one countryServes the app from wherever the person opening it is, which matters for an accountant on another continent more than for a freelancer at one desk. The front end is a small static folder, and the PDF is drawn in the browser, so the host never sees an amount.Generous free tier
GitHub PagesNot this appPublishes for free from a GitHub project, and it is here so you can cross it off: the free tier wants a public repository, and the code that bills your clients sits beside an environment file naming your database.Free from a public repo only
Firebase HostingTeams already on GoogleA short setup, then a single command each time you release, with the routing rewrite declared in its own config file. Pick it if your business already runs on Google accounts, since it offers an invoicing app nothing else on this list does not.Free Spark tier
AWS Amplify HostingTeams already on AWSPublishes from the AWS console, and needs the routing rewrite in place before a saved invoice address will resolve. Worth choosing only when your other bills already come from AWS, because a static folder is indifferent to where it is served from.Free tier (build + hosting)
SurgePublish from the terminalA single terminal command puts the built folder online with no repository involved, which is fine for showing a partner the editor before launch and wrong for the address you sign in to every month end.Free, unlimited publishing
DigitalOcean App PlatformDigitalOcean usersBuilds and serves the static folder from an account a business may already pay for, so the database and the app sit with two suppliers rather than three.Free: 3 static sites, 1 GB/mo transfer

Two questions decide this, and neither is about speed. Does the plan permit commercial use, because an app that bills clients is a business and Vercel’s Hobby tier is not for one. And does a saved link to one invoice open that invoice after sign-in, which takes one routing rule on each of these hosts, with Vercel’s already in the template. Nothing on this app is public, so a search engine has nothing to index and that is fine. The host serves one small static folder, and every amount comes from your database.

The landing page’s Try the demo button signs any visitor into one shared account, and it ships turned on. The button logs a stranger into a fixed demo account, seeds it with sample clients and documents, and wipes them when they leave, which is right for a showroom and wrong for the address your clients see on a PDF. Before you launch, remove the button and its automatic sign-in as the code’s own comments describe, then open the landing page in a private window and confirm the only way in is your own account.

Database & backend

Keep your data in Supabase

Clients, quotes, invoices, lines, templates and settings in Postgres, a logo in one public bucket, accounts for the people who bill, and the single function that carries an uploaded design to your AI provider with the key held beside it and nowhere else.

ServiceBest forNotesFree tier
SupabaseData, auth, the logo and the analyzerTwelve tables in Postgres with the ownership rule written into their access policies, accounts from its auth service, one public bucket for logos with a 5 MB limit, and one edge function with the provider key in its secrets. Create a free project, hand over the URL and publishable key, push the migrations, deploy the function and set the key, and it is connected. The line to watch is the pause rather than storage: a free project sleeps after a week without activity, and a business that invoices at month end is idle for three.Free tier, then usage-based
Getting paid

How you collect payments from clients

By default, this app doesn’t handle transactions directly. Your bank details and payment instructions appear clearly on the invoice, allowing clients to pay via standard bank transfer, which costs you $0 in fees. For many businesses, this is the easiest and most cost-effective way to start. If you prefer adding a direct "Pay Now" button to your invoices, you can connect a payment provider, though each provider charges a small fee per transaction.

Stripe InvoicingA Pay now link on a PDF or a page"0.4% Per paid invoice" on Starter or "0.5% Per paid invoice" on Plus with quotes, on top of "2.9% + 30¢ per successful transaction for domestic cards", with "no fixed fees or setup costs"

Two fees stacked: a slice of the invoice for the invoicing product and the ordinary card fee for the payment, and nothing per month. The right shape for an app that already makes the invoice and only needs a link a client can pay through, which is what this template would be asking for.

stripe.com · checked September 2026

Square InvoicesA business that already takes cards in person"Get invoicing features included in any Square plan", with online and invoice card payments at "3.3% + 30¢" on "Square Free" and "2.9% + 30¢" on "Square Plus" at "$49/mo. per location"

Invoicing comes free with the account, and the meter is the card fee, which drops when you pay for the location plan you would buy for the till anyway. Worth it when the same business already runs a Square reader, because the money then lands in one place.

squareup.com · checked September 2026

PayPal InvoicingClients who already have a PayPal account"3.49% + fixed fee" for a PayPal or Venmo payment and "2.99% + fixed fee" for a card, with the fixed fee at "0.49 USD", plus "1.50%" on international payments and an optional "Invoicing Subscription 14.99 USD per month"

The highest percentage of the three and the one many small clients already trust, so the question is who your clients are rather than what it costs you. International payments carry an extra one and a half percent, which matters for the reader billing in several currencies.

paypal.com · checked September 2026

A percentage has no size until you multiply it by your own month, so do that first. Twenty invoices of $500 paid by card in a month, $10,000 in all, costs roughly $336 through Stripe (the card fee, the 30 cents on each, and the 0.4% for the invoice), about the same through Square on the free plan, and roughly $309 through PayPal at its card rate. Bank details printed on the PDF cost nothing and arrive when the client gets round to it. Whichever you pick, the paid status and the reconciliation are yours to build, because the template has neither.

AI workflows

Add AI capabilities in one simple step

Securely route your AI API keys through a lightweight serverless function. The template has one already, the analyzer that rebuilds a PDF design from an invoice you upload. Use simple prompts to automatically cap what it can spend, draft line items from a plain description, write the overdue reminder, and turn a supplier’s invoice into a document you can edit.

Log every analyzer call and put a ceiling on it

The analyzer requires a login and then trusts it completely: nothing records what a call cost and nothing stops an account uploading all day. Build this before anything else below, because everything below spends money too, and pick a current model while you are in there.

PromptLog every analyzer call and put a ceiling on it
Open the analyze-template function. Make the model name a setting I can change without a deploy, and set it to a current model on my provider’s price list that accepts images and structured tool calls. Add an ai_calls table that records every model call (which account, which task, which model, tokens in and out, a cost estimate, success or failure) and write to it from the function, successful or not. Then add a ceiling: a limit per account per day and a total across the whole app, both settings I can change without a deploy, checked before the function contacts the provider and returning a friendly “you have reached today’s limit” rather than an error. Do not let the browser send the limit or the cost. Then add a small usage panel to settings showing calls and estimated spend this month.

Draft the line items from a plain description

Most quotes start as a sentence in your head: three days of design, a print run of five hundred, delivery. Let a model turn that into lines with quantities and your usual prices, and keep yourself as the one who presses save.

PromptDraft the line items from a plain description
Add a “Draft from description” box at the top of the quote editor. It sends my description and my last twenty finalized quotes’ line items to the ai function and gets back suggested lines with a description, quantity and unit price each, drawn from prices I have used before where they match. Fill the editor with the suggestions marked as drafts for me to edit or delete, never save anything until I do, and keep the totals recalculating as I change them.

Write the overdue reminder

The app knows the due date and the amount, and it knows the template sends nothing. A drafted reminder you paste into your own email is the version of this that stays honest about that.

PromptWrite the overdue reminder
Add an “Overdue” filter to the invoices list for finalized invoices past their due date, and a “Draft reminder” action on each that sends the client’s name, the invoice number, the amount, the currency, the due date and how many days late it is to the ai function and gets back a short, polite reminder in my company’s voice, with a firmer version for anything more than thirty days late. Show it in a box I can edit and copy, and record in the activity feed that a reminder was drafted, since this app does not send email.

Turn a supplier’s invoice into a document

The analyzer reads the look of an invoice and deliberately not its contents. A second function that reads the lines off a received invoice or a spreadsheet, with you confirming every figure, is the feature that saves the retyping.

PromptTurn a supplier’s invoice into a document
Add a second function called read-invoice that requires a signed-in account, accepts an uploaded image, PDF or CSV of an invoice or a price list, sends it to the ai function and asks for the line items (description, quantity, unit price), the currency, the tax rate and the client details it can find, each with a confidence. Show the result as a prefilled draft quote or invoice with every figure the model was unsure about highlighted for me to confirm, and never save until I do. Log it and count it against the same ceiling as the analyzer.

Summarize the month in plain words

The reports page has the numbers. A paragraph that says what happened, in each currency separately because nothing here converts, is what you actually forward to a partner or an accountant.

PromptSummarize the month in plain words
Add a “Summarize this month” button on the reports page that gathers the documents finalized in the selected period, grouped by currency with no conversion between them, and asks the ai function for a short summary: what was invoiced, what was quoted and not yet invoiced, the largest clients by amount, and anything unusual compared with the previous period. Show it in a box I can edit and copy, and make clear which currency each figure is in.

Each prompt above should pick whichever model tier fits the job: a fast, lower-cost model for high-volume work, and a stronger reasoning model for anything that weighs tradeoffs against each other. Codex’s model names change faster than this page does, so check OpenAI’s current model line-up (linked in the references below) before you build, rather than copying a name you saw once. Keep all of it behind that same ai function, so one key and one rule set covers every feature you add.

Ready-made option

Get a head start with our template

None of the steps above is compulsory, because the same app already exists, built: the editors add up, quotes become invoices, the PDF carries your brand and the analyzer rebuilds a design from an upload. Your time goes on your tax rates, your currencies and your logo.

Invoice & Quote Builder

The exact invoice builder this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. An invoicing and quoting workspace that takes a quote all the way to paid. You build line items with discounts, tax, and any currency, keep your clients on file, and export a clean PDF from a polished template branded with your own logo, colors, and fonts.

React 18ViteTypeScriptTailwind CSSSupabase
Out of the box

The key benefits of starting with a template

Document editors, instant conversions, status tracking, PDF templates, and financial reporting are ready right out of the box. Simply complete three quick setup steps before launching to your clients.

Building the core from scratch

~103 hrs

Opening the template, already built

~1 hr

Pay Once, Own Forever. Build exactly what your team needs without renting a monthly SaaS subscription, paying per-seat fees, or dealing with platform lock-in.

Automatic, error-free calculations

Create quotes and invoices with line items, individual item discounts, overall document discounts, custom tax rates, and shipping costs, all updating automatically as you type. Currency formatting (including zero-decimal currencies) is already configured so your financial numbers stay 100% accurate every single time.

One-click workflow & revision history

Convert finalized quotes directly into invoices with a single click, keeping all client details and line items connected. Keep your document history neat with numbered quote revisions, sequential invoice numbers, and clear tracking statuses (Draft, Finalized, and Archived) to manage your workflow effortlessly.

Custom-branded PDF document gallery

Choose from several clean document styles customized with your company logo, brand colors, custom fonts, and personalized headers or footers. Enjoy instant live previews as you edit, download print-ready PDFs anytime, and export clean financial reports for your records.

Complete data privacy & smart AI import

Enjoy complete account privacy with built-in security rules that ensure every client record, quote, invoice, and setting belongs exclusively to you. No unauthorized users can ever view your books. Plus, an integrated AI tool lets you upload an existing invoice design and instantly convert it into a matching template.

Three quick tasks before going live

Before opening your app to real clients, complete three simple setup checks: remove the public demo sign-in button, connect your live production keys instead of sample seller credentials, and set your preferred AI model with a spending cap. All three are quick administrative settings, not software development tasks.

Customer story

From founders who build on our templates

A fantastic out-of-the-box solution that handles all our billing needs without monthly fees or client limits. Setup took minimal effort, and it easily matches 99% of paid invoicing platforms on the market. Highly recommended!
Jeevan ThomasJeevan ThomasFounder & CEO, Hado.ai
Got questions?

Common questions

Not as shipped. The template has a Send to client button that explains an email service has to be connected first, and nothing else behind it. Finalizing an invoice changes its status and sends nothing. You download the PDF and send it however you already send things, and adding a real send is the third decision above.

No. There is no payment link, no card form and no paid status, only payment instructions and bank details printed on the invoice. Taking money is a decision above and a block of its own, because the moment a payment rail is connected the app is handling money rather than describing it.

Each document has its own currency from a list of thirty, and every amount on it is formatted for that currency, down to currencies with no decimals. Nothing is converted between currencies, on purpose, because a conversion needs a rate and a date, and the template has neither. Reports total documents across currencies as plain numbers, which is worth knowing before you read one.

A tax rate per document, chosen from the rates you save in settings, plus a discount per line and a discount per document as an amount or a percentage. It does not know any country’s tax rules, so you set the rates and you decide which one applies to which client. Anything more, such as several rates on one invoice, is a change to the editor and the PDF together.

One thing. You upload a picture or a PDF of an invoice you already use, and a model returns a layout description (colours, typography, where the header and totals sit, which columns the lines have) that becomes a design in your gallery. It does not read the amounts or the lines off the invoice. The default model it calls has left the provider’s price list, so set a current one, and the first AI prompt adds the log and the ceiling the template lacks.

No. Say what the tables hold, who owns a row, how people sign in and what the one function does, and your AI coding tool writes each of them. What is left for you is a free Supabase project for it to point at and an AI key placed in the function’s secrets, so the records and the key both end up somewhere you own.

A database plan and a host, both starting free, plus a few cents each time somebody uploads a design for the analyzer. Supabase Pro at $25/mo is worth it from the first real invoice, because it adds daily backups and ends the free tier’s pause after a week of inactivity, and a business that invoices at month end is idle for three.

Only the account that made them. A client, a quote, an invoice, a line and a setting each carry the account that owns them, and the database checks that on every read and write rather than leaving it to the screen. The template ships no roles or teams, so two people who bill from the same company either share a login or wait for the team feature you build.

A Try the demo button on the landing page that signs in to a fixed account, seeds it with sample clients and documents, and wipes them again on sign-out. It is for showing the app off, and the code marks it for removal before you launch, because a public button into a shared account is not something you want on a billing tool.

It keeps its status and its number. Draft, Finalized and Archived are the only three states, so a finalized invoice is not locked by the database and can still be edited or archived from its page. If you want finalizing to freeze a document, that is a rule to add deliberately, and the fourth decision above is where to think about it.

Nothing here is proprietary. Clients, quotes, invoices and their lines sit in plain PostgreSQL tables, so a routine dump carries every one of them to any other Postgres host, and the reports page exports the document table as CSV whenever you like and the PDFs are already files on your disk.

Yes. Any of the hosts above will serve the app on a domain you already own, with the certificate handled for you, in a few clicks. Do it before the first client sees a PDF, because the address on a sign-in screen your clients never see matters less than the name in the PDF footer, and both should be yours.

No, though you will type the occasional command: installing Codex, starting the app, applying a database change. The setup section above lists what you need, with a link for each, and once it’s on your machine Codex runs most of those commands for you.

A regular ChatGPT chat can sketch ideas and write snippets, but it isn’t working on your actual project. Codex reads and edits the real files on your computer. The app you get out of it is one you can run and publish, not a preview.

On a ChatGPT plan, Codex’s usage resets on a rolling window rather than billing per token, so a heavy day of building can bump into a limit. You either wait for it to reset, move up a plan, or switch to pay-as-you-go API billing for the rest of the session. Nothing you’ve already built is lost either way, so the work only pauses.

References

Sources checked September 2026
  1. 01Pricing (Lite, Plus, Premium, per-user seats), FreshBooks. freshbooks.com
  2. 02Pricing plans (Early, Growing, Established), Xero. xero.com
  3. 03Pricing (free plan and its limits), Zoho Invoice. zoho.com
  4. 04Pricing (Starter, Pro, payment fees), Wave. waveapps.com
  5. 05Pricing (Starter, Business, per seat), PandaDoc. pandadoc.com
  6. 06Invoicing pricing (per paid invoice), Stripe. stripe.com
  7. 07Payments pricing (card and bank transfer fees), Stripe. stripe.com
  8. 08Invoices pricing (plans and card fees), Square. squareup.com
  9. 09Business fees (invoicing transactions), PayPal. paypal.com
  10. 10API pricing (current per-token rates), OpenAI. developers.openai.com
  11. 11Pricing (Pro plan, pause, backups), Supabase. supabase.com
  12. 12Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  13. 13Row Level Security, Supabase docs. supabase.com
  14. 14Pricing (plans, usage limits), ChatGPT docs. learn.chatgpt.com
  15. 15Codex CLI, ChatGPT docs. learn.chatgpt.com
  16. 16IDE extension, ChatGPT docs. learn.chatgpt.com
  17. 17ChatGPT desktop app, ChatGPT docs. learn.chatgpt.com
  18. 18Codex cloud, ChatGPT docs. learn.chatgpt.com
  19. 19AGENTS.md, ChatGPT docs. learn.chatgpt.com

This guide is general information. Third-party prices, plan limits, payment fees and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. What one analyzed design costs depends on the model you point the function at and your provider’s rates on the day, so measure it on your own account before you budget for it. Build hours and the cost estimates derived from them are our own estimates, not quotes. Codex, ChatGPT, and the OpenAI API are products of OpenAI. Verify current capabilities and pricing before relying on them.