For workshops Filed to KSeF at one press — with the UPO and the PDF

From order to invoice.

You run the job the way you always have: parts, hours, photos. The invoice builds itself from what you already logged and files straight to KSeF. And because you record the buy price on every part, the job tells you what an invoicing tool never knows — what you kept on that job.

The belna.app job list, showing each job's client, dates, status and running totals for to-dos, costs and working time.

Nothing typed twice

Paperwork comes out of the job, not out of your head

No notebooks, loose scraps or spreadsheets. You run the job in the app, and when it's finished you generate the invoice from it and file it to KSeF.

What did you make on it? You know straight away

Materials plus working time equals the total — right at the top of the job, next to what the client pays. On parts you even see the sum: what went out on the purchase, what comes back on the sale. An invoicing tool can't work that out; it only knows the price you charged.

Job preview: materials margin PLN 86.00, working-time margin PLN 660.00 over 4h 30min and a total of PLN 746.00, each with the net, VAT and gross the client pays, and a 1/3 checklist below.

The invoice writes itself — there's no other way

Each part becomes its own line; hours merge into service lines by type. There is no “add line” button on an invoice — whatever appears on it had to be logged on the job first. You review it, you don't retype it.

Invoice lines: the part “Replacement charger 65 W” as its own row, and the hours merged into one service row per work type, each with its unit, quantity and price.

A correction is one sentence of typing

The app writes the correction: it re-reads the job and diffs it line by line against the last document KSeF accepted. All you type is why.

The bottom of the correction: the Changes table — the ABS sensor going from one to two (+156.00 net) and brake pads appearing as a new line (+220.00 net) — above a Before/After/Difference summary whose Total row reads 684.00 net before, 1,060.00 after, +376.00 difference and +462.48 gross.

A dated page instead of an argument

Every job produces a drop-off protocol as a PDF: the client's details frozen as they were that day, the job number, the drop-off and planned pick-up dates, the fault description, the checklist, and the photos attached while creating the job — printed inside the document. When he comes back six weeks later saying it was already cracked, you have an answer.

A generated service intake form: client details with TIN and contact person, the event number, filing and planned pick-up dates, the fault description (“The laptop will not charge – the power socket is loose…”) and three to-dos.

A modern app

Nothing to install

belna.app opens in a browser: on the office computer, on a tablet at the counter, on your phone while you're out fetching a part. Same login, same jobs — no installer, no licence tied to one machine, no database to carry across when you change hardware. All it takes is a connection, and the workshop is with you anywhere in the world.

belna.app on a desktop: side navigation for Events, Clients and Settings next to the full job table with number, client, dates, status, costs and working time.
Desktop in the office.
The same view on a tablet: the side navigation stays and the job list rearranges into three columns of cards.
Tablet at the counter.
The same view on a phone: navigation folds behind an icon, the filters stack one under another, and a job fills the whole card.
Phone on the road.
Servers and data in Poland.
The app runs on servers in Poland, and that is where your jobs, invoices, intake forms and photos are processed. Nothing travels to the far side of the world to come back to you as a line on somebody else's dashboard.
You pay to use it, not to own a version.
There's no box to buy and no licence that stops matching the law in two years. The app is developed continuously and the new version simply appears — no installer, no paid upgrade, no evening lost to a setup wizard.
Security keeps up with the threats.
The internet invents a new way to get at other people's data every month, so the app is adapted to whatever is going around at the time. The fixes land on our side — you neither have to hear about them nor click anything at your end.

One job, from drop-off to pick-up

The whole job hangs off a single record. You open it at the counter and only ever add to it — parts, hours, photos — and the intake form, the margin and the KSeF invoice fall out of it along the way. Nothing gets typed a second time.

  1. 01

    Drop-off

    The customer puts the machine on the counter and you open the job: a customer from your list or typed in there and then, the intake date, the expected pick-up, the fault, a checklist and photos. The number assigns itself.

    The whole “Adding new event” form: intake date and time, the planned pick-up, the fault description, the customer picker, the checklist and the attached photos.
  2. 02

    Intake form

    A PDF is built in the background: the customer's details frozen as of that day, the fault, the checklist and the photos pasted into the document. Print it and have it signed, before anyone starts remembering it differently.

    The whole generated intake form: the customer's details frozen as of the intake day, the job number and dates, the fault description and the checklist.
  3. 03

    Parts and hours

    Everything goes onto the job as the work happens: a part with both its purchase and its sale price, an hour with its own type — labour, travel, parts run, quoting, other. The status changes in two clicks straight from the list.

    Three windows from the same job stacked on top of each other: the full parts list with purchase price, markup and sale price, the full working-time list with type and rate, and the checklist with the parts and hours booked against each task.
  4. 04

    What's left

    Materials, working time and the total sit at the top of the job next to what the customer pays — the whole time, not a week after invoicing. You set the price knowing how much of it stays with you.

    Materials plus working time equals the total: three tiles, each with its margin and with the net, VAT and gross amount the customer pays — 162,00 zł on parts and 532,50 zł on hours make 694,50 zł left on the job.
  5. 05

    The draft invoice

    Machine ready — the invoice assembles itself from what you already recorded: parts as their own lines, hours merged into service lines by type. You check VAT, payment and dates; there simply is no “add line” button.

    The whole invoice badged “Draft”: number, issue and sale dates, both parties' details, the payment method and due date, and the lines built from the job — the three parts one by one and the hours merged into “Usługa - Praca” and “Usługa - Zakupy”, adding up to 1 236,77 zł gross.
  6. 06

    Issue and KSeF

    One click: the next number in your scheme, both parties' details frozen, the FA(3) XML, an encrypted session. Back come the KSeF number, the UPO and a verification QR code — on the invoice and on its PDF. The job moves itself to Waiting to be picked up.

    Three windows from the same invoice stacked on top of each other: the job's invoice list with the “Issued” and “KSeF: accepted” badges, the invoice PDF carrying the KSeF number and its verification QR code, and the KSeF details with the number, the acquisition timestamp, the QR code and the UPO download.
  7. 07

    Payment and pick-up

    Mark the invoice paid with a click, with a date you can correct afterwards or take back — and only a document KSeF has accepted can be marked paid, so the column can't quietly lie to you. The customer collects, the job moves to Received and closes together with its paperwork: intake form, invoice, UPO. All of it stays in the customer's history.

    The job list with the status menu open: a job “Waiting to be picked up” being moved to “Received”. The same job's invoice list, overlapping the corner of the list: an issued invoice accepted by KSeF, with its issue date and an editable paid date.
The onboarding wizard, walking through business data, invoice numbering and KSeF certificates.

Getting started

Set it up once, then just work

A wizard opens on your first sign-in and walks you through the three things invoicing depends on. You can skip it and finish later in Settings — nothing is forced on you up front.

1
Your business data. Name, address, NIP, bank account and whether you're a VAT payer. This becomes the seller block on every invoice.
2
Invoice numbering. Pick a prefix and one of five numbering schemes; a live example shows exactly what your next number will look like.
3
KSeF certificate. Upload the certificate with its key and press Test connection — the app really signs in to KSeF with your NIP. Better to find that out on a quiet Tuesday than with a customer at the counter.

Pricing

Pricing is on its way

We're still settling on plans. If you'd like to use belna.app in the meantime, get in touch — we'll sort something out directly, on the terms the first workshops get.

Frequently asked questions

Try it on your own jobs

Tell us what you repair and how you invoice today. We'll set up your account and walk you through the KSeF certificate — the one part that needs a moment's attention.