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
- Live
- Visit site
- 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 I 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 — a choice I made 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 file territories I strictly partitioned (content, components,
AI-readability routes, individual pages) while an orchestrating session
I gated by hand 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
me) 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.