TM

← All work

AI product · credits · live

Meltek Bookkeeper

A focused receipt-capture layer for Australian sole traders and tradies — not another full ledger. Snap photos or dump PDF folders; we extract vendor, date, GST, total, category, and ABN. Pay for what you process.

  • React 19
  • TypeScript
  • Firebase (AU)
  • Cloud Functions
  • Vertex AI
  • Zod schemas

Problem

Tradies and sole traders sit on a shoebox of till slips. Full accounting suites (Xero, MYOB) are a monthly seat for a job that is really: get GST-ready fields out of photos and messy PDFs. They needed a sharp capture layer that sits beside the tools they already use.

Approach

  • Ship a dual-surface product: static Meltek marketing at / (home, pricing, FAQ) and a React SPA under /app/ — Firebase Hosting rewrites scoped to the app only, so marketing pages stay real HTML.
  • Extract via Vertex AI batch jobs with an honest 30–60 minute window, not fake-instant AI. Australian-first fields: vendor, date, GST, total, ATO/Xero-style category, and ABN with ABR lookup.
  • Bill with a credit wallet instead of a subscription: 1 credit per page, +1 to classify multi-page PDFs, mixed invoice+extras rejected before extract. Credits escrow while a batch is in flight; genuine failures refund. Founding pack $10 / 50 credits, never expire. Review in-app and export CSV.

What I owned

  • Product, pricing, and upload rules — including the mixed-PDF reject so we don’t invent three receipts from one invoice.
  • Ingestion pipeline, relatedness check, Vertex batch settlement, and the credit ledger (hold / spend / refund) as backend-only money movement.
  • Marketing site, React app, shared Zod schemas, Firebase Auth/Firestore/Storage/Functions in australia-southeast1, and the launch at bookkeeper.meltek.com.au.

Outcome

Live at bookkeeper.meltek.com.au — a billed Meltek product, not a prototype. Capture first, bookkeep later; Square in-app packs and bank-statement match are next, not claimed as shipped.