Case Study

Lekker Accounting

A streamlined accounting platform for small businesses — invoices, quotes, expenses, bank statement imports, and reports, with an AI agent called LekkerBot that reads your receipts, builds your invoices, and keeps the books tidy while you actually run your business.

lekkeraccounting.com
Personal SaaS
Laravel + Livewire
Scroll to explore
The Problem

Small businesses are drowning in admin. The tools don't help.

Every accounting tool wants to be everything — payroll, stock control, forecasting, general ledger. Meanwhile the person actually using it is a freelancer or a two-person consultancy trying to send an invoice at 10pm on a Sunday, capture yesterday's fuel slip, and figure out how much VAT they owe this quarter.

Lekker Accounting started life as a generic multi-tenant invoicing platform with a landing-page CMS, four payment gateways, and a dozen admin modules nobody used. Useful, but heavy. So we gutted it — kept the core (invoices, quotes, clients, products, taxes, payments) — and built out the parts small businesses actually need: expense tracking with receipt scanning, bank statement imports, proper reports, a client portal, and a soft-delete recovery bin. Then wrapped an AI agent around the whole thing.

The result is an accounting tool you can drive two ways. Click around the UI like every other app — or open a chat with LekkerBot and say "invoice Acme for the logo work, R4,500, 14-day terms" or "here's the fuel slip for yesterday". The agent resolves the details, drafts the record, and waits for your approval before anything touches the database.

LekkerBot — The AI Agent

A chat-first agent that drives the whole app.

LekkerBot is a tool-using AI agent with a registered toolbox — create invoice, add line item, log expense, categorise, email client, look up vendor — and an execution loop that processes tool calls until the task is done. It knows your clients, products, default tax rates, banking details, and the sticky notes you always drop at the bottom of an invoice. It asks only what it doesn't already know.

Every AI call is metered against a credit balance — a pattern carried over from LekkerFlow, with a configurable markup over the underlying API cost, an admin top-up flow, and a full audit trail. You can see exactly what each conversation cost, down to the token.

The agent doesn't silently mutate your data. Every action it proposes is queued as a pending proposal and rendered as a preview card in the chat. A dedicated service applies them only once you click accept — and every change is fully audited, tagged with the source conversation so you can trace every row back to the sentence that created it.

ai-invoice-agent
# new conversation
You: invoice acme co for the landing page, R12k, due end of month
# agent resolves client + defaults
Found client: Acme Co (Pty) Ltd
Using default currency: ZAR, tax: 15% VAT
Due date resolved: 2026-04-30
# proposed invoice
Agent: Here's what I'll create:
> INV-00042 → Acme Co (Pty) Ltd
> Line 1: Landing page design & build — R12,000.00
> VAT (15%): R1,800.00   Total: R13,800.00
> [Create & Send] [Edit] [Discard]
# you click "Create & Send"
✓ Invoice INV-00042 created
✓ PDF generated, emailed to billing@acme.co
Credits used: 142   Balance: 9,858

Conversational invoice builder

Describe the job in plain English. The agent resolves the client, picks up your default currency, tax, and payment terms, and drafts the invoice for your approval. Back-and-forth for the edge cases — one shot for the easy ones.

Credits, metered & audited

Every token is logged against a credits ledger. Admin top-ups apply a configurable markup over API cost. Users see balance in real time, with a full history of what each conversation consumed and why.

Approval-first, no surprises

The agent never writes to your database directly. Every proposed invoice, line item, or email send is rendered as a preview card. Approve, tweak, or discard — full audit trail tagged with the source conversation on every change.

Multi-Tenancy

Every business gets its own isolated workspace.

Lekker Accounting uses a database-per-tenant model. Each business gets its own schema — clients, invoices, quotes, products, settings, everything. No row-scoping tricks, no shared-table workarounds, no chance of a data leak between tenants.

The central database only knows about tenants, domains, users, billing, and AI credits. Everything else lives inside the tenant. The onboarding wizard provisions the tenant database on sign-up, seeds sensible defaults (currencies, taxes, roles), captures company info and banking details, and drops the user into a ready-to-use workspace.

Onboarding wizard

A guided flow collects company info, logo, address, banking details, tax setup, and default currency — then provisions the tenant database and seeds defaults in a single step. By the time the user hits the dashboard, the first invoice is one prompt away.

Simplified subscriptions

The legacy app had Stripe, PayPal, Razorpay, and Paystack integrations, automated recurring billing, and an in-app store. We cut all of it. Subscriptions are now a plan, a start date, an end date, and a notification when it's due — with a manual cutoff the admin controls.

Expense Tracking

Three ways to capture an expense. None of them involve typing it twice.

Expenses are a first-class citizen, not an afterthought. Every expense has a vendor, a category, a currency, a gross/tax/total breakdown, an expense date, a reference, and an attached receipt or tax invoice. They move through a draft → pending review → approved workflow, and a needs invoice flag surfaces any approved expense where the tax invoice is still missing — so VAT season doesn't become an archaeological dig.

What makes it lekker is how the data gets in. You can type it into a form, drag a receipt onto the drop zone, or upload a full bank statement. The UI is the same; the parsing engines behind them are what change.

SOURCE 01

Manual entry

The classic form — vendor, category, date, amount, tax, currency, description. Auto-generated expense number, per-tenant currency list, per-tenant expense categories. Attach a receipt and you're done. For the 5 second "I know what I'm doing" case.

SOURCE 02

Receipt / invoice scan

Drag a PDF or photo onto the drop zone. The AI vision model reads the document and returns structured data: vendor name, tax number, invoice number, date, currency, gross amount, tax amount, total, line description. The data lands in a pending-review expense with the raw AI output and a confidence score stored alongside it — so you can audit what the model actually saw.

