# info.summary
Read-only endpoints returning this site's content as JSON, Markdown, and plain text.

# info.description
Every published page on this site has a machine-readable twin alongside its HTML, so an agent never has to parse a rendered page to read it. Fetch /index.json for the whole site as structured JSON in one request, or append index.md to any page URL for that page's source Markdown.

Markdown is also available by content negotiation: send Accept: text/markdown to any page URL and the response is that page's Markdown rather than its HTML, with Vary: Accept and an x-markdown-tokens estimate. It is the same document the index.md path returns, so the two are interchangeable. HTML remains the default for any client that does not prefer Markdown explicitly, and a page with no Markdown twin falls back to HTML.

All operations are anonymous GETs: there is no authentication, no request body, and no state. Responses are static files served from Cloudflare's edge and change only when the site is rebuilt, so they are safe to cache for minutes at a time. Every endpoint sends Access-Control-Allow-Origin: *, which makes them readable from browser-based agents.

# paths./index.json.get.description
Returns one object per published page: title, description, summary, full body text with HTML stripped, tags, and dates. This is the cheapest way to ingest the whole site, and it is the same document the on-site search reads.

# paths./index.md.get.description
The Markdown twin of the home page, in the same shape as every other page: a short metadata header followed by the page's source Markdown.

# paths./{pagePath}/index.md.get.description
Appending index.md to a page URL returns that page's source Markdown, preserving the headings, lists, and code fences that the HTML rendering flattens. Take pagePath from the permalink field of the content index.

# paths./{pagePath}/index.md.get.parameters[].description
A page path without surrounding slashes. May contain slashes for nested pages.

# paths./{pagePath}/.get.summary
Any page, in the representation you ask for

# paths./{pagePath}/.get.description
Content negotiation on a page's own URL, so no separate endpoint has to be discovered or constructed. Send Accept: text/markdown and the response is the same document the index.md path returns; prefer text/html, as browsers do, and the response is the rendered page. A tie goes to HTML, so a wildcard Accept does not change what an ordinary client receives. Pages with no Markdown twin, such as the numbered pages of a paginated list, return HTML whatever is asked for.

# paths./{pagePath}/.get.parameters[].description
A page path without surrounding slashes. May contain slashes for nested pages. Take it from the permalink field of the content index.

# paths./{pagePath}/.get.responses.200.description
The page, in whichever representation the Accept header selected.

# paths./{pagePath}/.get.responses.200.headers.Vary.description
Always includes Accept, so a shared cache keeps the Markdown and HTML representations apart.

# paths./{pagePath}/.get.responses.200.headers.Content-Location.description
On a Markdown response, the URL of the Markdown document itself, for a client that would rather cache or cite that directly.

# paths./{pagePath}/.get.responses.200.headers.x-markdown-tokens.description
On a Markdown response, the estimated token count of the body, for sizing a context window or choosing a chunk size. Approximated at four characters per token rather than measured with a tokenizer.

# paths./llms.txt.get.description
An llmstxt.org-shaped index: who the site belongs to, the areas of expertise it covers, and a linked, described list of every page. Read this first to decide what else to fetch.

# paths./llms-full.txt.get.description
The complete text of the site concatenated into a single response, for when one large fetch is cheaper than many small ones.

# paths./api/status.json.get.description
The status link of the API catalog. This site is static, so the response describes the deployment being served rather than the health of a running backend.

# paths./.well-known/api-catalog.get.description
The catalog that points at this document. Each linkset entry anchors one API and carries service-desc, service-doc, and status links.

# paths./.well-known/api-catalog.get.responses.200.description
A Linkset document as defined by RFC 9264.

# components.schemas.ContentEntry.description
One published page. Optional properties are omitted rather than sent empty.

# components.schemas.ContentEntry.properties.title.description
The page's title, with emoji shortcodes resolved.

# components.schemas.ContentEntry.properties.section.description
Title of the section the page sits in, empty for top-level pages.

# components.schemas.ContentEntry.properties.summary.description
The page's own summary where it sets one, otherwise its first 70 words.

# components.schemas.ContentEntry.properties.description.description
A standalone description of the page rather than a restatement of its title. Omitted when the page sets none.

# components.schemas.ContentEntry.properties.content.description
The full body of the page as plain text, with HTML markup removed.

# components.schemas.ContentEntry.properties.permalink.description
Path relative to the site root. Append index.md for this page's Markdown source.

# components.schemas.ContentEntry.properties.externalUrl.description
Where the page is a pointer to content hosted elsewhere, its target. Null otherwise.

# components.schemas.ContentEntry.properties.type.description
The kind of content, matching the top-level section.

# components.schemas.ContentEntry.properties.date.description
Publication date formatted for display, e.g. 14 March 2026. Omitted when the page carries no date. Parse datePublished instead.

# components.schemas.ContentEntry.properties.datePublished.description
The same publication date, as YYYY-MM-DD.

# components.schemas.ContentEntry.properties.lastmod.description
When the page last changed, as YYYY-MM-DD. Equal to datePublished unless the page has been edited since.

# components.schemas.Status.properties.status.description
Fixed at ok: a static file cannot report any other state, and a request that reaches it has already proven the site is being served.

# components.schemas.Status.properties.buildTime.description
When the deployment being served was built.

# components.schemas.Status.properties.generator.description
The site generator and version that produced it.

# components.schemas.Status.properties.note.description
What this endpoint can and cannot tell a client.

# components.schemas.Linkset.description
A Linkset document as defined by RFC 9264 section 4.2.

# components.schemas.Linkset.properties.linkset.description
One member per link context. Here, one per API.

# components.schemas.Linkset.properties.linkset.items.properties.anchor.description
The endpoint the links in this member describe.