From e1ada29dfcb399b2d5a227c6a6cfbefabd4c27e2 Mon Sep 17 00:00:00 2001 From: Aitor <1726644+aaitor@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:56:06 +0200 Subject: [PATCH 1/3] fix(catalog): tag discovery tutorial as "mcp + api", not "ts" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The discover-the-catalog tutorial is language-agnostic — every discovery surface is curl/MCP/REST, callable from any language. Labelling it "ts" implied a TypeScript-only tutorial. Add an `agnostic` Language that renders as "mcp + api" (labelled by interface, not language) and use it for the entry. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01NJVmLG9aiAzymDX4n56duk --- showcase/content/tutorials.ts | 2 +- showcase/lib/types.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/showcase/content/tutorials.ts b/showcase/content/tutorials.ts index 57e6cade..8c2e38df 100644 --- a/showcase/content/tutorials.ts +++ b/showcase/content/tutorials.ts @@ -568,7 +568,7 @@ weather.ensureCity # prompt — guide the LLM to request weather`, tagline: "The half that comes before payment: the same live catalog of pay-per-use AI agents, read three ways — by eye, by an agent, and by a crawler. Public, unauthenticated, and free to read.", protocol: "catalog", - language: "ts", + language: "agnostic", tier: "discover", repoPath: "catalog/discover-the-catalog/", learn: { diff --git a/showcase/lib/types.ts b/showcase/lib/types.ts index ad03b227..601b41b6 100644 --- a/showcase/lib/types.ts +++ b/showcase/lib/types.ts @@ -2,7 +2,7 @@ // One shape for all tutorials → uniform pages out of wildly different READMEs. export type Protocol = "x402" | "mcp" | "langchain" | "catalog"; -export type Language = "ts" | "py" | "autonomous"; +export type Language = "ts" | "py" | "autonomous" | "agnostic"; export type Tier = "live" | "recap" | "discover"; export interface CodeSample { @@ -141,4 +141,6 @@ export const LANGUAGE_LABEL: Record = { ts: "ts", py: "py", autonomous: "autonomous", + // discovery is language-agnostic (curl / MCP / REST) — label by interface, not language + agnostic: "mcp + api", }; From 3735f6b01f2419de3005b89745589b2fde137f31 Mon Sep 17 00:00:00 2001 From: Aitor <1726644+aaitor@users.noreply.github.com> Date: Fri, 4 Sep 2026 16:02:24 +0200 Subject: [PATCH 2/3] refactor(catalog): two interface tags (mcp, api) + video in its own section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up review feedback on the discovery tutorial: - Render the language-agnostic tutorial as two separate chips, "mcp" and "api", instead of one "mcp + api" chip. A `languageTags()` helper is now the single source of truth for language→chip(s) across the tutorial page, the overview and the sidebar — which also fixes the sidebar showing the raw `agnostic` enum value (it rendered `it.language` directly, not the label). - Split the discover "See it run" (§4, the working demo) from the video, which now has its own §5 "Catalog video". The video no longer sits inside the demo panel. Build green; both self-checks pass; verified in the local dev server. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01NJVmLG9aiAzymDX4n56duk --- showcase/app/page.tsx | 8 ++++-- showcase/app/t/[slug]/page.tsx | 38 +++++++++++++++++++++++++-- showcase/components/AppShell.tsx | 3 ++- showcase/components/DiscoverPanel.tsx | 16 ----------- showcase/lib/types.ts | 12 ++++++++- 5 files changed, 55 insertions(+), 22 deletions(-) diff --git a/showcase/app/page.tsx b/showcase/app/page.tsx index 9757a932..cbfa5258 100644 --- a/showcase/app/page.tsx +++ b/showcase/app/page.tsx @@ -1,6 +1,6 @@ import Link from "next/link"; import { groupedTutorials, tutorials } from "@/content/tutorials"; -import { LANGUAGE_LABEL } from "@/lib/types"; +import { languageTags } from "@/lib/types"; import { repoUrl } from "@/lib/repo"; import HeroHandshake from "@/components/HeroHandshake"; import { ArrowRight, GitHub, Spark } from "@/components/icons"; @@ -85,7 +85,11 @@ export default function HomePage() {
{t.tagline}
- {LANGUAGE_LABEL[t.language]} + {languageTags(t.language).map((tag) => ( + + {tag} + + ))} {t.tier} @@ -46,7 +48,11 @@ export default async function TutorialPage({ params }: { params: Promise<{ slug:
{PROTOCOL_LABEL[t.protocol]} - {LANGUAGE_LABEL[t.language]} + {languageTags(t.language).map((tag) => ( + + {tag} + + ))} {t.tier === "recap" ? "recap · watch it run" @@ -168,6 +174,34 @@ export default async function TutorialPage({ params }: { params: Promise<{ slug: )} + + {/* 5 — Catalog video (discover tutorials only) */} + {discoverVideo ? ( +
+
+ 5 Catalog video +
+
+ +
+ {discoverVideo.caption} · {discoverVideo.duration} +
+
+
+ ) : null}
); diff --git a/showcase/components/AppShell.tsx b/showcase/components/AppShell.tsx index 4a996e17..2c2a08c8 100644 --- a/showcase/components/AppShell.tsx +++ b/showcase/components/AppShell.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import type { Language, Tier, Protocol } from "@/lib/types"; +import { languageTags } from "@/lib/types"; import { Menu, Chevron, @@ -107,7 +108,7 @@ export default function AppShell({