How I build with AI

AI isn't a novelty in my workflow — it's a daily engineering tool I've tuned deliberately. This is the setup, and a running log of how I used it to rebuild this site.

The dev setup

  • Agentic IDE + CLI. Cursor and Claude Code for day-to-day work, driven by an explicit plan → execute → verifyloop rather than ad-hoc prompting.
  • Context isolation. I encode tasks as discrete steps run by fresh-context agents, so a long task doesn't drown in its own history and each step starts from a clean, well-scoped brief.
  • Multi-agent plan / execute / verify. One pass designs the change and gets sign-off; another implements; another checks the result against the spec. This is how I delivered features in unfamiliar domains far faster than ramping up unaided.
  • Reusable agent skills. I build my own skills and slash-commands — small, documented capabilities the agent can invoke — so repeated workflows become one command instead of a re-explained prompt.
  • Docs as the source of truth. Plans, conventions, and status live in version-controlled markdown the agents read first, so state never lives only in a chat window.

Build log

Rebuilding this site with AI · 2026-06

This site went from a dormant Next.js blog to an Astro digital garden + portfolio using exactly the workflow above:

  1. Plan, written down. The agent analysed the old codebase, asked targeted questions, and produced a reviewed plan checked into the repo (docs/revamp-plan.md) before any code changed.
  2. Current docs, not stale memory. Library docs (Astro 7, Tailwind 4, the Cloudflare stack) were pulled fresh at build time — which caught real version differences from training data.
  3. Execute in small, verified steps. Scaffold → content model → migration → garden features, each one built and checked before moving on. A real bug (the static-site generator silently slugified note ids) was caught by verifying output, not by assuming.

A prompt-to-form generator, on the edge · 2026-06 · built, staged for later launch

Describe a form in plain English and Claude returns a JSON schema that the schema-driven form builder renders live. It runs as a Cloudflare Pages Function calling the Anthropic API on the edge — the same agentic plan/execute/verify loop produced the endpoint, the React island, and the guardrails, with the model choice (Sonnet) and structured-output handling pulled from current docs rather than memory. Built, tested, and deployed; held back from the public lab for now so AI features launch as one deliberate phase rather than piecemeal.

An "ask about my work" RAG chat · 2026-06 · built, staged for later launch

A retrieval-augmented chat grounded in this site's own case studies and garden notes. A build-time step chunks the content, embeds each passage with Cloudflare Workers AI (bge-base), and stores the vectors in Cloudflare Vectorize. At query time a Pages Function embeds the question, retrieves the closest passages, andstreams a cited answer from Claude Haiku — a deliberately cost-efficient model since retrieval, not the model, carries the grounding. The same plan/execute/verify loop produced the indexer, the streaming endpoint, the React island, and the guardrails (per-IP rate limiting, input/length caps, and optional Turnstile), with the shared chunking and prompt-assembly logic unit-tested. Live-provisioned and verified end-to-end — Vectorize index created, chunks embedded, retrieval returning correctly cited passages — and staged for the same later launch as the form generator above.

Migrating off Vercel: DNS, CI/CD, and a live bug, agentically · 2026-07

The infrastructure move off Vercel — new Cloudflare Pages project, domain cutover, GitHub Actions CI/CD — ran on the same plan/execute/verify loop as the feature work above, with one thing standing out: checking live state before acting matters even more when the "system" is a production domain, not just a codebase. Planning the cutover started with checking what was actually live rather than trusting the docs, which surfaced a real, current outage — the custom domain had been attached to Cloudflare ahead of a production deployment existing, and www still pointed at the retired Vercel project, both serving errors to real visitors. The fix (a production deploy, a repointed DNS record, a redirect rule) took minutes once found, because it was found by checking rather than assuming. Full account, including two real bugs an earlier live run caught in the RAG pipeline, inthis note.