nuzairb@gmail.com— press E to copy
Bilkora

Bilkora

WORK DONE//Bilkora

Invoicing built for Australian freelancers.

ROLE IN PROJECT:Solo Designer & Developer
PROJECT YEAR:2026
DURATION:4 months
WORK DONE:Product Design & Full-Stack Development
Invoice Editor — split-pane layout with live preview, GST engine, and ATO compliance checks
Invoice Editor — split-pane layout with live preview, GST engine, and ATO compliance checks

THE PROBLEM

Australian freelancers and tradies get caught in a repetitive loop: generate an invoice, attach it to an email, chase payment, repeat. Most tools built for this workflow are either overly complex — designed for accountants, not operators — or stripped of features that matter in practice: GST, ATO compliance, credit notes, payment history. The few Australian-specific tools that exist make you set up your business profile before you can do anything. Bilkora starts at the invoice.

Dashboard — revenue, outstanding balances, and payment history at a glance
Dashboard — revenue, outstanding balances, and payment history at a glance

THE SOLUTION

The central design constraint set before writing a single line of code: the product is the onboarding. No wizard. No welcome screen. No setup checklist. You sign up and land directly on a new invoice. Every feature solves itself from inside the editor — adding a customer slides a drawer in from the right, missing your business name prompts a one-tap save, the ATO compliance engine runs six passive checks per invoice and surfaces plain-English results without ever blocking send. By the third invoice, most users have a complete business profile, a customer list, and a product catalogue — not because they were asked to fill it in, but because they naturally did it while working.

DESIGN PHILOSOPHY

The non-negotiable: never block, always advise. The ATO compliance engine runs six checks per invoice — ABN format, GST registration threshold, invoice number sequence, due date, currency, totals — and surfaces results in a plain-English panel. But send is always enabled. The software is not an accountant. It is a tool. Users decide.

The other constraint was the inline add pattern. Every action that could interrupt the invoice flow happens in a right-side drawer instead of a redirect. Adding a customer, creating a product, editing your sender profile — none of them take you away from the invoice. This came from the first time I tested the editor and realised leaving the page to add a customer felt completely wrong.

ARCHITECTURE

Next.js 15 App Router handles routing and server components. The authenticated app lives under (app)/ with a persistent sidebar. Auth routes are isolated under (auth)/ with a two-column layout. The public free invoice generator at /invoice-generator requires no login and feeds into the signup funnel via localStorage carry-through.

Supabase handles the full data layer: PostgreSQL with row-level security scoped by org_id, Auth for email/password login, and private Storage for invoice attachments. The RLS policies ensure every query is automatically tenant-scoped — no manual where org_id = ? in application code.

Server actions in src/actions/*.ts handle all mutations: validate, call Supabase with the session client, return typed results to the component. No API routes for mutations. PDF generation runs server-side via @react-pdf/renderer, streamed from /api/invoices/[id]/pdf. Resend handles email delivery with a pre-built template. Vercel cron jobs handle two background tasks: daily automated reminders at 9am with escalating language and per-invoice pause, and a 30-day account deletion cleanup.

KEY FEATURES BUILT

Invoice editor — Split-pane layout (55/45 desktop, tab-switched on mobile). Live preview updates on every keystroke. Auto-save every 30 seconds. Line items support quantity, unit price, GST toggle, per-line discount, and drag-to-reorder via @dnd-kit.

GST engine — Per-line calculation with correct Australian rounding, a transparent breakdown in the preview, and an optional total-level toggle.

ATO compliance — Six passive checks displayed in a modal with plain-English explanations. Non-blocking by design.

Sender profiles — Multiple business identities per account. Select directly from the invoice "From" section.

Email and reminders — Pre-send review with editable subject/body, CC field, and attachment opt-in. Automated reminder schedules configurable per invoice with a pause toggle and audit log.

Credit notes — Proper credit notes (CN-0001 numbered) rather than negative-total workarounds. Issued from the invoice detail page via a slide-in sheet.

BAS calculator — Quarterly Business Activity Statement summary that mirrors the ATO form layout. Printable. A calculation aid, not a lodgement tool.

Free invoice generator — Public, no login required, full split-pane editor. If a user clicks "Save to Bilkora", their draft carries through to the signup flow via localStorage.

WHAT I LEARNED

Building a product solo forces discipline. When you design, build, and test the same feature, you feel every rough edge directly. The inline add pattern came from the first time I tested the editor and realised leaving the page to add a customer felt completely wrong.

The progressive profile system is the thing I am most satisfied with. It solves the cold-start problem without onboarding friction. Most products ask you to fill in your business details before you can use them. Bilkora just watches what you type on your first invoice and asks once, quietly, whether to remember it. By invoice three, you are set up.

The technical depth came from the compliance requirements. Writing the GST engine with correct Australian rounding, building the ATO compliance checks, and learning how Supabase RLS can replace a whole category of application-level access control — that was the backend gap I had been working to close.

OUTCOME

Phase 1 shipped complete in April 2026. All MVP features built and live on production Supabase. The product is usable end-to-end: sign up, create invoices, send with PDF, track payments, manage contacts and products, run BAS, and handle the full Australian compliance layer.

Phase 1.1 is scoped: Quotes and Estimates with "Convert to Invoice", improved dashboard analytics, BAS improvements, skeleton loaders, and keyboard shortcuts.