foogy

Web3 & AI Sept 2026

How I build with AI

The Dash App window, tilted slightly on a pale grey background, with the sample project Harbor open on the Chat tab. On the left, a sidebar lists six sample projects (Harbor, Docs site, API worker, iOS app, Design system, Status page), each with status dots and a line such as '1 working · 2 need you'. In the middle, the owner asks 'How do we retry a failed webhook?'. Juno, the PM, replies with a short TypeScript code block with a Copy button, then 'Only you can decide which address the emails come from', with the decision in bold. On the right, the Latest timeline shows Mira working on webhook retries at the top, then the team's events by day. A 'Needs you 2' tab sits at the right edge, and a '5 Need You' button sits in the header.
Dash App: one window for every project, one PM to talk to. Sample project.

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.

Client
Private project
Role
Owner and director — direction, decisions, approvals
Year
2026
Dash App in 43 seconds: one window, one PM, a plan I approve first, one queue for me, and what it changed. Press Play, or watch it as a video.

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.

Dash App sidebar with six sample projects (Harbor, Docs site, API worker, iOS app, Design system, Status page), each with its avatar, a row of status shapes and a summary such as '1 working · 2 need you' or '1 needs you · 1 error'. Harbor is selected.
One window for your AI team. Sample project.

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.

Dash App chat with the PM, Juno. My line 'How do we retry a failed webhook?'; Juno's reply that a failed delivery is retried 3 times and never waits longer than 5 minutes, with the TypeScript function in a code block with a Copy button; then 'Teo's tests pass. Only you can decide which address the emails come from', the decision in bold; and a follow-up from Juno marked 'In Needs you'.
You talk to one PM. Sample project.

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.

Dash App Goals tab with four goals and their progress: 'Ship the order tracking page', Doing, 3 of 8; 'Email customers when a parcel…', Waits on you, 2 of 4; 'Page load under 2 seconds…', To do, 0 of 2; 'Set up staging and a preview link…', Reached, 2 of 2. The first goal is open as a plan with Backend, Frontend and Checks blocks and their tasks.
The PM turns it into a plan. Sample project.

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.

Dash App Agents tab: Juno, the PM, waiting on a question; Mira, Dev, working on webhook retries; Teo, Tester, in Needs you, asking to run git log --oneline -5; Sana, Designer, idle and done; then 11 ready subagents, all idle: Ninja, lead builder; Vera, critic; Forge, backend dev; Pixel, frontend dev; Atlas, full-stack dev; Probe, QA tester; Vitra, product designer; Pulse, motion designer; Hephaestus, smart-contract dev; Chisel, 3D artist; Loom, render pipeline engineer.
A team that fits the job. Sample project.

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.

Dash App Needs-you queue with two items: Juno, the PM, asks which address delay emails should come from, offering two addresses, 'Let Juno pick' and 'Type answer'; Teo, Tester, asks to run git log --oneline -5, with 'You Decide, Juno', Deny and Allow. Beside it, the same queue once answered reads 'Nothing waits on you here' while Mira keeps working at 67%.
One queue for me. Sample project.

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.

Diagram: Ninja, Forge, Pixel, Vera and Probe all work in one working tree, and each agent commits only its own changes. Work moves Build, Artifact, Decide, Verify, Built; an arrow from Verify back to Build reads 'a different agent verifies'. Tests go red on the old code, then green.
The hardest problem: many hands, one working tree.

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.

Forge, backend dev, Opus 5.5, high effort

...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.

Ninja, lead builder, Opus 5.5, high effort

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.

Probe, QA tester, Sonnet 5.5, medium effort

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.

Forge, backend dev, Opus 5.5, high effort

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.

Sentinel, auditor, Haiku 5.5, high effort

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.