
About
I’m Josh. Here’s how I got here.
I build real things with AI and write about how they actually get made. I’ve worked with these tools daily for three years, and the interesting part isn’t that I use them — everyone uses them. In 2023 I was copying answers out of a chat window. Now agents I built write code, ship it to a test build, and have a pull request and a preview waiting for me when I wake up — and I am the one who decides whether it goes live.
2008
Taught myself to build, in Seattle
Websites and SEO for small businesses, self-employed, figuring it out as I went. Everything technical I can do today traces back to this — self-taught then, and still the way I pick up anything new.
2014
Joined a university — in design, not engineering
Design and content first, then financial aid communications: turning regulations most people find impenetrable into something a student could act on. Unglamorous, and the best writing training I have had.
Three years with LLMs
2023
Prompting. Just prompting.
ChatGPT, then Claude, every day — but the shape was a chat window and a lot of copy-paste. I was asking for answers and pasting them somewhere myself. Most people I talk to are still here, and there is nothing wrong with being here. It is just not where it ends.
2024
Became an engineer at work — with the tools already in hand
Ten years after walking into the university, I moved into engineering: Oracle SQL, Pro*C, Java, HTML, CSS, Banner, Argos — the systems that quietly move real money to real students.
2025
Stopped asking for answers and started handing over the work
The shift from chat to agents: the model reads my actual files, runs the commands, opens the pull request. That changes what you are for. I stopped being the person typing and became the person deciding — the architect, with the agents as implementation leverage.
Early 2026
Built pipelines instead of prompts
Spec, then plan, then build, then QA, then ship — as named steps I invoke, not a conversation I steer. Reviews run as panels: the same work read by a product lens, a design lens, an engineering lens, and I arbitrate where they disagree. One research run put twelve agents on a question in parallel and came back with a cited report.
Mid 2026
Gave it memory — one file, then a whole brain
It started as a single file the agent reads before anything else. It became a linked wiki of every project, decision, and person I build for, plus a graph I can browse from my phone. Now a fresh session already knows who I am. I tested it cold once: six of ten questions right, citing where each answer came from, and the misses were things I had never written down.
Now
Running a team that works while I sleep
Scheduled agents with names and job descriptions: one tidies the knowledge base nightly, one sweeps it weekly for rot, one drafts the day’s writing before I wake up. Each has a trust level, and the ceiling is deliberate — they work in development, they push to a test build, and they hand me a pull request and a preview link. I read it and I decide what goes live. Making that last step automatic would be easy, and I do not want it: the point of the whole setup is that judgment is the part I keep.
What I can do, and what proves it
Nothing on this list is here because I have read about it. Each one came out of a build that needed it, and each one opens to what I made with it and something you can click. Most of those links go to the apps and the arcade — those are not a separate showcase, they are the same evidence from a different angle. Every one of them took some of these skills to make.
Working with AI
Three years in, almost none of this is prompting any more. Each one came out of a build that needed it.
Context engineering
Designing what the model knows before it is asked anything — the file it reads first, and what that file points at.
2 receipts
Context engineering
Designing what the model knows before it is asked anything — the file it reads first, and what that file points at.
I got tired of re-explaining who I am at the start of every session, so I built a linked knowledge base with a documented retrieval policy: every note describes itself, and one command returns the whole map. Every AI session I run reads it first, on my laptop, in the cloud, and on my phone. I tested it cold once and it answered six of ten questions from the notes alone, citing where each answer came from — and the four it missed were things I had genuinely never written down.
Multi-agent orchestration
Splitting one question across parallel agents with different angles, then synthesising what comes back.
2 receipts
Multi-agent orchestration
Splitting one question across parallel agents with different angles, then synthesising what comes back.
I turned a research method Stanford published into a tool I can invoke. It runs fourteen agents on one question — five perspectives interviewing each other against live search, then eight fact-checkers — and I pointed it at company earnings. Every report on the Market Storm section came out of it, and each one prints how many of its own claims survived checking.
Adversarial verification
A finding does not count until independent agents have tried to prove it wrong.
2 receipts
Adversarial verification
A finding does not count until independent agents have tried to prove it wrong.
A model asked to check its own work agrees with itself, so the instruction has to be to refute, and the agents have to be different ones. On the Microsoft report it changed the headline rather than adding a caveat: the widely repeated line was that capex doubled while free cash flow stayed positive, and free cash flow had actually fallen. I have also run it on my own finished research and lost — seven of eight load-bearing claims came back corrected, and I shipped the corrections.
Directing a build, and rejecting the output
Asking for work, then measuring whether it was any good instead of accepting it because it looks finished.
2 receipts
Directing a build, and rejecting the output
Asking for work, then measuring whether it was any good instead of accepting it because it looks finished.
I asked for ten image templates and kept four. What settled it was rendering both versions side by side rather than arguing about them, and measuring an instinct instead of acting on it — I thought the type would look wrong on a phone, and measuring showed a card renders at 341 pixels there, where 69% of the words were unreadable. The six I cut had each cleared a quality bar the AI wrote for itself.
Graduated autonomy
Every scheduled agent has a trust level. They reach a test build and hand me a pull request; production is a decision I make.
2 receipts
Graduated autonomy
Every scheduled agent has a trust level. They reach a test build and hand me a pull request; production is a decision I make.
I run scheduled agents with names and job descriptions — one tidies the knowledge base nightly, one sweeps it weekly, one drafts the day's writing before I wake up. The ceiling is deliberate. Making that last step automatic would be easy and I do not want it, because judgment is the part I keep.
Engineering
Self-taught since 2008, an engineer by title since 2024. These are the ones with something running at the end of them.
Full-stack product build
Taking something from an idea to a working product other people can open — interface, data, deployment, the lot.
3 receipts
Full-stack product build
Taking something from an idea to a working product other people can open — interface, data, deployment, the lot.
Most of what is in the gallery is this: a restaurant platform with a menu, a cart and a checkout; a journalling app wired to a language model; a focus timer with session analytics, a twelve-week heatmap and an achievement system. Different problems, same loop.
Payments and third-party APIs
Wiring a real commercial system — a payment provider, a live product catalogue — into a product that handles money.
2 receipts
Payments and third-party APIs
Wiring a real commercial system — a payment provider, a live product catalogue — into a product that handles money.
I built ordering for a friend's catering business against his real Square catalogue rather than a copy in the codebase, because his kiosk already runs on it and any second copy is one that goes stale. That meant full support for his customisations — twenty-two modifier lists, with the prices resolved on the server so the browser cannot name its own.
Security auditing and hardening
Going looking for the hole before someone else finds it, and reading a platform's defaults literally instead of trusting what they are called.
2 receipts
Security auditing and hardening
Going looking for the hole before someone else finds it, and reading a platform's defaults literally instead of trusting what they are called.
Before publishing an article about my own tools I stopped and asked whether they could be attacked, and found my live task list — forty-three items — being served to anyone with the URL. I closed it in about sixty seconds with a reversible fix, then built the proper gate, and only restored the data after watching production actually deny the request. On the restaurant checkout, an audit nobody asked for found the server taking the charge amount from the browser.
Debugging what only breaks in production
Finding a fault that cannot be reproduced on your own machine, by reasoning about where the code actually runs.
2 receipts
Debugging what only breaks in production
Finding a fault that cannot be reproduced on your own machine, by reasoning about where the code actually runs.
An order total read $0.00 on the deployed build and was correct locally every time. My machine runs one long-lived process; the deployed one does not share memory between requests, and the mock state was sitting in it. Same category as a ten-minute build hang that turned out to be pages calling a live API while they were being built.
Automation that survives its own failure
Any job that can half-finish has to look for its own wreckage before it looks for new work.
2 receipts
Automation that survives its own failure
Any job that can half-finish has to look for its own wreckage before it looks for new work.
Teaching a scheduler to publish without me took six failures, and five of them reported success. The worst flipped an article halfway, failed, and then went invisible to every later run because it was no longer due — reporting "nothing to do" over a permanently stuck state. The fix was a reconcile pass. It now opens and merges its own pull request with nobody watching.
Regression tripwires
A cheap test that always runs, fenced around the part that must not change, so everything else can move fast.
1 receipt
Regression tripwires
A cheap test that always runs, fenced around the part that must not change, so everything else can move fast.
At work this guards financial aid arithmetic — twenty-three assertions on every single change, because that is the part which is not allowed to be wrong. The same pattern runs on this site: a test refuses an article dated in the future, and another one refuses to ship a post with missing images, which immediately found two already-published posts with no social card.
Physics, canvas and real-time rendering
Maths that has to hold up sixty times a second — orbital mechanics, cloth, collisions.
2 receipts
Physics, canvas and real-time rendering
Maths that has to hold up sixty times a second — orbital mechanics, cloth, collisions.
A Mars transfer simulation that models a real Hohmann transfer window, and a cloth simulator running Verlet integration with constraint relaxation and tearing. Both are hand-written on a canvas with no engine underneath, which is the only way I would have learned what the maths actually does.
Game development
Game loops, collision, input, audio and the feel work that separates a demo from something worth playing.
4 receipts
Game development
Game loops, collision, input, audio and the feel work that separates a demo from something worth playing.
The arcade is five cabinets. Flappy Bird Primo is the one I would point at first: fifteen modules, swept collision detection so nothing tunnels through a pipe at speed, and a full juice catalogue — particles, screen shake, a slow-motion beat on a near miss. Two of the cabinets are my son's.
Design and product
Design and content was my first job at a university, before engineering. It is the half of this I had a head start on.
Design systems and theming
One set of named colours the whole site reads from, so a single switch re-themes everything without hunting for stragglers.
2 receipts
Design systems and theming
One set of named colours the whole site reads from, so a single switch re-themes everything without hunting for stragglers.
This site runs on semantic tokens rather than colour values scattered through components, which is what makes dark mode a switch instead of a rewrite. The palette is deliberately warm charcoal rather than black, because cold black would throw away the identity the light theme has.
Accessibility as a constraint that improves the design
Holding every colour to a contrast standard in both themes — and letting that push the design somewhere better.
2 receipts
Accessibility as a constraint that improves the design
Holding every colour to a contrast standard in both themes — and letting that push the design somewhere better.
The arcade's bright red, yellow and blue fail contrast on a paper background, so every text use points at a darker ink. In dark mode those inks flip to the bright neon, which pops on the dark cabinet. A light-mode constraint turned into a dark-mode feature — the rule made it better rather than duller.
Keeping AI-built work from looking AI-built
Running a rule-based auditor over finished pages, and writing down every place I decided it was wrong.
1 receipt
Keeping AI-built work from looking AI-built
Running a rule-based auditor over finished pages, and writing down every place I decided it was wrong.
The first sweep lit up with every generated tell I had reached for by instinct: coloured rails on cards, tinted sub-panels, cramped table frames. I reworked each into plain headings, dividers and coloured text. Where the tool was wrong I overruled it by name, in writing, scoped so the same pattern elsewhere still gets caught — no suppression without a reason, and "intentional" is not a reason.
Finding the real constraint behind a request
Working out what someone actually needs, which is often not the feature they asked for.
1 receipt
Finding the real constraint behind a request
Working out what someone actually needs, which is often not the feature they asked for.
I asked for my task board to be drag-reorderable and it already was. The real gap was different: card order lived only in each device's storage, so "make it draggable" and "set the order for me from somewhere else" were never the same feature, and only one of them was missing. Same instinct that turned "it flings when I drag slowly" into a diagnosis rather than a patch.
Shipping and teaching
The half that is not building. It took me longest and it is the part that actually compounds.
Building for a real client
Their constraints, their data, their sign-off — and the parts you decide not to ship.
2 receipts
Building for a real client
Their constraints, their data, their sign-off — and the parts you decide not to ship.
Robert has been a friend since high school and runs a Japanese catering business. Two calls on that job were mine rather than technical: I deleted a loyalty panel that promised points nothing awarded, and removed a review funnel that routed happy customers to Google and unhappy ones to a private form. Both were working features. Neither was honest.
Writing in public
Publishing how the work actually went, including the parts where I was wrong.
2 receipts
Writing in public
Publishing how the work actually went, including the parts where I was wrong.
Eleven articles so far, all about my own builds, and the ones people respond to are the ones where something broke. The rule I write to is receipts over claims: if I cannot point at the thing, I do not say it.
Teaching the loop to someone else
Handing over the method rather than the finished thing — the test being whether they can do it again without you.
3 receipts
Teaching the loop to someone else
Handing over the method rather than the finished thing — the test being whether they can do it again without you.
My son wanted to make a game. I could have built it for him, and instead I taught him the loop: describe it, get something playable, look at it, ask for the next thing. He built a kart racer — his features, drive-over powerups and coins that make you faster — and then a second game on his own, which is the part that shows it transferred. The hard bit is not taking the keyboard.
One thing about the writing
I use an AI model to help me write these posts. Given everything above, it would be strange if I didn’t — and stranger not to say so. The experiences are mine: the builds, the decisions, the dead ends, the things I got wrong and fixed happened at my keyboard, on real projects.
I read and approve every word before it goes live, and I’ve cut drafts that framed me as something I’m not. The receipts are real. The words had help. Both can be true at once, and I’d rather tell you than have you wonder.
If you’re building with AI too and want to compare notes, I’m easy to find on LinkedIn.