All Projects
Platform

abstractRyan.ai

The root project. A portfolio built on the premise that the next visitor won't be a person scrolling — it'll be an agent querying. A2A, MCP, and ACP descriptors, a JSON-RPC endpoint, an agent mode, and an ask-don't-browse interface. Also how I promote and sell myself.

Astro TypeScript Cloudflare Workers A2A MCP ACP Agentic Development AI Agent Discovery

abstractRyan.ai

You’re looking at it.

Every portfolio makes an assumption: that a person will land on it, scroll, form an impression, and maybe click contact. That assumption is quietly expiring. More and more, the thing evaluating you first is an agent working on someone else’s behalf — and it doesn’t scroll.

So this site is the experiment. What does discovery look like when the visitor isn’t human? What does a professional presence look like when the interface isn’t a page?

Live at abstractryan.ai


Built to Be Queried, Not Just Read

The site publishes itself in three agent protocols at once, because nobody has won yet and betting on one is how you end up stranded:

  • A2A — a JSON-RPC 2.0 endpoint at /a2a with seven methods: getPortfolioInfo, listProjects, getProject, listBlogPosts, getBlogPost, search, and submitEngagementRequest. That last one matters: an agent can open a real engagement conversation on its principal’s behalf. Discovery that terminates in an action, not a dead end.
  • ACP — an experimental Agent Client Protocol manifest at /.well-known/acp.json, registering a human expertise agent rather than a coding-automation agent. ACP wasn’t designed for that. Registering it anyway is the point — the interesting part of a young protocol is where it doesn’t fit yet.
  • Tokru — a capability profile at /.well-known/tokru.json: skills, availability, pricing, portfolio, in a machine-readable shape.

All of them read from one generated corpus, /a2a-data.json, rebuilt on every deploy. One source of truth, several dialects.


Human Mode / Agent Mode

The homepage has a mode toggle, and it isn’t cosmetic.

Human mode is a portfolio: sections, cards, prose. Agent mode drops into a terminal that shows what an agent actually sees when it queries the site — the raw surface, the real methods, the actual payloads.

Same data, two audiences, and no pretending that one experience serves both well. Most “AI-enabled” sites bolt a chatbot onto a brochure. This one admits there are two different readers and builds for each.


Ask, Don’t Browse

The primary interaction on the homepage is a question box, not a navigation bar.

Type what you actually want to know — “has he done platform work at scale?”, “what would he do with our agent stack?” — and the answer is generated by Claude Haiku 4.5, grounded in the project corpus, with follow-up questions derived from the intent behind the question. Navigation still exists. It’s the fallback, not the default.

This is the part that’s genuinely uncomfortable to build, because it means giving up control of the path. You don’t get to decide what someone reads first. You only get to decide what’s true in the corpus.


Arguing Against Yourself in Public

/demo/mcp-vs-api is a side-by-side of MCP against a plain REST API across three real scenarios:

  • Direct query — REST wins.
  • Exploratory query — MCP wins.
  • Adding a new capability — MCP scales better.

One of those three concedes the case to the boring option. That’s deliberate. The fastest way to be useless in this space is to sell a protocol as a religion, and the fastest way to be trusted is to say plainly where your preferred tool loses.


Where the Template Went

This started as a fork of an open-source Astro portfolio template. Very little of that survived contact.

What did survive was a generalizable idea: anyone should be able to stand up a professional presence that agents can discover, query, and act on — without hand-building a protocol stack. That idea didn’t belong in one person’s portfolio, so it split off into Tokru, where this codebase is now vendored as the portfolio track’s reference implementation.

abstractryan.ai stayed the frontier lab. Tokru became the product. Things get tried here first, and the ones that work get generalized over there.


How It’s Maintained

This is the part worth paying attention to.

The build, the deploy pipeline, content, features, fixes, and ongoing maintenance run through an agentic development loop. A typical change starts as a Telegram message describing what’s wanted. The AI collaborator reads the codebase, writes the code, runs the build, fixes what breaks, commits, and pushes. CI builds and Cloudflare deploys. Idea to live production, often inside five minutes.

It has been running this way continuously since February 2026. It isn’t a demo of what AI could do — it’s the actual maintenance model, including the parts that go wrong.


Technical Stack

  • Astro with the Cloudflare adapter — SSR at the edge
  • Cloudflare Workers — global edge runtime, Workers KV for rate limiting and stats, Analytics Engine for A2A event telemetry
  • TypeScript + TailwindCSS — utility-first styling over a custom component layer
  • MDX content collections — type-safe frontmatter with Zod schemas
  • GitHub Actions — builds and deploys on every push to main
  • Claude Haiku 4.5 — the freeform ask interface

Lessons From Running It This Way

PUBLIC_ prefixed variables are inlined at build time, not read at runtime — a lesson that cost two broken deploys before it got written down. TypeScript generics inside Astro JSX fail esbuild; types belong in the frontmatter. GitHub Actions reserves GITHUB_URL. And a Workers site without an ASSETS binding returns 500 instead of 404 on every bad URL, which is a genuinely miserable thing to debug.

The kind of thing you learn by shipping, not by reading.

Longer-form writing on all of this lives at abstractryan.substack.com.


Built and maintained by one human and one AI, in production since February 2026.

Related Projects