Email us

Our whole back office, in one system we built.

Invoices, client reports, email, tax documents, reminders and a twelve-year archive used to live in separate tools. Kvit joins them, checks them against each other, and has run our own company since October 2026. It is what we build for others: many small rules, glued into one system people can trust.

Built for our own business in Serbia, so it works in Serbian and in dinars. It is not for sale; the way it is built is.

Kvit's home screen with example data: the year toward the 6 million dinar limit, this month's invoice and the year's invoices
Example data from the built-in guide.

What is joined together

Each part feeds the next, so a number is typed once and every document that uses it agrees.

Invoices

Hours and prices in, the central bank's exchange rate for the day applied, totals calculated, and a payment QR code printed so the client's banking app fills in the transfer.

Client reports

Monthly reports of extra hours and support work, numbered apart from invoices and locked when first downloaded. Locked hours fill the invoice line, and the issued invoice records which reports it used.

Email from the right account

An invoice and its reports go out in one email from the account chosen for each client, so the message stays in that account's Sent folder. Only an encrypted permission to send is stored.

Official documents read, not retyped

The yearly tax decisions arrive as PDFs. The system reads their text and printed QR codes, shows every field for a person to confirm, then produces the monthly payment slips.

Reminders that fire once

Invoice due, turnover limits at 80, 90, 95 and 100 percent, tax deadlines and the yearly archive. Each reminder is sent once and kept in a log.

History brought in and checked

Seven years of invoices imported from the previous tool, with the original PDFs kept byte for byte. The import stops unless every invoice matches the ledger and the totals add up.

Record rules, enforced in the system

The same properties an auditor checks in any record system, built into a small one.

Issued means final

Once an invoice is issued, the database itself refuses to change or delete it. A mistake is corrected by a cancelling invoice and a new one, and the number stays used.

Every document identified

Each issued invoice carries a SHA-256 identifier, and the company and client details are frozen as they were on the day of issue.

An archive you can verify

One ZIP per year with every invoice, the KPO book, the data and a checksum file. A year is kept for twelve years. After that it can be deleted only once its archive has been downloaded, with no hold on it, after a fresh sign-in and with the year typed out.

Sign-in that needs more than a password

A passkey, or a password with an authenticator code. There is no public sign-up, and changes to company data, bank accounts or prices ask for a sign-in from the last ten minutes.

Documents that leave the system

Invoices, reports and letters are built from the same data. Invoices and letters carry the company's own letterhead; reports carry only the client's logo. The invoice's payment QR code was checked against the National Bank of Serbia's validator.

An example invoice from Kvit with a payment QR code
Made-up company, client and account; the QR code pays no one.

How it is built and tested

A specification with binding decisions came first, and every change is checked against it. The app runs on Cloudflare Workers with a D1 database, so there is nothing to install. Every page is tested end to end in light and dark themes, on desktop and phone sizes, in three browser engines.

Sensitive data is kept to a minimum. To send email, Kvit stores only an encrypted permission to send, never a password or the content of the mail. Documents such as income certificates are built in the browser and never stored.

React, TypeScript, Hono, Better Auth, pdf-lib, Cloudflare Workers and D1, Playwright.

What this could look like in your business

The parts change from one company to the next. The way they are joined does not.

  • A register of issued documents, such as certificates, approvals or invoices, where nothing issued can be edited, only cancelled and replaced.
  • Reports generated from source data and linked to what they support, so the figures in the report and in the invoice can never disagree.
  • Official PDFs and forms read into structured data, with a person confirming every field before anything is saved.
  • Reminders and deadlines driven by rules, sent once, with a log of what went out.
  • An archive your auditor can check, with checksums and a retention rule the system enforces.

Could your back office run like this?

Tell us which documents you issue, track and keep, and which tools hold them today. We reply within one business day with the questions we would ask first.

Email office@noni-soft.com