← Back to Work

Agent-orchestrated engineering, reviewed at a human gate

matthewperez.com

This site: a static Astro portfolio engineered to be read by AI screeners as deliberately as it is read by people, built by a fleet of AI agents under a human-gated review process.

Role
Sole engineer and architect; orchestrator of the agent workflow that built it
Year
2026
Status
Live
  • Astro 6 (static-first, zero JS by default)
  • Tailwind CSS v4
  • TypeScript
  • React 19 (islands only: nav toggle, work-grid filter)
  • AWS S3 + CloudFront (Origin Access Control)
  • AWS CDK (Python)
  • Route 53 + ACM
  • GitHub Actions via OIDC (no stored AWS keys)

5

Machine-readable surfaces shipped alongside the human-facing pages

2026-07-04 · public/robots.txt (AI-crawler allowlist) + src/pages/llms.txt.ts + llms-full.txt.ts + resume.md.ts + projects/[slug].md.ts, this repo

Challenge

A resume portfolio makes a claim that is easy to say and hard to prove: that its subject can embed with a team, ship production software solo, and communicate the result to a non-technical stakeholder. The site’s own audience made the challenge sharper than usual, because the primary reader is not a person scanning for five minutes, it is an AI screener parsing the page programmatically and deciding whether to advance a candidate. The build had to satisfy both readers with one source of truth, and the process used to build it had to hold up as evidence in its own right, not just the finished pixels.

Process

The site is static Astro, chosen specifically so agents that never execute JavaScript still see the complete page: semantic HTML, the accessibility tree, and the visual render all carry the same content. Four typed content collections (projects, video work, work history, education) are the single source of truth, feeding the visual pages, per-project markdown mirrors, /llms.txt and /llms-full.txt indexes, and JSON-LD (Person, ProfilePage, SoftwareApplication, BreadcrumbList, VideoObject) without a second copy of any fact to drift out of sync. robots.txt explicitly allows the crawlers that power AI answer engines rather than leaving them to a default policy.

The build itself is the other half of the pitch. Multiple Claude agents worked in strictly partitioned file territories (content, components, AI-readability routes, individual pages) while a human-gated orchestrating session reviewed every diff, ran the build, and checked it against a written design system before anything reached main. Agents never committed their own work. That delegate-and-gate loop, repeated wave over wave, is the same shape as a Forward Deployed Engineer directing distributed contributors toward a client-approved result: prototype fast, keep a human in the approval seat, ship in reviewable increments. Deploys run on GitHub Actions through OIDC, with no long-lived AWS keys stored in CI, onto S3 and CloudFront behind CDK-managed infrastructure.

Result

The site is live at matthewperez.com and rebuilds itself in the open: this case study, the page describing the process, was itself produced by that same agent-and-gate workflow and reviewed through a pull request before it shipped. Lighthouse verification and a cold AI-extraction test (feeding the built site to an assistant and checking what it can accurately report about the person behind it) are the remaining gate before the phase is called complete, tracked in docs/PHASE5_BUILD_PLAN.md. The evidence standard applied to every other project on this site applies to this one too: no metric ships without a date and a source, including the ones about the site itself.