Site IA: broad sidebar, four spec families, one registry (#169)

Anthony: "that site needs better information architecture, it's impossible
to find anything", "start broad in sidebar and drill down with dedicated
pages, not all one page", and "I see none of our specs" on the home page.

One registry, lib/specs.ts, now lists every specification in four
families (people and agents; access and credentials; catalogs a site
serves about itself; agents and process), with a landing path, a
specification path and, for OpenServer's blocks, a parent. Everything
that lists specs reads it: the sidebar (lib/nav.ts, four groups: Start,
Specs, Tools, Company, rendered by SiteShell and by the home page string
from the same array), /specs and /specs/<family>, the home page's
Standards Surface grid (families with their specs, replacing the five
abstract primitives), /docs (grouped by family, then guides), the sitemap
and llms.txt. DOC_SLUGS is derived from the registry. Adding a spec is
one entry plus its files; the four hand-kept lists are gone.


Claude-Session: https://claude.ai/code/session_014cmNRtR2vL1p89dbVQ7FZJ

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Anthony Ettinger 2026-09-12 20:38:28 -07:00 • committed by GitHub
parent a005d7c716
commit eee9ce09c5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 553 additions and 219 deletions

View file

@ -4,14 +4,8 @@
// browser. Interactivity (hire-us form, CoinPay button, section scroll) lives in
// the `home-interactivity` client component.
import { renderInstallCommand } from "./install-command";
const primitives = [
{ name: "Identity", detail: "DIDs, OAuth accounts, profiles, and organization membership." },
{ name: "Coordination", detail: "Boards, posts, threads, comments, tasks, bids, and submissions." },
{ name: "Agents", detail: "Agent profiles, capabilities, runs, logs, permissions, and audit trails." },
{ name: "Value", detail: "Payments, escrow, wallets, reputation events, and settlement hooks." },
{ name: "Events", detail: "Event streams, webhooks, schema versions, and integration audit logs." }
];
import { renderNavHtml } from "./nav";
import { FAMILIES, familyTree } from "./specs";
const schemas = [
{ name: "logicsrc-task", path: "packages/schemas/schemas/logicsrc-task.schema.json" },
@ -128,26 +122,7 @@ export function renderPageMarkup(): string {
</div>
</div>
${renderInstallCommand("rail")}
<nav aria-label="LogicSRC sections">
<a class="active" href="#overview">Overview</a>
<a href="#schemas">Schemas</a>
<a href="/agent-swarm">Soon</a>
<a href="/agentbyte">AgentByte</a>
<a href="/credential-sharing">Credentials</a>
<a href="/openontology">OpenOntology</a>
<a href="/openprd">OpenPRD</a>
<a href="#cli">CLI</a>
<a href="/docs">Docs</a>
<a href="/blog">Blog</a>
<a href="/openspec">OpenSpec</a>
<a href="/pricing">Pricing</a>
<a href="/hire-us">Hire Us</a>
<a href="/about">About</a>
<a href="https://github.com/profullstack/logicsrc" target="_blank" rel="noreferrer">GitHub ↗</a>
<a href="/terms">Terms</a>
<a href="/privacy">Privacy</a>
<a href="#reference">Reference</a>
</nav>
<nav aria-label="LogicSRC sections">${renderNavHtml("/")}</nav>
</aside>
<section class="workspace">
<header id="overview" class="hero">
@ -170,16 +145,18 @@ export function renderPageMarkup(): string {
<section class="band">
<div class="section-head">
<h2>Standards Surface</h2>
<p>LogicSRC defines the shared language; products can implement it without owning the standard.</p>
<p>Four families of specifications. LogicSRC defines the shared language; products implement it without owning the standard.</p>
</div>
<div class="primitive-grid">
${primitives.map((item) => `
${FAMILIES.map((family) => `
<article class="tile">
<h3>${item.name}</h3>
<p>${item.detail}</p>
<h3><a href="/specs/${family.slug}">${family.name}</a></h3>
<p>${family.line}.</p>
<p class="tile-specs">${familyTree(family).map(({ spec }) => `<a href="${spec.landing ?? spec.doc ?? "/specs"}">${spec.name}</a>`).join(" · ")}</p>
</article>
`).join("")}
</div>
<p class="section-foot"><a href="/specs">Every spec, by family →</a></p>
</section>
<section id="agent-swarm" class="band coming-soon">