I'm Declan, an Engineering Manager living in Melbourne. This site is where I track my experiments — the AI projects and tools I'm building, shipping, and learning from in the open.

Growth

The results so far.

192,937 search impressions across all three, in 8 months.

Google Search Console data from pagespeedfix.com, webtoolsforge.com and nestledger.com.au. The first two I started by hand, before the pipeline above existed — what I learned running them is what the pipeline now scales, and NestLedger is the first one it built from scratch.

3202
Queries ranking
1065
Indexable pages ranking
193k · 462c
Impressions · clicks
49,041·Aug '26
76,0670Jan '26Mar '26May '26Aug '26

The fleet · to 31 Aug 2026

12
Jobs run
8
PRs merged
45
Seats deployed
89%
First-time-right

The workflow

One brief. A whole crew.

I type one line. A Lead agent plans it, hires a crew across two model families, and a different model reviews the result before it reaches me.

Fleet activity summary:

  • lead (claude): 22m
  • designer (claude): 12m
  • be (codex): 4m
  • reviewer (codex): 2m
Step —
  1. 01

    Mac

    Brief it in one line

    /fleet vps-agents: I want to improve on the design of the Citadel dashboard — lean into the Red Rising theme as much as possible. No plan document, no frontmatter. The brief is the entire input — the planning got delegated too.

  2. 02

    VPS

    The Lead plans and staffs

    An Opus Lead reads the project manifest, decomposes the ask, and decides which seats to hire. Role definitions live in git, so how a seat behaves is a reviewable diff rather than a prompt someone typed once.

  3. 03

    VPS

    The crew works in parallel, in isolation

    Every seat gets its own git worktree, so six agents can't tread on each other. Seats split across model families deliberately: Claude on frontend, design and docs; Codex on backend, testing and infra.

  4. 04

    VPS

    A different model reviews the work

    The crew's branches integrate, then a reviewer from the other family goes looking for defects. Findings route back to the seat responsible, and the rounds get counted.

  5. 05

    GitHub

    PR opens, Hermes pings me

    Hermes is the one piece of the old pipeline that survived — demoted from half the machine to the thing that taps me on the shoulder in Telegram.

  6. 06

    VPS

    Every seat gets debriefed

    Tokens, cost, turns, tool errors, review rounds, first-time-right, thrash score and tokens-per-diff-line, appended to ledger.jsonl and sliced in the Citadel by model family and roles_sha. Change a role file, run more jobs, watch whether the numbers move.

The interesting part isn't that agents write the code — it's that every seat gets measured. Cost, review rounds, first-time-right, thrash, tokens per line of diff, all landing in a ledger I can slice by model family and by which revision of the role file the seat was running. That's what makes it a system I can tune rather than a trick I can demo.

A Hostinger VPS runs the fleet in Docker containers. Tailscale gives me private access from anything I own; Cloudflare Access gates the dashboards on *.dekk.dev, including the Citadel — the control room where the crew metrics live.

↓ Selected work

One job, end to end

The receipt.

One line in, one merged PR out. The repo is private, so here is the whole job instead — what it cost, who did what, what the reviewer caught, and the two pages you can go and use right now.

What I typed

/fleet vps-agents: I want to improve on the design of the Citadel dashboard — lean into the Red Rising theme as much as possible. On the ships underway tab, add a tab that shows each job as a spaceship travelling through space; hover over a ship to see the workers on it and the details about it. Also add a proper title and description for each job instead of the branch name.

22m wall clock · the vertical line is the review gate · costs shown at API list prices

4
Seats
2
Model families
$12.22
Cost to ship
0
Review rounds
4/4
First-time-right
+613
Lines merged
Crew debrief

Zero findings this run — the reviewer had nothing to send back.

SeatModelTimeCostTool errors
leadclaude-opus-4-822m$9.090
designerclaude-sonnet-512m$2.661
begpt-5.54m$0.32
reviewergpt-5.52m$0.16

Cost is computed at API list prices. A dash means the runtime does not report that field — Codex seats do not emit tool-error counts, and inventing a zero there would be a lie.

Get in touch

Hiring or curious?

Happy to hear from you either way.