A portfolio that agents can read
More people now meet my work through an AI assistant than through my home page. Here is what this site serves to agents, and why each piece is small.
When someone asks an assistant about me, the assistant reads this site on their behalf. If it has to scrape a page full of animation and layout to find one job title, it will get things wrong. So the site speaks to programs as directly as it speaks to people.
None of it is complicated. Each piece is a file or a header, generated from the same content as the pages, so it can never drift from what a person sees.
Text first
- Every page has a Markdown version. Add
.mdto any path, or ask for any page withAccept: text/markdown. - llms.txt is a short index of every page, and llms-full.txt is the whole site in one file.
- Every page's HTML response carries a
Linkheader that points to its Markdown version, the sitemap and the files below.
Structured data
- A read-only JSON API at /api/v1/portfolio, described by an OpenAPI document. Errors are RFC 9457 problem details, so an agent gets JSON even when it asks for something that does not exist.
- An MCP server at /mcp with five read-only tools, and a server card that describes it.
- An Agent Skill that explains how to read the site, and an ARD manifest that lists all of the above in one place.
Being explicit about consent
The robots.txt file welcomes search engines and AI assistants, and uses Content Signals to say yes to search and answers and no to model training. It is a preference, not a lock, but it is written where well-behaved crawlers look.
The details are on the developers page, and the source is on GitHub (opens in a new tab).