Three tax regimes
Vietnam, USA and EU workspaces with their own currency, presets and numbering, plus explicit zero-rated, exempt and reverse-charge treatments that require a note.
Three independent workspaces, one for Vietnam, one for the USA and one for the EU, each with its own currency, tax treatment and numbering. Unglamorous, entirely client-side, and the thing small businesses actually shop for.
Opens quote-invoice.taiphamsolutions.com in a new tab. No account, no signup, and nothing you do in it leaves your browser.
The editor is the same in all three workspaces: editable line items, customer details, a shipping address, payment instructions, inclusive or exclusive pricing, and totals that recompute as you type. What changes between them is the tax model. Vietnam has VND with 8% and 10% VAT presets. The USA has USD with editable additive state and local components. The EU has country presets with an adjustable rate, a VAT ID, IBAN and BIC, a supply date, and reverse charge.
Money is stored in integer minor units and never in a float. Tax-exclusive lines round their net value and each tax component half up. Inclusive lines preserve the gross amount, round the net half up, and distribute the remaining tax across components by largest remainder, so the parts always add back to the total the customer was shown.
A draft is unnumbered and freely editable. Issuing it is atomic: one IndexedDB transaction takes the next number and freezes the contents, with separate sequences per region, document type and issue year, as in VN-INV-2026-0001. After that the contents are immutable. A mistake is cancelled rather than edited, and the number is never reused. Counters stay monotonic even through a backup restore.
Issue an invoice, then try to change its total. Cancel it instead, and watch the number stay used rather than come back around.
Three demo workspaces with fictional customers and products, plus one-click fill, random customer and random items while you are exploring.
Vietnam, USA and EU workspaces with their own currency, presets and numbering, plus explicit zero-rated, exempt and reverse-charge treatments that require a note.
Line items, customer and shipping details, payment instructions, inclusive or exclusive prices, and live totals computed in integer minor units.
Atomic numbering, immutable issued contents, manual status tracking, cancellation without number reuse, duplication, and a link from a quote to the invoice it became.
An A4 and Letter print stylesheet with repeating table headings across pages, save as PDF from the browser print dialog, CSV export of the list, and versioned JSON backup.
Every step below happens inside the demo. There is no point in it where the work leaves the browser and comes back.
The workspace decides the currency, the tax model, the numbering sequence and the document language before anything is typed.
Customer, line items, and a choice between inclusive and exclusive pricing. The tax treatment is explicit, and exemption or reverse charge will not save without a note.
Rounding happens per component in integer minor units, so what is printed is what adds up rather than what a float happened to produce.
One transaction numbers the document and snapshots the customer, business, currency, language, tax treatment and paper size into it.
Status is tracked by hand, a cancellation leaves the number spent, and a quote carries a link to the invoice it turned into.
A print stylesheet that repeats table headings across pages, or CSV for the list, or a versioned JSON backup of all three workspaces.
There is no server behind any of this, which decides both columns. The left one is what that constraint made worth building properly. The right one is what it rules out.
The write-up sells harder than the application does, so it is on the page rather than in a repository nobody can open.
A demo exists to prove something on the offer list rather than to be impressive on its own. These are the ones this one argues for.
Each one is a different kind of problem, and all of them are in the Demos menu at the top of the page.
This one was built to a constraint nobody would choose. Yours would have a server, real accounts, and the parts of the domain that are actually hard. Tell us what the software has to do and we will tell you what it takes.
Bring the messy version of the problem. That is the conversation we enjoy most.