Turn your hours into an invoice
Fill in your details once, add a client once, and issuing an invoice is: pick the client, enter the hours, download the PDF. Your client list, your rates and your bank details stay in this browser — not only because we say so, but because the page is served with a policy that makes the browser refuse to send them anywhere.
- Nothing is uploaded
- No signup
- Free, with no paid tier
- Works offline after the first visit
Questions
Is my client list really not uploaded anywhere?
Nothing you enter is sent anywhere. Everything Docket fetches comes from this same site: the advert logos and the second webfont as the page loads, the PDF code and the two fonts the invoice embeds when you first generate one, and — on a first visit — a copy of every file this site serves, downloaded in advance so the app works offline afterwards. Every one of those is a download; nothing goes the other way.
It is served with a Content-Security-Policy of
connect-src 'self', so the browser refuses any fetch, XHR, WebSocket,
EventSource, beacon or link ping to another origin whatever the code tries to do.
Your details are kept in this browser's local storage and the PDF is assembled on
your machine.
Does it work without an internet connection?
After the first visit, yes. A service worker caches everything a cold load needs, including the PDF code and the two fonts the invoice embeds, so you can open Docket with no connection at all and download a finished PDF. The cached list is generated from the build rather than written by hand, so it cannot go stale.
The first visit needs to load the site once.
Can I issue Romanian invoices?
Yes. The Romanian layout prints CUI, Reg. No., Reg. Capital., Banca and IBAN for you, and your client's Reg. No. and CUI when you have filled them in. It carries the RON conversion block when you set a rate and your signature when you have uploaded one, and it leaves the daily timesheet off.
That shape is inherited from the tool Docket replaces, whose Romanian invoices a
Romanian accountant has been accepting for three years, and the Romanian wording is
carried over unchanged down to the missing diacritics. What was changed
deliberately, and why, is listed in src/engine/labels.ts.
It does not give tax advice. The VAT treatment and its wording are yours to set: Docket does the arithmetic and prints what you tell it.
How do I get the National Bank exchange rate if Docket never contacts the bank?
You type it, or you download the BNR rates file yourself and drop it on the page, where it is read locally. If your invoice date is a weekend or a holiday, Docket walks back up to ten days to the last day the file has a rate for, and tells you which day it used. A year file begins in early January, so an invoice dated in the first days of a year needs the previous year's file — Docket says so when that happens.
Fetching it automatically would mean a request to bnr.ro. That request would carry nothing of yours, but an app whose whole claim is that nothing leaves your device does not get to make exceptions for convenient ones — and the policy it is served with would block it regardless. There is a link to the file on the page; clicking it opens a tab and sends no referrer and nothing of yours.
Can I import a timesheet from Clockify or Toggl?
Yes. Docket reads an .xlsx, .csv or .txt with
a date column and an hours column — Romanian headings too — and it also recognises
the Clockify and Toggl shape of a date with start and end times, summing several
entries on the same day.
A date already on the timesheet is replaced rather than added to, so importing the same month twice does not double it. If any row cannot be read, nothing at all is imported and Docket names the row and what was wrong with it — there is no such thing as a half-applied import.
What happens to my invoices if I clear my browser data?
They go. Docket has no account and no copy of anything, so clearing this site's data removes it for good, along with the offline copy of the app.
Use the export button on the Your data tab: it writes one JSON file holding every client, invoice and setting, which you can import here or on another machine. Keys are sorted and the indent is fixed, so two exports of the same data differ only in the timestamp at the top and a backup diffs cleanly. That file is the backup, and it is the honest version of sync.
Is it free, and what is the catch?
It is free, with no paid tier, no signup and no watermark. There is no catch to disclose because there is no business model: it is a static site with no backend, so it costs almost nothing to run.
Docket sets no limit on invoices. The browser does: everything lives in this site's local storage, which is a few megabytes, and a large signature image eats most of it. Docket tells you when it is full and asks you to export.
Can Docket email the invoice to my client?
No, and it will not. Sending mail needs a server, and that server would see both the invoice and your client's address — which is precisely the thing Docket exists to avoid. Download the PDF and send it yourself.
What does Docket deliberately not do?
No accounting, no bookkeeping, no expense tracking and no tax filing. No payment processing or "pay now" button. No client portal, no reminders, no recurring billing. No Romanian e-Factura XML yet.
It issues invoices. A tool that half-does five other jobs is worse at the one you came for.