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