04Case study · SaaS, mobile-first

OHNAR

Helping tradespeople spend less time on admin and more time getting paid.

Live · early paying customers ohnar.co.uk ↗
OHNAR's job pipeline on a phone — jobs across Lead, Quoted, On, Invoiced, Overdue and Paid, with per-job cards and a WhatsApp payment chase
ohnar.co.uk
My roleResearch, product design, full-stack build & launch — solo
TypeMobile-first SaaS (PWA)
StackReact · Supabase · Stripe · Netlify · Claude
StatusLive · early paying customers

The problem

Most self-employed tradespeople run their business across paper, WhatsApp, memory and spreadsheets. Quotes get written in Word or a notebook, invoices slip to the evening, receipts pile up in the van, and few can say what they actually earned on a job once materials and expenses are in.

The tools that exist are usually too complex, too expensive, or built for accountants and bigger firms. A sole trader finishing a job at 4pm doesn't need an accounting platform — they need to get paid.

Research

I talk to tradespeople every day — it's part of my Royal Mail round. Builders, plumbers, electricians, gardeners, cleaners. So I did what I do with every product: I asked how they actually work, and watched where time and money leak.

The pattern was consistent. They weren't struggling to find work — they were struggling to manage it: remembering what still needed invoicing, chasing payments, switching between half a dozen tools and their own memory.

The real problem wasn't accounting. It was cognitive load.

A second thing came up again and again: they didn't want to feel like accountants. Anything that looked like bookkeeping got abandoned. That shaped the entire product — every feature had to earn its place by removing a real loss of time or money, not by looking impressive.

The design approach

I designed OHNAR around the natural shape of a job, so the software follows the work rather than the other way around — the same six stages a trader already thinks in:

LeadQuotedOnInvoicedOverduePaid

The decisions that made it work on a real job site, not just in a demo:

Voice-to-quote as the wedge — designed for a job site

The fastest path from "job's done" to "quote sent" is talking. But I designed for reality: no signal, dirty hands, and users whose first language isn't English. So it works offline — falling back to a hand-written parser across ten languages, down to Arabic-Indic numerals — and never hard-fails. Designed for the worst conditions, not the best.

Restraint was the core design decision

On the surface, per-job profit is deliberately dead simple: what you charged, minus materials. The harder accounting — tax year, CIS, VAT — is real, but tucked into a separate "Money" layer so it never gets between the trader and the job. The hardest design work was deciding what to hide.

Meet them on WhatsApp — but never behind their back

Invoices, quotes and payment chases are prepared as WhatsApp messages the user reviews and sends themselves; the app never messages a customer on its own. Designing with the grain of how trades already communicate, with restraint about their customer relationships.

The paywall is a design decision, not just a business one

The entire quote-to-paid loop is free — genuinely useful, and every document quietly reads "Sent with OHNAR." Pro removes that branding and adds the profit-insight layer. Growth and monetisation became the same lever, instead of gating the thing people came for.

Screens

The same job seen from every side — captured from the live app. Details shown are test data, not a real customer.

OHNAR voice capture — a 'Listening…' card reading 'Say the job, the name, the price'
Voice-to-quoteSay the job out loud; it drafts the quote. The wedge.
OHNAR quote review — line items totalling £6,250, a note reading 'this is what your customer sees, tap anything to change it', and a 'Remove the OHNAR footer with Pro' option
The trader's view“What your customer sees — tap anything to change it.”
OHNAR customer-facing quote page for Four Electricals with the breakdown and Accept quote / Decline quote buttons
The other sideThe customer opens a clean page and accepts or declines.
OHNAR jobs pipeline — jobs grouped across Lead, Quoted, On, Invoiced, Overdue and Paid with per-job cards and a WhatsApp chase button
Every job, one lineThe whole book of work, Lead → Paid, at a glance.
OHNAR money view — true-profit, tax-pot and profit-per-hour insights, accountant CSV export, and a founding-member price
What you keptProfit, tax set aside and the insight layer — the Pro hook.

Technical implementation

OHNAR is a production progressive web app, built and maintained solo. It handles real money and runs on real job sites, so the engineering had to hold up.

React 19ViteSupabase · Postgres · RLS · Realtime Stripe + Connect~27 Netlify functionsClaude (Haiku/Sonnet) jsPDFPWA / Web PushPostHog · GA4~219 tests

The decisions that mattered technically:

Cloud-authoritative status, with a one-way "accepted" ratchet

Job status lives in Supabase so it reads the same on every device. But in real use I hit a cross-device bug: a stale realtime event could silently un-accept a signed quote — a job "stuck on Quoted." I fixed it with a monotonic ratchet (accepted can only move forward) and wrote tests around it. A real problem, found in use, closed properly.

A voice pipeline that degrades gracefully

Speech is captured with the browser's Web Speech API, parsed into a structured quote by Claude in a serverless function — and, when there's no connection, by a hand-written multilingual parser on the device. A feature is only as good as its worst case, so I engineered the worst case.

AI behind a proxy that never sees customer data

Every model call goes through a token-gated serverless proxy that strips customer details before anything reaches the AI. Trust isn't a marketing line here — it's enforced in the architecture.

Payments that respect the trader

The trial is genuinely card-free — no payment method collected; it drops to a free tier at day 14 rather than charging. And traders take card payments into their own account via Stripe Connect — OHNAR never sits between them and their money.

Outcome

OHNAR is live at ohnar.co.uk with early paying customers, and is refined continuously through feedback from working tradespeople. Because every public quote and invoice carries a "Sent with OHNAR" line, the product markets itself as it's used.

What I learned

Customers rarely ask for AI — they ask for less stress.

Features earn their place by removing a real loss of time or money, not by sounding impressive. And the hardest, most valuable product work was restraint — deciding what not to build, so OHNAR helps someone run the job and get paid without ever making them feel like an accountant.

What it took
User researchProduct design Mobile UXFull-stack build Payments & Stripe ConnectAI-assisted development