diff --git a/specs/016-visual-redesign/tasks.md b/specs/016-visual-redesign/tasks.md index 6699cce..38489ec 100644 --- a/specs/016-visual-redesign/tasks.md +++ b/specs/016-visual-redesign/tasks.md @@ -164,3 +164,4 @@ Items from the redesign review, one pull request each, in order. - [x] R-01 PR #58 merged: matrix and feature baselines refreshed - [x] R-02 Small fixes: `.notice`, `.notice.caution` and `.card.notice` tint in oklab, not oklch (the toggle notice in `ChainPage.astro` keeps its local tint in the kind's ink); the link after "in the" on `/explorer/` and after "See" on `/standards/` no longer loses its space to HTML compression; the entry-format `pre` on `/contribute/` is focusable (axe scrollable-region-focusable) - [x] R-02a Imagery on the new system (asked on the R-02 pull request): the social card (`public/og.png`) redrawn as the home hero on flat tokens with the real matrix, replacing the pre-redesign card (glow, shadow, dot grid, slogan); the Apple touch icon on `--ground`; the README hero and how-it-works pictures on the new tokens without glow, shadow, gradient or dot grid, with MatrixThumb's marks and the home headline. The favicon and `public/brand/` already match the supplied logo and are unchanged +- [x] R-03 Nav wording: the primary and footer navigation read Servers, Standards, Explorer, Breaches, Contribute (Scanner stays in the footer); every `` trail, the page-foot cross link on `/standards/` and the 404 buttons use the same words; `/mcp/` and `/standards/` take Servers and Standards as `` and eyebrow. "Atlas" stays the product word in ledes and body copy diff --git a/src/components/ChainPage.astro b/src/components/ChainPage.astro index d2c4041..36dacda 100644 --- a/src/components/ChainPage.astro +++ b/src/components/ChainPage.astro @@ -58,10 +58,10 @@ function arrow(from: string, to: string) { trail={ toggle ? [ - { href: "/explorer/", label: "Delegation chain explorer" }, + { href: "/explorer/", label: "Explorer" }, { href: `/explorer/${scenario.id}/`, label: scenario.title }, ] - : [{ href: "/explorer/", label: "Delegation chain explorer" }] + : [{ href: "/explorer/", label: "Explorer" }] } current={toggle ? toggle.name : scenario.title} /> diff --git a/src/components/MatrixPage.astro b/src/components/MatrixPage.astro index 5639bbd..9d69a9d 100644 --- a/src/components/MatrixPage.astro +++ b/src/components/MatrixPage.astro @@ -65,7 +65,7 @@ const classWords = (counts: { value: string; count: number }[], label: Record<st <div class="wrap"> <header class="page-head"> - <p class="eyebrow">MCP auth atlas</p> + <p class="eyebrow">Servers</p> <h1>Who supports what in <span class="nowrap">MCP Authorization</span></h1> <p class="lede"> The public MCP servers we list, against what MCP Authorization {matrix.revision.id} requires diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index c720e9b..f1c3770 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -29,11 +29,11 @@ const footerGroups = [ { title: "Explore", links: [ - { href: "/mcp/", label: "MCP auth atlas" }, + { href: "/mcp/", label: "Servers" }, { href: "/mcp/scanner/", label: "Scanner" }, - { href: "/standards/", label: "Agent auth atlas" }, - { href: "/explorer/", label: "Delegation chain explorer" }, - { href: "/breaches/", label: "Breach anatomy" }, + { href: "/standards/", label: "Standards" }, + { href: "/explorer/", label: "Explorer" }, + { href: "/breaches/", label: "Breaches" }, ], }, { @@ -61,12 +61,12 @@ const footerGroups = [ const nav = [ { href: "/mcp/", - label: "MCP auth atlas", + label: "Servers", match: (p: string) => p.startsWith("/mcp/"), }, { href: "/standards/", - label: "Agent auth atlas", + label: "Standards", match: (p: string) => p.startsWith("/standards/"), }, { @@ -76,7 +76,7 @@ const nav = [ }, { href: "/breaches/", - label: "Breach anatomy", + label: "Breaches", match: (p: string) => p.startsWith("/breaches/"), }, { diff --git a/src/pages/404.astro b/src/pages/404.astro index bf7e503..6d94900 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -19,8 +19,8 @@ import Base from "@/layouts/Base.astro"; </header> <p class="cta"> <a class="button" href="/">Go to the home page</a> - <a class="button quiet" href="/mcp/">MCP auth atlas</a> - <a class="button quiet" href="/standards/">Agent auth atlas</a> + <a class="button quiet" href="/mcp/">Servers</a> + <a class="button quiet" href="/standards/">Standards</a> </p> <p class="muted"> Followed a broken link on this site? Please{" "} diff --git a/src/pages/breaches/[id].astro b/src/pages/breaches/[id].astro index adbf077..38f7568 100644 --- a/src/pages/breaches/[id].astro +++ b/src/pages/breaches/[id].astro @@ -37,7 +37,7 @@ const label = (url: string) => { <Base title={v.title} description={v.summary.trim()} path={`/breaches/${v.id}/`}> <div class="wrap"> - <Crumbs trail={[{ href: "/breaches/", label: "Breach anatomy" }]} current={v.id} /> + <Crumbs trail={[{ href: "/breaches/", label: "Breaches" }]} current={v.id} /> <header class="page-head"> <p class="eyebrow">Breach anatomy</p> <h1>{v.title}</h1> diff --git a/src/pages/mcp/changes/[from]/[to].astro b/src/pages/mcp/changes/[from]/[to].astro index 710d85d..180e76f 100644 --- a/src/pages/mcp/changes/[from]/[to].astro +++ b/src/pages/mcp/changes/[from]/[to].astro @@ -33,7 +33,7 @@ const FeatureLine = (f: Feature) => ({ name: f.name, id: f.id, party: PARTY_LABE path={`/mcp/changes/${from}/${to}/`} > <div class="wrap"> - <Crumbs trail={[{ href: "/mcp/", label: "MCP auth atlas" }]} current={`Changes ${from} to ${to}`} /> + <Crumbs trail={[{ href: "/mcp/", label: "Servers" }]} current={`Changes ${from} to ${to}`} /> <header class="page-head"> <p class="eyebrow">Revision diff</p> <h1> diff --git a/src/pages/mcp/features/[id].astro b/src/pages/mcp/features/[id].astro index da11431..9663a78 100644 --- a/src/pages/mcp/features/[id].astro +++ b/src/pages/mcp/features/[id].astro @@ -52,7 +52,7 @@ const supersededBy = data.features.find((f) => f.supersedes === feature.id); path={`/mcp/features/${feature.id}/`} > <div class="wrap"> - <Crumbs trail={[{ href: "/mcp/", label: "MCP auth atlas" }]} current={feature.name} /> + <Crumbs trail={[{ href: "/mcp/", label: "Servers" }]} current={feature.name} /> <header class="page-head"> <p class="eyebrow">{PARTY_LABEL[feature.party]} / {CATEGORY_LABEL[feature.category]}</p> <h1>{feature.name}</h1> diff --git a/src/pages/mcp/index.astro b/src/pages/mcp/index.astro index fc73087..f9bf887 100644 --- a/src/pages/mcp/index.astro +++ b/src/pages/mcp/index.astro @@ -9,7 +9,7 @@ const revision = currentRevision(data); --- <Base - title="MCP auth atlas" + title="Servers" description={`Which public MCP servers support which features of the MCP Authorization specification, revision ${revision.id}. Every cell cites an observation.`} path="/mcp/" > diff --git a/src/pages/mcp/revisions/[revision].astro b/src/pages/mcp/revisions/[revision].astro index cb3b166..7be8e96 100644 --- a/src/pages/mcp/revisions/[revision].astro +++ b/src/pages/mcp/revisions/[revision].astro @@ -20,7 +20,7 @@ if (currentRevision(getDataset()).id === revision) return Astro.redirect("/mcp/" path={`/mcp/revisions/${revision}/`} > <div class="wrap"> - <Crumbs trail={[{ href: "/mcp/", label: "MCP auth atlas" }]} current={`Revision ${revision}`} /> + <Crumbs trail={[{ href: "/mcp/", label: "Servers" }]} current={`Revision ${revision}`} /> </div> <MatrixPage revisionId={revision} /> </Base> diff --git a/src/pages/mcp/scanner/index.astro b/src/pages/mcp/scanner/index.astro index fc75b43..33eda85 100644 --- a/src/pages/mcp/scanner/index.astro +++ b/src/pages/mcp/scanner/index.astro @@ -59,7 +59,7 @@ const ladder = [ path="/mcp/scanner/" > <div class="wrap"> - <Crumbs trail={[{ href: "/mcp/", label: "MCP auth atlas" }]} current="Scanner" /> + <Crumbs trail={[{ href: "/mcp/", label: "Servers" }]} current="Scanner" /> <header class="page-head"> <p class="eyebrow">Scanner</p> <h1>What a server's metadata says, measured every night</h1> diff --git a/src/pages/mcp/servers/[id].astro b/src/pages/mcp/servers/[id].astro index 060b45b..aedaef3 100644 --- a/src/pages/mcp/servers/[id].astro +++ b/src/pages/mcp/servers/[id].astro @@ -83,7 +83,7 @@ const classes = [ noindex={Boolean(server.withdrawn)} > <div class="wrap"> - <Crumbs trail={[{ href: "/mcp/", label: "MCP auth atlas" }]} current={server.name} /> + <Crumbs trail={[{ href: "/mcp/", label: "Servers" }]} current={server.name} /> <header class="page-head"> <p class="eyebrow">Server</p> <h1>{server.name}</h1> diff --git a/src/pages/mcp/servers/[id]/scan.astro b/src/pages/mcp/servers/[id]/scan.astro index d8dd19e..d7bd143 100644 --- a/src/pages/mcp/servers/[id]/scan.astro +++ b/src/pages/mcp/servers/[id]/scan.astro @@ -30,7 +30,7 @@ const gradeWord = view.grade.letter ? `grade ${view.grade.letter}` : view.grade. <div class="wrap"> <Crumbs trail={[ - { href: "/mcp/", label: "MCP auth atlas" }, + { href: "/mcp/", label: "Servers" }, { href: `/mcp/servers/${server.id}/`, label: server.name }, ]} current="Scan report" diff --git a/src/pages/standards/[id].astro b/src/pages/standards/[id].astro index 8625e3e..a719897 100644 --- a/src/pages/standards/[id].astro +++ b/src/pages/standards/[id].astro @@ -50,7 +50,7 @@ const repoFile = `https://github.com/letsauthlab/letsauth/blob/main/data/specs/$ noindex={spec.maturity === "withdrawn"} > <div class="wrap"> - <Crumbs trail={[{ href: "/standards/", label: "Agent auth atlas" }]} current={spec.name} /> + <Crumbs trail={[{ href: "/standards/", label: "Standards" }]} current={spec.name} /> <header class="page-head"> <p class="eyebrow">{BODY_LABEL[spec.body]} / {FAMILY_LABEL[spec.family]}</p> <h1>{spec.name}</h1> diff --git a/src/pages/standards/index.astro b/src/pages/standards/index.astro index 92f1d14..3d49eda 100644 --- a/src/pages/standards/index.astro +++ b/src/pages/standards/index.astro @@ -29,13 +29,13 @@ const repo = "https://github.com/letsauthlab/letsauth"; --- <Base - title="Agent auth atlas" + title="Standards" description={`The standards map for agent authorization: ${nodes.length} specifications, drafts and EU acts from ${bodies.length} publishing bodies and the ${relations.length} relations between them, each with its maturity and dated revisions.`} path="/standards/" > <div class="wrap"> <header class="page-head"> - <p class="eyebrow">Agent auth atlas</p> + <p class="eyebrow">Standards</p> <h1>The standards that decide how agents are authorized, and how they relate</h1> <p class="lede"> This map shows the specifications for agent authorization and the typed relations @@ -180,7 +180,7 @@ const repo = "https://github.com/letsauthlab/letsauth"; <p class="page-foot__links"> <a href="/standards/data.json">Download the map as JSON</a> <a href={`${repo}/tree/main/data`} rel="noopener">Browse the data</a> - <a href="/mcp/">MCP auth atlas</a> + <a href="/mcp/">Servers</a> </p> </footer> </div> diff --git a/tests/e2e/__screenshots__/explorer.spec.ts/scenario-phone.png b/tests/e2e/__screenshots__/explorer.spec.ts/scenario-phone.png index e28e0f1..b881820 100644 Binary files a/tests/e2e/__screenshots__/explorer.spec.ts/scenario-phone.png and b/tests/e2e/__screenshots__/explorer.spec.ts/scenario-phone.png differ diff --git a/tests/e2e/__screenshots__/feature-page.spec.ts/feature-phone.png b/tests/e2e/__screenshots__/feature-page.spec.ts/feature-phone.png index 99c911f..6508812 100644 Binary files a/tests/e2e/__screenshots__/feature-page.spec.ts/feature-phone.png and b/tests/e2e/__screenshots__/feature-page.spec.ts/feature-phone.png differ diff --git a/tests/e2e/__screenshots__/spec-page.spec.ts/spec-phone.png b/tests/e2e/__screenshots__/spec-page.spec.ts/spec-phone.png index 687da6d..3dc3f8a 100644 Binary files a/tests/e2e/__screenshots__/spec-page.spec.ts/spec-phone.png and b/tests/e2e/__screenshots__/spec-page.spec.ts/spec-phone.png differ diff --git a/tests/e2e/foundation.spec.ts b/tests/e2e/foundation.spec.ts index 23092fc..f1a2c1b 100644 --- a/tests/e2e/foundation.spec.ts +++ b/tests/e2e/foundation.spec.ts @@ -97,7 +97,7 @@ test.describe("foundation pages", () => { const current = page .getByRole("navigation", { name: "Primary" }) .locator('a[aria-current="page"]'); - await expect(current).toHaveText("Breach anatomy"); + await expect(current).toHaveText("Breaches"); await expect(current).toBeInViewport({ ratio: 1 }); expect(await current.evaluate((el) => getComputedStyle(el).borderBottomWidth)).toBe("2px"); });