DAFFA ZAHY KHAIRY
Accounts payable / prototype

Vera

Purchase order, delivery note and invoice, checked against each other before anyone pays.

07 / 08Three-way matchSynthetic data
Role
Spec review, frontend build, QA
Stack
HTML, CSS, JavaScript, IndexedDB, service worker
Timeline
November 2026
Status
Frontend demo · 13 domain tests
Vera landing page: the headline “Verifikasi tagihan, dengan bukti yang jelas.” beside an illustration of a PO, delivery note and invoice, one mismatched row circled in amber and a green approval seal
Landing page — “Verifikasi tagihan, dengan bukti yang jelas.” means “Verify invoices, with clear evidence.”07 / 08
3documents matched before “ready to pay”
13domain regression tests
51page × width checks without horizontal overflow

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 spec

Connect 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
UserMain question
Finance managerCan I approve this invoice, and what exactly am I approving?
AP adminWhich invoices need a revision or a check?
Warehouse staffWhat arrived today, and in what condition?

A status never means more than it does.

Four places where the easy version would overstate what happened.

  1. 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.

  2. 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.

  3. 03

    Roles decide actions

    Managers approve, AP admins draft, warehouse staff never see prices. Duplicates and missing signatures stay blocked for everyone.

  4. 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.

CheckResult
Domain regression tests13 passing
Return deduction50 × Rp45,000 = Rp2,250,000
Approved value after returnRp42,750,000
Page × width combinations without horizontal overflow51
Smallest width checked320 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.

Prototype on synthetic fixtures. Company names in the screenshots are synthetic examples.