I build the software that runs yards, counters, lending desks, job sites, and front offices.
I find a way when others say it can’t be done.
That is thirty years of it — the ERP and field apps a business runs on, the
websites and apps out front, and the games, video, and hardware around the edges, all on
infrastructure I run myself. For businesses that move real equipment and real money, across
Canada and the US. Most of it is still running, which is the only review I really trust.
My motto: The more you learn, you learn the less you know.
What I take on
Small teams, real operations, systems that have to work on Monday. Monday is not negotiable.
Moving off Amazon WorkMail before it shuts down
AWS ends WorkMail on 31 March 2027. I move mailboxes, calendars and contacts to Google Workspace or
Microsoft 365, with the DNS, SPF, DKIM and DMARC done properly so nothing bounces and nothing lands in spam.
How a WorkMail migration goes.
Custom operations software
The system your business actually runs on when off-the-shelf doesn't fit: assets,
scheduling, billing, inventory, payroll, maintenance. I've built these end to end for
equipment rental, heavy machinery parts, mining, and private mortgage lending — including
the unglamorous parts, like bin locations, cron jobs, and the tax slips at year end.
Custom ERP development →
I know the iron, not just the software
For the equipment trades that is half the job. I know Caterpillar, Komatsu, and John Deere
by make, model, and model year, and the aftermarket cross-references a parts desk lives on —
the number that fits the machine in front of you, and the three other machines it also fits.
I did not read that in a manual. I built the catalogue and inventory systems that encode it,
scraping and structuring machine make, model, and type data across the industry to seed them.
When we talk about your yard or your parts counter, I already speak the language.
Equipment rental software →
Caterpillar, Komatsu, and John Deere are their owners’ trademarks. I am describing experience with the equipment, not any affiliation with or endorsement by them.
When the job leaves the screen
Software is not always where it ends. I already run IoT tracking on rented equipment out
in the field — a Raspberry Pi and cheap sensors rather than a vendor's locked box,
reporting where a machine is and what it is doing straight into the system that bills for it.
The tooling around the edges has caught up too: a drone turns a site survey or a roof
inspection into a morning's work, and 3D printing turns a one-off bracket or a discontinued
part into an afternoon instead of a six-week lead time. For an operation that moves real
equipment, that is the difference between a workaround and a fix.
Bring me on site and the work goes to another level
The systems that actually fit are the ones built by someone who watched the operation run.
If you are within reach, I would rather come to you — stand at the counter, walk the
yard, watch a shift, see exactly where the current tools slow people down — than build
from a spec and a screen share. It is the same habit as reading a river before I cast: I get
further by being in the place than by being told about it. Bring me in for the full picture
and what I build fits the way you actually work, not the way a requirements document imagined
it.
Mobile-first, because your customers are
Most people who find you are on a phone — often more than half, and for a lot of
businesses far more than that. So the phone is where I start a design, not where I check it
at the end. This site is built that way: laid out for a thumb first, opened up for the
desktop second, and the menu you are reading on your phone right now is the proof of it.
Small business websites →
When a browser is not enough, native: a React Native app in the field kept at real
feature parity with the web rather than "it mostly works", Cordova apps published to Google
Play and the App Store, or a progressive web app that installs to the home screen with no
store at all. Every screen is checked on a real device before it ships — a layout that
passes on a laptop and breaks on an iPhone is the most common bug in this business, and the
one I refuse to ship.
Legacy systems, kept alive and moved forward
A working system you can't switch off is not a problem to be replaced overnight. I modernize
old systems in place — legacy and new side by side, screen by screen, with
tenant isolation and role-based access added on the way through. Rental Pilot's old
CodeIgniter UI was retired that way in October 2026, without a day of downtime.
Legacy system modernization →
Things people actually enjoy using
Not everything is a form. I build the fun pieces too — a multiplayer game your customers
play on their phones, a prize wheel that runs on the warehouse TV, a touchscreen your sales
staff hand to a walk-in. I've been doing this since sales showrooms ran on Flash kiosks, and
the point has never changed: give people something they want to touch.
Have a go on a few of them.
Recruiting sites for athletes — filmed and cut
A site that puts a young athlete in front of the people handing out scholarships:
highlights, stats, schedule, and a way to reach them, with the game film shot and edited to
match. I built my first one in 1996 — for myself, to promote my own basketball —
and it ran in the Vancouver Province. One person doing both the page and the video means the
reel and the site actually fit together, and the whole thing is ready to send to a coach, not stitched together from three vendors and a template.
Video, end to end
Full editing to finish the package — highlight reels, product and promo pieces, the
cut that makes a site feel alive rather than a page of stock photos. Shot, edited, and placed by the same person who built the page, so the film and the site were made for each other.
I run all of it, including your email
Building the software is half the job. The other half is everything around it, and my
clients don't hand that to three other vendors: I look after it end to end.
- Hosting on AWS, set up from scratch: CloudFront, S3, EC2, Lambda, Docker, deploy pipelines. Cheap to run, patched, backed up with automated snapshots.
- Domains and DNS in Route 53, including your own web addresses for the apps I build.
- Email: mailboxes for your team, and moves to Google Workspace or Microsoft 365 (Amazon WorkMail closes in March 2027). Mail your systems send goes out through Amazon SES, signed with SPF, DKIM and DMARC so it lands in the inbox. Check your own domain.
- Monitoring: every production system is checked every five minutes and an outage pings my phone. The live board.
- Security: least-privilege access, strict security headers, secrets kept out of code and rotated, nothing ever hard-deleted. How I lock it down.
AI for your business, explained straight — live on Zoom
Your feed is full of people selling AI. Most of them have never shipped it. I run plain,
practical sessions over Zoom — for owners and teams who want to understand what these tools
actually do before they spend money on them. What Claude and the rest are genuinely good at,
where they will quietly burn you, and how to put them to work in the business you actually
run. No hype, no course to upsell you into — just an hour with someone who runs this in
production, answering the questions you came with. Book a session.
AI, put to work
Claude runs in the products I ship, on the websites my clients' customers use, and in how I build. Each one has a budget, a guardrail, and a person who sees what it said.
AI inside the product, kept on a short leash
Lend Pilot runs Claude in production to pull structured data out of the mortgage
documents a borrower uploads — pay stubs, NOAs, statements — so nobody retypes them. What
the model does not do is the math. Qualification, GDS/TDS, and the B-20 stress test
are deterministic code with the Canadian semi-annual compounding written into them, and the
underwriting readout reconciles stated income against the worksheet and shows its working.
In a regulated business, a number a model guessed is a liability. Extraction is a good job
for AI. Arithmetic isn't.
An agent setup built around my own codebases
I don't run a chatbot beside my editor. Each of my repositories carries its own
instruction file — the money rules, the deploy runbook, what is safe to touch in the legacy
application — so the assistant works to the project's standards instead of generic ones.
On top of that sit purpose-built agents I wrote: one compares a behaviour across the legacy
app, the React web app, and the React Native app and reports only where they diverge; one
re-verifies defects against deployed code rather than trusting a status column; one answers
questions against the production database and returns findings instead of dumping rows.
Most of it happens in a terminal
I run servers, deploys, databases, DNS and the AWS accounts from the command line: SSH into
the box, the AWS CLI for CloudFront, Route 53 and CloudFormation, rsync and git for deploys,
MySQL at a prompt, Xcode and Expo builds for the phone apps. Anything I do twice becomes a
script with its own safety checks, so a production deploy refuses to run from an unpushed
branch or a dirty tree. The AI agents work the same way, in the terminal next to me, under the
same scripts and the same rules. The tools.
Everything goes through Git
Every product I run lives in Git, and the history is the audit trail. The API and the phone app are
trunk-based; the web app and this site go through pull requests. Pre-push hooks refuse a push from the
wrong branch or a dirty tree, and every deploy script refuses to run unless the checkout is exactly the tip
of main, because a deploy should ship what was reviewed and nothing else. When several AI coding sessions
work at once, each one gets its own git worktree so none of them can overwrite another's files.
How I use Git.
Those agents also read each codebase as a graph of functions, routes and calls before they change
anything, which is why graph databases are what I am exploring next: Neo4j
for equipment that moves between sites, customer and supervisor chains, and code dependencies.
Nothing ships because a build went green
My hardest rule is delegated to an agent that refuses to approve a change on the strength
of a passing type-check, a successful build, or a curl that returned 200. It renders the
screen in a real browser or the iOS simulator, screenshots it, and reports what is actually
there. That single habit catches the class of bug that costs a day: the thing that compiles,
deploys, and is wrong on screen.
I was doing this before it was easy
The conversational routing I built at Brikers — Twilio Autopilot handling inbound sales
calls across voice, SMS, and email — went in around 2016, when it took real work to make a
machine hold up its end of a conversation. The tooling got better. The judgement about where
to point it is the part that took thirty years.
1st in League F of the AWS Agentic Football Cup, as of 10 October
Outside client work I coach a team of five AI agents in a league where the agents play the
football and you coach them in plain English. As of 10 October, five weeks in: 45 wins from 50 games and top of League F, with two weeks left before the winner goes to re:Invent. It tests the same thing as my
day job, with a league table as the judge. Every result in the lab.