Melbourne · custom AI engineering

Custom AI systems, built for your business.

Not a chatbot bolted on. Not a licence nobody uses. Systems engineered around how your business actually runs — invoicing, finance, reporting, marketing — built into your own systems by people who've done it before. You own every line of it. Or, if you'd rather, we keep running it for you.

Every demo on this page is real and runs in your browser
What we build

Built around your business, not bought off a shelf.

Every business runs on a few jobs that happen by hand, on repeat, from the same systems. We build the system that does them — designed for how you actually work, not a generic tool you bend to fit. These are the ones we build most often.

Invoice automation

Supplier invoices arrive by email and get typed into Xero or MYOB by a person. We read them, check the ABN, catch duplicates, and create the bill — with a human only for the odd ones.

Finance automation

Reconciliations, approvals, month-end, chasing payments. The finance jobs that happen every week in a spreadsheet, turned into something that happens on its own and tells you when it needs you.

Reporting automation

The weekly sales report, the board pack, the numbers someone assembles from three exports every Monday. Built once, then delivered on a schedule to the people who need it. Our most-requested build.

Marketing & agency automation

For agencies and marketing teams: client reporting pulled from every platform into one place, lead handling, content scheduling, campaign data that updates itself. We've built agency platforms end to end.

Documents & contracts

Contracts reviewed for the clauses that matter, documents generated from templates, records kept in order. The paperwork that currently waits for one busy person.

The thing specific to you

Every business has one job nothing off the shelf does. We scope it, build it in your systems, and it's yours. If it genuinely needs AI, we use it. If it doesn't, we won't pretend it does — that's how you end up with a chatbot nobody asked for.

How an engagement runs

Scope it. Build it. You own it.

We scope before we quote, quote before we build, and hand over everything. You own it all — the code, the logins, the systems. We hold nothing. And if you'd rather we stay on and keep it running, that's a job we do too.

Engagement Setup Wizard_×
1 · Scope 2 · Build 3 · Keep it running

Two weeks inside your business. A list of what's worth doing.

We sit with the people doing the work and map how it actually happens — not how the process document says it happens. You get an itemised list of everything worth building, each item scoped and costed, in the order we'd build them.

  • Workflow mapping across two or three functions, in interviews with the people doing the work
  • The current manual cost, in your hours and your dollars
  • One quick win small enough to approve on the spot
  • You decide what, if anything, to build. No obligation past the sprint.

Built to finish. Yours from day one.

You pick items from the list. Each is built for what we quoted, inside your own systems and logins — never ours — and handed over working, tested, and documented so anyone could pick it up. We don't keep a copy, a credential, or a hold over any of it.

  • Scope agreed in writing before anything starts
  • Your systems, your accounts, your code — we hold nothing
  • Thirty days of fixes included on everything we build
  • Built by the people you met, not handed to someone else

You own it. If you want, we'll look after it.

Everything we build is yours, full stop. But automations break quietly when the systems around them change, and someone has to be the name on it. If you'd like that to be us, Care is a monthly plan where we watch it, fix it when it breaks, and improve it over time. Entirely optional — plenty of clients run it themselves — and you can stop any month.

  • Watch — we monitor it and fix it when it breaks
  • Improve — plus a round of improvements every month
  • Embed — we act as your automation team, ongoing
  • Thirty days notice to stop, always
Step 1 of 3
Why hire us instead of an employee

You could hire someone. Here's why people call us instead.

Most businesses that want this work done try to hire for it first. It's an expensive role to fill, the good ones are hard to find, and you're paying a salary while they learn your business. But the bigger problem is simpler: automation work comes in projects. A salary doesn't.

Hiring your own
  • TIMEThree to six months to find someone and get them productive — if you find them. AI and automation roles sit open for a long time.
  • COSTSalary, super, leave, equipment, a recruiter's fee, and payroll tax — every year, whether there's work that month or not.
  • BETWEEN PROJECTSStill on payroll. Once the first few things are built, what's left is maintenance — and a person hired to build gets restless doing it.
  • YOU GETOne person, one set of skills, learning your business on your payroll.
  • RISKIf it's the wrong hire, you find out six months and a lot of money later.
  • IF THEY LEAVEEverything they built leaves with them, undocumented.
Bringing us in
  • TIMEWe start within a couple of weeks. First thing usually live inside two months.
  • COSTYou pay for the project, not the seat. No super, no leave, no recruiter. When the build is done, the cost stops — unless you want us to keep looking after it.
  • BETWEEN PROJECTSWe're not on your books. We help you scope what's worth doing next, so there's always a plan — and you bring us back in when a project is ready.
  • YOU GETSenior engineers who have built this exact kind of thing before, for less than the cost of one hire.
  • RISKOurs. You know what each piece costs before we start, and if it takes us longer, that's our problem.
  • IF WE LEAVEYou can stop with thirty days notice. Everything is built in your systems, documented, and stays yours.
And if the work grows to the point where you do want someone in the role full-time, we'll help you get there — writing the job description around what's actually been built, sitting in on the technical interviews, and handing over to your new hire properly. Start with us, hire when it makes sense, and don't pay for a seat before the work exists.
Why most AI projects go nowherethree findings · one conclusion×
95%of AI pilots in business made no difference to the bottom lineMIT, 2025
more likely to succeed when an outside team builds it and someone is clearly responsible for it, versus doing it in-houseMIT, via NBH
Nobody owns itthe most common reason: once the demo is over, it's nobody's job to keep it workingNBH mid-market analysis, 2026

