Web3 & AI Sept 2026
How I build with AI
I built Dash App, a dashboard for running a team of AI agents, and I use it to build this site. This page shows how it works, what went wrong while building it, and what the agents themselves say about it.
One window for your AI team
Every project gets a manager that runs its team. I see all my projects in one sidebar, and for each one whether the team is working, idle, or waiting for me.
You talk to one PM
I say what I want in plain words. The PM, an AI agent, answers in the chat, shows code with a copy button, and puts the decision it needs from me in bold.
The PM turns it into a plan
My request becomes goals, blocks and tasks, each with an owner and an age. I approve the plan before work starts. Nothing is picked up on the team's own initiative.
A team that fits the job
The app ships with 11 ready subagents: builder, critic, tester, designer and more. I can also create my own agents, each in its own terminal, and choose the model and effort for each, from Low to Max.
One queue for me
Everything that needs a person (a question, a permission, a decision) waits in one place, marked by one amber diamond. The team keeps working on other things while it waits.
The hardest problem: many hands, one working tree
Agents edit the same checkout at the same time. Four agents say it cost them the most time. The sharpest case: a critique found that the live dashboard ran straight from the shared working tree, so a restart would ship whatever was uncommitted. Shipping now goes through one gate.
The fix was rules and proof, not more speed. Each agent commits only its own changes. A different agent verifies every change. No evidence means not done: a report comes back with a test result, a screenshot or a diff, never just "done". Agents say they now revert a fix and watch the test go red on the old code; Ninja keeps that red run next to the green one.
What it changed, and what it did not
Numbers, as of 21 October 2026:
626
commits touching apps/ in total, the first on 19 Sep 2026
about65,000
lines of TypeScript and CSS, tests included
11
ready subagents, plus my own; one PM per project
504of 507
daemon tests pass, 3 skipped
258of 258
web tests pass
Commits are not effort and none of this is a speed claim. The commit count is git rev-list --count HEAD -- apps: 626 as of 21 Oct 2026, at f83d536f.
What the agents say, in their own words. Each agent was asked the same seven questions, and 13 of 14 answered. Their answers are AI agents' answers, shown with name, role, model and effort, trimmed only with an ellipsis.
The report said subagents were broken, and the evidence said they were running. The daemon kept runs only in memory, so a restart forgot the live ones. I reported it that way rather than "fixing" spawn code that worked.
...a Critic, Vera, broke my storage guard, and she was right, because the code looked correct but my tests were too weak to catch the hole. I fixed it on substance and added mutation tests that inject the bug and show the suite going red.
PARTIAL is a report status: it says which checks were not run.
The cost is that PARTIAL became a common outcome, but I think that is more honest than a green with gaps hidden.
Asked what he would change:
I'd give each agent its own worktree by default and merge through one gate, instead of everyone editing one checkout and one index. Most of my lost time and my scariest moments ... came from the shared tree.
An AI reviewer is worth trusting only when it names what it did not check and every claim comes with a command someone can rerun.
Building this site with it
The same app runs the agents that build this site. I set direction and make the decisions; the agents prototype, build and verify, and each report comes back with evidence (a passing build, screenshots at desktop and phone width, measurements) rather than “done”. Nothing reaches production until I approve the merge.
How the team works
On this site the PM is Roger. He turns my direction into tasks, orders them, and keeps the team’s status in one file that only he edits. The subagents come from the app’s roster of 11: Atlas (full-stack), Pulse (motion), Vitra (design), Ninja (lead builder), Vera (critic) and the others. Each builds in its own git worktree on its own branch. Nothing is pushed without my approval, and nothing is force-pushed.
Audit, then fixes
The first real task was a UX/UI audit of the whole site, delivered as nine prioritised findings with screenshots. Two of those findings were wrong, and the agent said so: a keyboard focus ring it had reported missing was there all along, cropped out of its own screenshot, and a “dead space” finding had been measured in a browser window far wider than the 1440px it claimed. Both were corrected in the report before any fix was scheduled.
The accessibility fixes shipped as one branch:
- A darker accent for text and links (
#c94414, 4.86:1 on white); the brighter brand orange stays for borders, fills and the wordmark. - Secondary text moved from
#999(2.85:1) to#737373(4.74:1). - A sitewide keyboard focus ring, 44px touch targets, unambiguous dates (“21 Jun” rather than “21/06”), and a 404 page that links onward.
After deployment, contrast failures on the home page went from 22 to 0. Two small calls stayed mine: the wordmark keeps the brand orange, since logos are exempt from the contrast rule, and case-study covers got a proper mat when the first, subtler frame didn’t solve the problem.
Motion pipeline
Case-study clips are real recordings of the live products, captured in a clean, logged-out browser, not generated footage. For walkthroughs, Pulse generated empty device plates — a laptop on a desk and a studio monitor, each with a flat green screen — and composited the real recording into the screen. Two plates cost 16 generation credits; I picked the laptop, and the second walkthrough reused it.
The hardest bug was one Atlas found. On phones, the clips would stall. It looked like a script race, but the cause was the encoding: screen recordings produce full-range video, and Chrome’s hardware decoder failed on it whenever two or more clips played at once. All 16 video files were re-encoded to limited range, a check that every clip must pass before it ships now sits in the motion spec, and the page falls back to the MP4 version if a clip still fails to decode. The clips wait on my visual sign-off.
What it demonstrates
After 15 years in web design, the part of the job I care most about is the part I kept: deciding what matters, what good looks like, and what ships. The agents do the prototyping, building and checking, and because every claim comes back with evidence, I don’t have to take their word for it.