From a8c5927b04738ec723f502e28e51cfc7ff7b68e7 Mon Sep 17 00:00:00 2001
From: Cursor Agent
Date: Fri, 21 Aug 2026 22:05:48 +0000
Subject: [PATCH 1/2] Add agent discovery surfaces without inventing product
APIs
Serve Markdown for Accept: text/markdown, recover from real 404s, and
publish llms.txt plus contact and privacy pages from existing editorial
channels.
Co-authored-by: ben <0thernet@users.noreply.github.com>
---
app/AGENTS.md | 6 +-
app/about/page.test.tsx | 2 +
app/about/page.tsx | 8 +-
app/analytics.test.ts | 2 +
app/analytics.ts | 2 +
app/contact/page.test.tsx | 26 +++
app/contact/page.tsx | 94 ++++++++++
app/layout.tsx | 7 +-
app/llms.txt/route.test.ts | 14 ++
app/llms.txt/route.ts | 12 ++
app/metadata.test.ts | 2 +
app/not-found.tsx | 19 +-
app/privacy/page.test.tsx | 25 +++
app/privacy/page.tsx | 84 +++++++++
app/runtime-surfaces.test.tsx | 5 +
app/seo.test.ts | 11 ++
app/seo.ts | 14 ++
app/site-copy.ts | 88 +++++++++
app/site-footer.tsx | 2 +
app/sitemap.ts | 6 +
lib/AGENTS.md | 2 +
lib/accept.test.ts | 103 +++++++++++
lib/accept.ts | 144 +++++++++++++++
lib/llms-txt.ts | 38 ++++
lib/page-markdown.test.ts | 64 +++++++
lib/page-markdown.ts | 329 ++++++++++++++++++++++++++++++++++
proxy.ts | 56 ++++++
27 files changed, 1156 insertions(+), 9 deletions(-)
create mode 100644 app/contact/page.test.tsx
create mode 100644 app/contact/page.tsx
create mode 100644 app/llms.txt/route.test.ts
create mode 100644 app/llms.txt/route.ts
create mode 100644 app/privacy/page.test.tsx
create mode 100644 app/privacy/page.tsx
create mode 100644 app/site-copy.ts
create mode 100644 lib/accept.test.ts
create mode 100644 lib/accept.ts
create mode 100644 lib/llms-txt.ts
create mode 100644 lib/page-markdown.test.ts
create mode 100644 lib/page-markdown.ts
create mode 100644 proxy.ts
diff --git a/app/AGENTS.md b/app/AGENTS.md
index 2775daf..ccc51b3 100644
--- a/app/AGENTS.md
+++ b/app/AGENTS.md
@@ -3,8 +3,10 @@
- `page.tsx` – the canonical unified Stripe history timeline.
- `history/` – category pages, the appearances projection, annual-volume and valuation pages, and shared timeline rendering.
- `data/` – the crawlable history and research dataset index.
-- `about/` – sourcing, review, independence, corrections, and privacy.
-- `site.ts`, `site-header.tsx`, and `site-footer.tsx` – canonical identity and shared page chrome.
+- `about/`, `contact/`, and `privacy/` – sourcing, review, independence, corrections, public contact channels, and privacy.
+- `llms.txt/` – the agent index with when-to-use guidance.
+- Root `proxy.ts` – Accept negotiation that serves Markdown for the same public URLs.
+- `site.ts`, `site-copy.ts`, `site-header.tsx`, and `site-footer.tsx` – canonical identity, shared editorial copy, and shared page chrome.
- `analytics.ts`, `posthog.ts`, and `posthog-analytics.tsx` – the finite public-route analytics contract, strict PostHog boundary, and client provider.
- `layout.tsx`, `globals.css`, and `support/` – the document, appearance, structured-data, and portable styling boundaries.
- `robots.ts`, `sitemap.ts`, `manifest.ts`, and `opengraph-image.tsx` – public discovery and sharing surfaces.
diff --git a/app/about/page.test.tsx b/app/about/page.test.tsx
index 069b63b..961042d 100644
--- a/app/about/page.test.tsx
+++ b/app/about/page.test.tsx
@@ -27,6 +27,8 @@ describe("stripedex.com about page", () => {
expect(html).toContain('aria-label="Appearance: System"');
expect(html).toContain('href="https://hraness.com/"');
expect(html).toContain('href="https://github.com/hraness/stripedex"');
+ expect(html).toContain('href="/contact"');
+ expect(html).toContain('href="/privacy"');
expect(html).not.toContain("Atom feed");
expect(html).not.toContain("news summaries");
expect(html).toContain('type="application/ld+json"');
diff --git a/app/about/page.tsx b/app/about/page.tsx
index fc2b5d1..3e6445d 100644
--- a/app/about/page.tsx
+++ b/app/about/page.tsx
@@ -87,7 +87,9 @@ export default function AboutPage() {
Published and maintained by Hraness. To
suggest a correction, add a source, or improve the project, open an
issue or contribution in the{" "}
- Stripedex repository.
+ Stripedex repository. The same
+ public channels are listed on the{" "}
+ contact page.
Privacy
@@ -105,6 +107,10 @@ export default function AboutPage() {
no user accounts or authentication. Requests are still subject to the
ordinary logs and security controls of the hosting provider.
+
+ The dedicated privacy page repeats this
+ policy for agents and other readers who look for /privacy.
+