Vera
Purchase order, delivery note and invoice, checked against each other before anyone pays.
- Role
- Spec review, frontend build, QA
- Stack
- HTML, CSS, JavaScript, IndexedDB, service worker
- Timeline
- November 2026
- Status
- Frontend demo · 13 domain tests

Three documents, arriving on different days.
The order, the goods and the bill rarely arrive together. Finance has to see what was ordered, what arrived and what is charged, and decide with the evidence in view.
From the product specConnect the purchase order, the physical receipt, and the invoice; show every mismatch with its evidence; prepare a decision that can be traced.
Who uses each document
| User | Main question |
|---|---|
| Finance manager | Can I approve this invoice, and what exactly am I approving? |
| AP admin | Which invoices need a revision or a check? |
| Warehouse staff | What arrived today, and in what condition? |
A status never means more than it does.
Four places where the easy version would overstate what happened.
- 01
A correction to the spec
The spec gave Rp42,500,000 after a 50-unit return. 1,000 units at Rp45,000 minus 50 returned is Rp42,750,000; the app uses that and documents the difference.
- 02
Ready to pay is not paid
Approval moves an invoice to Ready to pay. The CSV export is labelled internal review and never marks anything as paid.
- 03
Roles decide actions
Managers approve, AP admins draft, warehouse staff never see prices. Duplicates and missing signatures stay blocked for everyone.
- 04
Offline that tells the truth
Warehouse photos are stored on the device and labelled “saved on device”, never “sent”, until a server acknowledges them.
Five menus and one case workspace.
Lifecycle menus, a case workspace with an origin trail and evidence, printable debit notes, an internal-review CSV, PO import, and a mobile warehouse flow with camera capture.




The landing animation
The landing page animates the check itself: a scan line crosses the invoice table, the mismatched row is flagged, then the approval seal stamps. The loop pauses when it is off screen.
50 returned units, Rp2,250,000 off the bill.
| Check | Result |
|---|---|
| Domain regression tests | 13 passing |
| Return deduction | 50 × Rp45,000 = Rp2,250,000 |
| Approved value after return | Rp42,750,000 |
| Page × width combinations without horizontal overflow | 51 |
| Smallest width checked | 320 px |
Local frontend, synthetic fixtures. No OCR accuracy or production readiness claimed.
A frontend, not a payment system.
- Not yet: OCR, a backend with server-side roles, or ERP, email, and bank connections.
- The role picker is a demo, not security. Data lives in this browser and can be cleared by the browser.
What was checked in the browser
Main flows were checked in the browser and with Playwright: approval with a checklist and reason, CSV download, persistence after reload, an offline reload, and rejection of an invalid CSV without a partial import.