From 6f1788adf2a35a3cfbd65b321de3bce4637b6417 Mon Sep 17 00:00:00 2001 From: smaramwbc <145447586+smaramwbc@users.noreply.github.com> Date: Mon, 25 May 2026 13:40:55 +0100 Subject: [PATCH] seo: add /about page with neutral brand voice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit External SEO audit (Section 3 #7) flagged the absence of an About page as a missing EEAT signal — search quality raters and AI answer engines look for one to confirm a project is real and verifiable. Ship one. Constraints honored: * Neutral brand voice — no founder names anywhere. The Statewave project is the identity for public surfaces; individual contributors are visible on GitHub. Sign-off is "the Statewave team". * No managed-cloud / VC framing — the positioning that already runs across the site (open source, self-hosted, Apache-2.0, framework-neutral, provenance-first) carries through verbatim. * No drift on proof figures — hoisted the 680 / 55 / 8/8 / 2/8 stats out of HomePage.tsx into a shared src/lib/proof-stats.ts so the homepage hero, the deeper ProofSection, and now /about all cite the same source. Matches the "proof figures mirrored across many surfaces — recompute together" rule. Page layout (mirrors the simple-page idiom from CookiesPage etc.): 1. Eyebrow + h1 + mission paragraph (what Statewave is and why) 2. "What we're committed to" — four principles (open source / self-hosted / provenance first / framework-neutral) 3. "Proven, not promised" — the same PROOF_STATS the homepage surfaces, plus a link to statewave-bench so anyone can repro 4. "What we ship" — the nine public statewave-* repos with a one-line description of each 5. "Get in touch" — GitHub issues for product, licensing@ for commercial, press@ for press, security@ for disclosures. Wiring (PUBLIC_ROUTES is the single source of truth for sitemap, nav, and llms.txt — adding /about flows through all of them): * src/lib/seo-meta.ts — add '/about' to RouteKey union and PUBLIC_ROUTES; add PAGE_META entry with breadcrumb, title, description, priority 0.6, monthly changefreq. * src/App.tsx — lazy route for AboutPage. * src/components/Navbar.tsx — top-nav link (last position). * src/components/Footer.tsx — link in the Community column. * public/sitemap.xml — new entry. * public/llms.txt — new "About" line in the Primary links list. Verification: * `npm run build` — 1.5% HTML size delta on the homepage (+152 bytes from the extra nav link, well under SSR floor). * `npx vitest run` — 282 + 1 skipped. The sitemap-parity test in tests/seo-static.test.ts (which iterates PUBLIC_ROUTES) and the JSON-LD URL tests pick up /about automatically. * `npm run lint`, `npm run typecheck` — green. --- public/llms.txt | 1 + public/sitemap.xml | 5 + src/App.tsx | 2 + src/components/Footer.tsx | 1 + src/components/Navbar.tsx | 1 + src/lib/proof-stats.ts | 14 +++ src/lib/seo-meta.ts | 11 ++ src/pages/AboutPage.tsx | 259 ++++++++++++++++++++++++++++++++++++++ src/pages/HomePage.tsx | 13 +- 9 files changed, 295 insertions(+), 12 deletions(-) create mode 100644 src/lib/proof-stats.ts create mode 100644 src/pages/AboutPage.tsx diff --git a/public/llms.txt b/public/llms.txt index dd1ac60..8532445 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -16,6 +16,7 @@ Statewave stores immutable episodes, compiles them into typed memories with prov - [Use Cases](https://www.statewave.ai/use-cases) — support agents, coding copilots, account intelligence, voice continuity, and multi-agent systems. - [Connectors](https://www.statewave.ai/connectors) — GitHub, Markdown/ADRs, MCP, Slack, Discord, Zendesk, Intercom, Freshdesk, Notion, Gmail, n8n, Zapier. - [Developers](https://www.statewave.ai/developers) — SDKs, docs, API reference, and examples. +- [About](https://www.statewave.ai/about) — what Statewave is, who it's for, the repos that ship it, and how to get in touch. ## Documentation diff --git a/public/sitemap.xml b/public/sitemap.xml index 14d6c25..71fffeb 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -30,4 +30,9 @@ monthly 0.8 + + https://www.statewave.ai/about + monthly + 0.6 + diff --git a/src/App.tsx b/src/App.tsx index 2acf311..35125f1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,6 +15,7 @@ const DemoPage = lazy(() => import('./pages/DemoPage').then(m => ({ default: m.D const PrivacyPage = lazy(() => import('./pages/PrivacyPage').then(m => ({ default: m.PrivacyPage }))) const TermsPage = lazy(() => import('./pages/TermsPage').then(m => ({ default: m.TermsPage }))) const ImpressumPage = lazy(() => import('./pages/ImpressumPage').then(m => ({ default: m.ImpressumPage }))) +const AboutPage = lazy(() => import('./pages/AboutPage').then(m => ({ default: m.AboutPage }))) const NotFoundPage = lazy(() => import('./pages/NotFoundPage').then(m => ({ default: m.NotFoundPage }))) export default function App() { @@ -35,6 +36,7 @@ export default function App() { } /> } /> } /> + } /> } /> diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index c5c763e..677966d 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -60,6 +60,7 @@ export function Footer() {
  • GitHub
  • Examples
  • Roadmap
  • +
  • About
  • Launch waitlist
  • Press kit
  • diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 16f98a2..3fcebf5 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -11,6 +11,7 @@ const links = [ { to: '/use-cases', label: 'Use Cases' }, { to: '/connectors', label: 'Connectors' }, { to: '/developers', label: 'Developers' }, + { to: '/about', label: 'About' }, ] /** diff --git a/src/lib/proof-stats.ts b/src/lib/proof-stats.ts new file mode 100644 index 0000000..cce55f8 --- /dev/null +++ b/src/lib/proof-stats.ts @@ -0,0 +1,14 @@ +/** + * Single source of truth for the Statewave credibility figures surfaced + * across the marketing site. Mirrored on the homepage (hero credibility + * row, prerendered into dist/index.html, and the below-the-fold + * ProofSection) and on the /about page. Recompute together when the + * eval suite or the support workflow benchmark changes — drift between + * surfaces makes us look sloppy, and the benchmark is 8/8 (not 9/9). + */ +export const PROOF_STATS = [ + { value: '680', label: 'Unit tests' }, + { value: '55', label: 'Eval assertions' }, + { value: '8/8', label: 'Support workflow score' }, + { value: '2/8', label: 'Naive approach score' }, +] as const diff --git a/src/lib/seo-meta.ts b/src/lib/seo-meta.ts index 8a075df..9faf8e2 100644 --- a/src/lib/seo-meta.ts +++ b/src/lib/seo-meta.ts @@ -44,6 +44,7 @@ export type RouteKey = | '/use-cases' | '/connectors' | '/developers' + | '/about' /** Canonical, indexable public routes. Order matters — used to render the * sitemap and the llms.txt index. */ @@ -54,6 +55,7 @@ export const PUBLIC_ROUTES: readonly RouteKey[] = [ '/use-cases', '/connectors', '/developers', + '/about', ] as const export interface PageMeta { @@ -132,6 +134,15 @@ export const PAGE_META: Record = { priority: 0.8, changefreq: 'monthly', }, + '/about': { + title: 'About Statewave — Open-Source Memory Runtime for AI Agents', + description: + 'Statewave is an open-source, self-hosted memory runtime for AI agents — durable episodic and semantic memory with provenance, deterministic ranking, and token-bounded context bundles. Apache-2.0, framework-neutral, no managed cloud.', + breadcrumbLabel: 'About', + ogType: 'website', + priority: 0.6, + changefreq: 'monthly', + }, } /** Look up metadata for an arbitrary path. Falls back to home metadata if the diff --git a/src/pages/AboutPage.tsx b/src/pages/AboutPage.tsx new file mode 100644 index 0000000..d196cd7 --- /dev/null +++ b/src/pages/AboutPage.tsx @@ -0,0 +1,259 @@ +import { Section } from '../components/Section' +import { Heading } from '../components/Heading' +import { usePageSEO } from '../lib/seo' +import { PROOF_STATS } from '../lib/proof-stats' + +/* About page. + * + * Neutral brand voice — no founder names. The Statewave project speaks for + * itself; individual contributors are visible on GitHub. The audience is + * developers and ops teams evaluating an open-source memory runtime for + * their own infrastructure, plus AI quality raters and answer engines + * looking for the EEAT signals the external SEO audit asked for (Section + * 3 #7). All claims here are backed by the same ground truth surfaced on + * the homepage (PROOF_STATS) and the source repositories below. + */ + +const PRINCIPLES = [ + { + title: 'Open source under Apache 2.0', + body: 'Server, SDKs, connectors, and this website are public on GitHub. Apache-2.0 is permissive and includes an explicit patent grant, so teams can use, fork, modify, distribute, and ship commercial products on Statewave without a separate agreement.', + }, + { + title: 'Self-hosted, no managed cloud', + body: 'Statewave runs on your infrastructure. Episodes, compiled memories, and the embeddings that index them stay in your Postgres. There is no Statewave-hosted backend the SDK secretly phones home to — the demo on the homepage talks to a Statewave instance we operate transparently.', + }, + { + title: 'Provenance first', + body: 'Every compiled memory carries the IDs of the episodes it was derived from, with confidence scores and validity windows. Context bundles can be traced back to the raw events that produced them, so an agent’s answer is always explainable to a human.', + }, + { + title: 'Framework-neutral', + body: 'Compilation goes through LiteLLM (100+ providers, including locally-hosted Ollama / vLLM). Retrieval and context assembly are provider-agnostic. Statewave is an HTTP service plus two thin SDKs — nothing on the agent side is locked to a specific LLM, framework, or vendor.', + }, +] as const + +const REPOS = [ + { name: 'statewave', desc: 'Core server — REST API, compiler, ranking, storage layer.', url: 'https://github.com/smaramwbc/statewave' }, + { name: 'statewave-py', desc: 'Python SDK.', url: 'https://github.com/smaramwbc/statewave-py' }, + { name: 'statewave-ts', desc: 'TypeScript SDK.', url: 'https://github.com/smaramwbc/statewave-ts' }, + { name: 'statewave-docs', desc: 'Architecture, API contracts, ADRs, deployment guides.', url: 'https://github.com/smaramwbc/statewave-docs' }, + { name: 'statewave-examples', desc: 'Runnable examples and end-to-end agent flows.', url: 'https://github.com/smaramwbc/statewave-examples' }, + { name: 'statewave-connectors', desc: 'GitHub, Markdown/ADRs, MCP, Slack, Discord, Zendesk, Intercom, Freshdesk, Notion, Gmail, n8n, Zapier connectors.', url: 'https://github.com/smaramwbc/statewave-connectors' }, + { name: 'statewave-admin', desc: 'Read-only operator console for inspecting subjects, episodes, memories, and bundles in a running instance.', url: 'https://github.com/smaramwbc/statewave-admin' }, + { name: 'statewave-bench', desc: 'Open evaluation harness — every published proof figure is reproducible by running these scripts.', url: 'https://github.com/smaramwbc/statewave-bench' }, + { name: 'statewave-web', desc: 'This marketing site.', url: 'https://github.com/smaramwbc/statewave-web' }, +] as const + +export function AboutPage() { + usePageSEO({ + title: 'About Statewave — Open-Source Memory Runtime for AI Agents', + description: + 'Statewave is an open-source, self-hosted memory runtime for AI agents — durable episodic and semantic memory with provenance, deterministic ranking, and token-bounded context bundles. Apache-2.0, framework-neutral, no managed cloud.', + }) + + return ( + <> +
    +
    +

    + About +

    +

    + About Statewave +

    +

    + Statewave is an open-source memory runtime for AI agents and LLM + applications. It records raw events as immutable episodes, + compiles them into typed semantic and episodic memories with + provenance, and returns ranked, token-bounded context bundles + that drop straight into a prompt. +

    +

    + We built Statewave because the problem most LLM apps spend + engineering time on isn’t which model to call — it’s + remembering what was already said, decided, or learned. Prompt + stuffing breaks at scale, naive RAG returns embedding-nearest + instead of decision-relevant, and chat-history replay drowns + agents in noise. A memory layer with structure, ranking, and + provenance is infrastructure, not a feature, and it deserves to + be open and self-hostable. +

    +
    +
    + +
    +
    + + What we’re committed to + +
      + {PRINCIPLES.map((p) => ( +
    • +

      + {p.title} +

      +

      + {p.body} +

      +
    • + ))} +
    +
    +
    + +
    +
    + + Proven, not promised + +

    + Every claim on this site is backed by automated evals and + benchmarks that run in CI. The figures below come from the + {' '} + statewave-bench + {' '} + harness — anyone can clone it and reproduce them. +

    +
    + {PROOF_STATS.map((s) => ( +
    +

    + {s.value} +

    +

    {s.label}

    +
    + ))} +
    +
    +
    + +
    +
    + + What we ship + +

    + Statewave is split across focused repositories so teams can + adopt only what they need. All are public on GitHub under + Apache-2.0. +

    + +
    +
    + +
    +
    + + Get in touch + +
      +
    • + + Bugs, feature requests, integration questions: + {' '} + open an issue on{' '} + + GitHub + + . That’s where the project is built in the open. +
    • +
    • + + Commercial use, enterprise support, procurement: + {' '} + + licensing@statewave.ai + + . Apache-2.0 is permissive — you don’t need a contract + to use Statewave commercially. We offer optional SLA, + indemnity, architecture review, and managed hosting on + request. +
    • +
    • + + Press, partnerships, brand assets: + {' '} + + press@statewave.ai + + . Logos and a one-page fact sheet are on the{' '} + + press + {' '} + page. +
    • +
    • + + Security disclosures: + {' '} + + security@statewave.ai + + . Please don’t open public issues for vulnerabilities. +
    • +
    +

    + — the Statewave team +

    +
    +
    + + ) +} diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 0e53bbf..d6d5047 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -26,21 +26,10 @@ import { websiteJsonLd, } from '../lib/seo-meta' import { FAQ_ENTRIES } from '../lib/faq' +import { PROOF_STATS } from '../lib/proof-stats' import { useChatWidget, useTrackDemoCta, DEMO_SUBJECTS } from '../lib/widget-context-api' import { useRef, useState, useEffect, useCallback } from 'react' -/** Single source of truth for the credibility figures the homepage - * surfaces. Mirrored in both the prerendered HeroSection (so AI crawlers - * and answer engines see them in the initial HTML) and the below-the-fold - * ProofSection. Recompute together when the eval suite or benchmark - * changes — drift between surfaces makes us look sloppy. */ -const PROOF_STATS = [ - { value: '680', label: 'Unit tests' }, - { value: '55', label: 'Eval assertions' }, - { value: '8/8', label: 'Support workflow score' }, - { value: '2/8', label: 'Naive approach score' }, -] as const - export function HomePage() { // The home page is the canonical landing for Organization, WebSite, and // SoftwareApplication structured data — also baked into index.html for