That's why we don't run pilots, don't resell someone else's tool, and don't hand over a slide deck. We build the system for your business, in your systems, so you own it outright — and if you want someone to stay the name on it, that's us. A millwright is the tradesperson who builds the machinery and keeps it running. That's the job, and it's the name.

See it working

Don't take our word for it. Press the buttons.

Six working systems, on made-up data, running in your browser right now. Each one is a smaller version of something we've built for a real business. If you're technical, the code is under each tab. If you're not, just watch what happens.

Millwright — Demos6 demos · press 16 to switch_×

Your business rules, written the way you'd say them

Every business runs on rules like "anything over $5k from a new supplier needs the CFO to sign off" — usually kept in one person's head. Type one in plain English. We turn it into a flowchart, show the exact logic that would run, and test it against six sample invoices so you can see what would happen.

DECISION FLOW
DEFINITION · WHAT GETS DEPLOYED json
TEST · SIX SAMPLE EVENTS THROUGH THE RULE
EventSupplierAmountPathOutcome
SHOW THE PARSER parseRule() · read from the live function
idleA constrained grammar, not a chatbot. If it can't parse a clause it says exactly which one.

Cleaning up a messy customer or supplier list

Fourteen supplier records typed in by five different people over three years — same companies, spelled five ways. We work out which ones are actually the same business, check every ABN against the tax office's own formula, and produce one correct record for each.

RAW RECORDS 14 rows
#NameABNEmail / phone
RESOLVED

Press “Resolve” to match and merge.

SHOW THE MATCHER jaroWinkler() and abnValid() · read from the live functions
idleThe ABN check is the real ATO weighting algorithm. One record in here fails it on purpose.

Reading a contract for the things that bite

A made-up supply agreement. We pull out the terms you'd actually want to know — how long it runs, whether it auto-renews, who's liable for what, how to get out — and flag the clauses that usually cost people money, with a plain reason for each.

AGREEMENT 12 clauses
EXTRACTED

Press “Analyse” to extract terms and flag risk.

SHOW THE EXTRACTION RULES extractTerms() · read from the live function
idlePattern rules here; in production this is where a language model earns its keep — with these rules as the guardrails.

Invoices that file themselves

Supplier invoices land in your accounts inbox and somebody types them in. Here, five emails arrive. We read each one, pull out the invoice number, amount and ABN, check it's not a duplicate you've already paid, and create the bill — or hold it for a human if something looks off.

Press “Process next” to parse the first email.

5 queued 0 created · 0 flagged · 0 duplicates

The monthly report that builds itself

A month of transactions comes in from the accounting system. We check them, catch the mistakes, add them up by division, draw the chart, build the table, and send the pack to the board — the job that takes someone three days every month, done in about two seconds.

1 EXTRACTLedger
2 VALIDATERules
3 AGGREGATEP&L
4 RENDERPack
5 DISTRIBUTEBoard
RUN LOG 0 ms
Press “Run month-end” to execute the pipeline on a synthetic ledger.
LEDGER 0 rows
DateAccountBUAmount
SHOW THE AGGREGATION CODE THIS DEMO IS RUNNING aggregate() · read from the live function
idle Synthetic data · runs entirely in your browser · nothing is sent anywhere

It keeps running, or you hear about it

Automations break quietly — usually when a system they rely on changes something. Everything we build watches itself: if a run fails, it retries, alerts us, and we fix it. Press the button to break one on purpose and watch it recover.

Next run: uptime 100%median recovery —
all healthy
Who

Built by people who've built it before.

No salespeople, no offshore team, no handing you off to a junior after you sign. The people you talk to are the people who build it — and, if you keep us on, who pick up the phone when something breaks.

T

Taylor

CO-FOUNDER · PLATFORMS & INTEGRATION

Has built reporting automation, finance workflows, agency platforms and internal tools for mid-sized businesses — on Microsoft 365, Xero, Supabase and the web. Years spent inside companies turning the jobs people had stopped questioning into systems that run on their own.

H

Hunter

CO-FOUNDER · AI SYSTEMS & DATA

Has built document-reading pipelines, invoice and approval workflows, and the data layers that feed live reporting — connecting accounting, CRM and operations systems that were never meant to talk to each other. The engineer who works out why a process breaks at 2am and builds it so it doesn't.

What we build with — inside your accounts, never ours
  • Microsoft 365
  • Power Automate
  • SharePoint
  • Dynamics 365
  • Xero
  • MYOB
  • Supabase / Postgres
  • Next.js
  • GitHub Actions
  • Azure
  • Claude API (Anthropic)
  • OpenAI API
  • Power BI
Start here

Talk to an engineer.

Twenty minutes, no pitch. Tell us what your team does by hand and we'll tell you honestly whether we can make it run itself. If it fits, two weeks later you'll have a plain list of what's worth doing and what it would cost.

Contact×
EMAIL
hello@millwright.com.au
BASED
Melbourne, VIC · on-site across metro, remote across Australia
REPLY
Within one business day, from an engineer
FIRST CALL
20 minutes · no pitch · we just ask how the work happens today

No contact form. Email gets read by a person and you get a real reply.