Every Invoice App Wanted My Data. So I Built My Own.

A few months ago I needed to send a client an invoice. One invoice. I opened the first tool a search turned up, and before I could type a single line item it wanted an account, a subscription, and cheerfully explained that my client's name, address and the amount I was charging would live on its servers. The second one was the same. The third offered to email me the PDF.

I just wanted to hand someone a clean invoice. So I built the thing I actually wanted, and then I put it online as RēķinsTev a free invoice tool so anyone else stuck in the same spot could use it too.

The data never leaves your browser

The first decision shaped every one after it: your invoice is never uploaded. Everything, the parties, the line items, the totals, happens on your own device, and nothing is sent anywhere.

Why be so strict about it? Because an invoice is quietly sensitive. It carries your client's details, your prices, your bank account. For a one-off document, handing all of that to a stranger's server in exchange for a PDF is a bad trade. Keeping it local let me promise something simple and true: I can't see your invoices, because they never reach me. It also means the tool opens instantly and keeps working on a train with no signal.

Making it feel like it was made here

Generic invoice tools are translated; I wanted one that felt native, so the small things got the attention. The total is spelled out in words, in Latvian, the way an invoice here is expected to read. Dates and numbers follow local habits instead of an American default. There is a scan-to-pay code on the sheet, so a client points their banking app at it and the payment is pre-filled, with no account number typed in wrong.

The part that took the most fiddling was importing a list of items. Real spreadsheets here are messy, exported with semicolons instead of commas, prices written with a comma for the decimal point. So the importer sniffs out whichever shape your file is in and lets you line each column up with the right field before anything lands in the invoice. That unglamorous plumbing is exactly what makes it feel effortless.

The invoice editor on the left with a live, full-size preview of the printed invoice sheet on the right.

One invoice, the same everywhere

Here is the problem I did not expect to spend days on: a PDF should look identical no matter where it was made. The obvious way to turn a page into a PDF is to lean on the browser's own print feature. I tried. It betrayed me on every device, different margins on one, shrunk-to-fit on another, and phones that flatly refused to print just the part I wanted.

So I stopped asking the browser to do it and drew the document myself, then turned exactly what you see on screen into the file. The preview is the invoice. What you lay out is what your client receives, whether you made it on a laptop or a phone. It was far more work than it had any right to be, and it is the part I am most glad I did not shortcut.

A finished invoice sheet with the grand total spelled out in words in Latvian and the seller's payment details below it.

Free, and a small way to go further

The core is free, and it stays free: no account, no catch, you can create an invoice in under a minute. For people who invoice often there is an optional pass that lifts the limits and adds a little branding, and even that works without an account, you pay once, you get a recovery code, and that is it. I wanted "pay me if it is useful" to be as low-friction as "use it for free".

The point

I did not set out to build a product. I set out to send one invoice without signing my client's data over to someone I had never met. The useful version of that frustration was not a complaint, it was a small, sharp tool that does one job well and asks for nothing in return.

That is the quiet luxury of being able to build things. When the existing options annoy you, you do not have to settle for them, you can make the one you wished existed, and if you are lucky, leave it somewhere other people can find it too.