SOURCE 03

Bank statement import

Upload a bank statement (CSV or PDF) and the parser extracts every transaction, then creates a draft expense per debit. The import record tracks totals: total transactions, expenses created, transactions skipped, and a per-row error list. Each resulting expense keeps a reference back to its source import and its original bank-statement line, so reconciliation is trivial.

expense-review-flow
# user drops receipt.pdf onto the upload zone
File uploaded, queued for AI parsing
# AI parses the receipt
vendor_name: "Engen Garage Swakopmund"
date: 2026-04-09
amount: 820.00   tax: 123.00   total: 943.00
currency: NAD   confidence: 0.94
# expense created, status = pending_review
source: INVOICE_SCAN
category: (unresolved — awaiting review)
# user opens the detail view
Confirms vendor, picks category "Fuel & Travel"
[Approve] [Edit] [Reject]
# approved
✓ Expense EXP-00137 approved
✓ has_invoice = true, invoice_required = true
Audit: source=invoice_scan, reviewed_by=user#3

The same three sources feed LekkerBot too — you can drop a receipt into a chat and say "log this, it's fuel", and the agent runs the parser, assigns the category, and drops the expense straight into pending review.

Reports

Revenue versus expenses, at a glance.

The reports page answers the only three questions a small business owner wakes up asking: how much did I bring in, how much did I spend, and who do I owe a thank-you email to. A 12-month revenue-vs-expense chart, a year-to-date P&L, a top-10 clients table, and a top-10 expense categories table — all tenant-scoped, all FY-aware (financial year start month is configurable per workspace), and all exportable to Excel via Maatwebsite.

12-month trend

Invoices and expenses grouped by month, 12 months back from today, rendered as a paired bar chart. Zero-fill for months with no activity, so the shape of your year is honest — not distorted by missing data points.

FY-aware totals

YTD revenue, YTD expenses, and the delta — calculated from your tenant's financial year start month, not the calendar year. Namibian tax year starts in March; nobody wants to do mental arithmetic in April.

Top 10 clients

Biggest revenue contributors since the FY start, with invoice count alongside total. Instantly tells you which client deserves the next round of coffees and which one has quietly gone quiet.

Top 10 expense categories

Where the money actually goes. Joined from expense categories, sorted by total, counted by line item. Useful for pricing the next job — and for catching the subscription you forgot you were paying for.

The Platform

Every AI feature is also a real UI.

LekkerBot is the headline, but it sits on top of a proper, click-around-if-you-want accounting platform. Everything the agent can do, you can also do by hand — because sometimes you just want to open a form and type. And a few things you can only do by hand: the client portal, the recovery bin, and the settings screens.

Invoices & quotes

Full CRUD for invoices and quotes with line items, per-line taxes, discounts, status tracking, PDF generation via DomPDF, email delivery, and one-click conversion from quote to invoice. Sticky notes let you pre-fill terms, payment instructions, or thank-you lines.

Clients, products, taxes

A full contact book, product catalogue with categories, and configurable tax rates (inclusive or exclusive). Everything the invoice builder needs, with the AI agent picking up your defaults so you barely have to touch any of it.

Payments & reconciliation

Log payments against invoices, partial or full, in any currency. Automatic status updates (draft → sent → paid → overdue). Banking details live per-tenant so your bank account ends up on every invoice PDF without a single copy-paste.

Roles & permissions

A full role-based permission system scoped per tenant. Owner, admin, accountant, viewer — each with its own set of capabilities. A freelancer can keep it simple; a larger business can separate billing from sales without leaking data across roles.

Client portal

Every invoice and quote gets a public, tokenised URL. Clients can view, download as PDF, and approve quotes without needing an account. No login wall, no password reset emails, no support requests — just a link in an email that actually works.

Trash & recovery

Every core table uses soft deletes, and a dedicated trash view lets admins browse everything that's been binned — invoices, quotes, clients, expenses, payments — with one-click restore. Because "I think I deleted the wrong one" is a Monday morning inevitability.

Audit trail everywhere

Every change to every invoice, quote, payment, and client is tracked — who changed it, when, what the old and new values were, and whether it came from a human click or an AI agent action. Full model-level auditing, especially important for the AI actions.

Real-time & async

WebSocket-powered live updates push into the UI when an invoice is paid or an email bounces. PDF generation, email sending, and AI calls all run on queue workers so the UI stays snappy regardless of how chatty the agent gets.

The Stack

Laravel, Livewire, and a proper tenant per customer.

Built on Laravel with Livewire for the UI, database-per-tenant multi-tenancy, role-based permissions, media management, PDF generation for invoices, and WebSocket-powered real-time updates. The AI layer uses a large language model with vision capabilities, wired through a credits ledger adapted from LekkerFlow.

Laravel
Livewire
PHP
Tailwind CSS
MySQL
Multi-tenancy
REST API
Automated Testing
Responsive Design
Real-time Updates
Laravel
Livewire
PHP
Tailwind CSS
MySQL
Multi-tenancy
REST API
Automated Testing
Responsive Design
Real-time Updates
AI Vision
Permissions
Media Library
Audit Logging
PDF Generation
WebSockets
Cloud Storage
Excel Export
Queue Workers
Authentication
AI Vision
Permissions
Media Library
Audit Logging
PDF Generation
WebSockets
Cloud Storage
Excel Export
Queue Workers
Authentication

Got a SaaS idea that needs building?

We build products with AI integrations, multi-tenant architectures, and the kind of invoicing that doesn't make you want to quit at 10pm on a Sunday. Let's talk.