Skip to content

feat(site): audience nav, /mcp + /platform pages, AI cards in feature grid#10

Merged
ndreno merged 8 commits intomainfrom
feat/mcp-landing-page
Apr 29, 2026
Merged

feat(site): audience nav, /mcp + /platform pages, AI cards in feature grid#10
ndreno merged 8 commits intomainfrom
feat/mcp-landing-page

Conversation

@ndreno
Copy link
Copy Markdown
Contributor

@ndreno ndreno commented Apr 23, 2026

Summary

Full website lift driven by the strategic audit. Merges the old #9 homepage-only scope and then goes further: dedicated landing pages per audience, audience-oriented nav, unified AI gateway positioning (after verifying Barbacane actually has both outbound ai-proxy and inbound MCP), syntax-highlighted code blocks, pricing page refreshed for the new story, and a batch of trailing-slash 404 fixes.

What's in this PR

Positioning and IA

  • Homepage reframed around one AI gateway, both directions: hero, sub-copy, badge, feature-grid header, new "Your app calls LLMs through one dispatcher" section alongside the existing "Your OpenAPI becomes an MCP server" section.
  • New /ai/ page — audience landing for AI teams, covering both directions. Outbound section with ai-proxy dispatcher config (OpenAI / Anthropic / Ollama, fallback, named targets, cel-based policy routing). Inbound section with MCP server, opt-out model, middleware pass-through, shift-left lint. AI governance middleware cards (ai-prompt-guard, ai-token-limit, ai-cost-tracker, ai-response-guard). "One gateway, not three" architectural argument. Persona use cases. FAQ. CTA.
  • New /platform/ page — audience landing for platform teams. Two-sources-of-truth problem, three-step how-it-works, platform-oriented feature grid, persona use cases (IDP, governance, legacy modernization), FAQ with a crosslink to /ai/.
  • Old /mcp/ page deleted. /mcp/ redirects to /ai/ via Astro's redirects: config (emits meta refresh + canonical link for SEO).
  • Audience-oriented nav (Option C): AI teams, Platform teams, Docs, Blog, Pricing, GitHub. Removed anchor-only "Features" and "Use Cases" that broke off the homepage. Right-side CTA simplified to a single "Get started" plus theme toggle.
  • Footer tagline and Product column updated. Default meta description rewritten for the both-directions positioning.

Homepage feature grid

  • Reframed as "One gateway for your APIs and your agents".
  • MCP card promoted from position 15 to position 1.
  • Four weaker cards swapped for AI governance cards while keeping the grid at 18: Edge Ready → AI prompt guard, S3 Storage Proxy → AI token limits, Bot Detection → AI cost tracking, Remote Plugin Loading → AI response guard.
  • "29 WASM Plugins" renamed to "Every plugin you need" so copy stays accurate as the plugin suite grows.

Pricing page refresh

  • Meta description, hero subheading, Consulting/Training bullets, and FAQ updated to be AI- and MCP-aware without inventing new service offerings.
  • New FAQ: "Does this cover AI and MCP workloads?"

Blog surface

  • Blog index title, meta description, and subtitle expanded to cover MCP gateways and AI governance.

Quality / polish

  • Syntax highlighting on YAML code blocks on /ai/ and the homepage via Astro's <Code> component with { light: github-light, dark: github-dark } themes — matches what blog markdown already renders. YAML lives in frontmatter constants so template-literal escaping is handled in JS, not HTML entities.
  • Trailing-slash 404 fixes: blog index card links, "Read more" links, and the share postUrl used by Twitter/LinkedIn buttons in [slug].astro. Full audit confirmed all other /blog/ references (nav, footer, inter-article markdown links, platform page link, ai page link, back-to-blog link) already had trailing slashes.
  • Small copy fix: "blast radii" → "blast radiuses" on /ai/ (tech-industry usage is the Anglicised plural).

Deploy coupling

Several surfaces claim features from barbacane-dev/barbacane#67 (AI governance middleware suite), which is open but not yet merged:

  • Homepage hero sub-copy and the four AI cards in the feature grid
  • /ai/ AI governance section and the outbound ai-proxy FAQ answer

Do not deploy this branch to production until PR #67 is merged and released, otherwise the site overclaims. This is the deliberate launch-coordination strategy from Audit Phase 1.

Supersedes #9 (closed).

Test plan

  • npm run build passes locally (14 pages, no errors)
  • Visual review on npm run dev: homepage hero, MCP quickstart section, outbound ai-proxy section, AI governance section, feature grid, /ai/, /platform/, /pricing/, blog index, blog post page
  • Verify /mcp/ redirects to /ai/ cleanly in the deployed build
  • Verify Shiki highlighting renders correctly in both light and dark themes on /ai/ and homepage code blocks
  • Click every blog link (card titles, "Read more", nav, footer, inter-article) and confirm no trailing-slash 404
  • Click Twitter/LinkedIn share buttons on a blog post and confirm the shared URL is the canonical trailing-slash form
  • Confirm the Pricing dropdown still opens on hover
  • Social-unfurl the homepage, /ai/, /platform/, and /pricing/ on a preview tester
  • Do not merge and deploy until feat: AI gateway middleware suite + middlewares docs reorg (ADR-0024) barbacane#67 is merged

ndreno added 3 commits April 23, 2026 00:20
Lead the homepage with the MCP + AI gateway story. Spec-first becomes
the "how" in the second fold, not the primary pitch.

- Hero: "Turn any OpenAPI spec into an MCP tool server"
- Update title tag, default meta description, and badge (MCP native)
- Primary CTA now jumps to the new MCP quickstart section
- New "Your OpenAPI becomes an MCP server" section with an OAS example
  showing root-level enable plus per-operation opt-out, three short
  explainers on tool discovery, middleware pass-through, and opt-out
- New "AI governance, built in" section with four cards: prompt guard,
  token limits, cost tracking, response guard
- Feature grid header reframed to "One gateway for your APIs and your
  agents"; MCP card promoted from position 15 to position 1

Technical copy verified against docs.barbacane.dev/guide/mcp.html:
opt-out semantics, JSON-RPC 2.0 endpoint at /__barbacane/mcp, tool
name from operationId, input/output schemas merged from parameters
and responses, full middleware pipeline on tool calls.

Note: AI governance claims depend on gateway PR #67 landing. This
branch should not be deployed to production until #67 is merged and
released.
AI cards in the homepage feature grid

Reframe the site IA around the two buyer personas the strategic audit
identifies and bring the homepage feature grid in line with the new
AI-gateway positioning.

New landing pages:
- /mcp/  - For AI teams. Hero, MCP category explainer, four-step quickstart
  (add extension, vacuum lint, barbacane compile, serve), how it works,
  AI governance highlights, persona use cases, FAQ, CTA. Technical copy
  verified against docs.barbacane.dev/guide/mcp.html and /guide/vacuum.html.
- /platform/  - For platform teams. Hero, two-sources-of-truth problem,
  three-step how-it-works, platform-oriented feature grid (9 cards),
  persona use cases (internal developer platforms, API governance at
  scale, legacy gateway modernization), FAQ, CTA.

Nav (desktop + mobile + footer):
- "AI teams" -> /mcp/
- "Platform teams" -> /platform/
- "Docs" promoted from right-side CTA button to a primary nav item
- "Blog", "Pricing" dropdown, "GitHub" unchanged
- Removed: anchor-only "Features" and "Use Cases" items that jumped to
  homepage sections and broke when viewed from other pages
- Right-side actions narrowed to theme toggle plus a single "Get started"
  CTA
- Footer tagline and Product column updated to the new positioning

Homepage feature grid:
- "29 WASM Plugins" renamed to "Every plugin you need" so the copy stays
  accurate as the plugin suite grows
- Four weaker cards replaced with AI governance cards, keeping the grid
  balanced at 18:
  - Edge Ready -> AI prompt guard
  - S3 Storage Proxy -> AI token limits
  - Bot Detection -> AI cost tracking
  - Remote Plugin Loading -> AI response guard

Same PR #67 coupling as the earlier homepage repositioning: the AI
governance cards claim features from gateway PR #67, which is still
open. Do not deploy this branch to production before that PR merges.
The blog subtitle and meta description still framed the content as
API-gateway-only. Existing posts already lean in that direction, but the
next wave of articles (canonical "What is an MCP gateway", comparison
pieces, AI governance explainers) is MCP and AI focused, so the blog
index should set that expectation up front.
ndreno added 5 commits April 23, 2026 14:18
Second-pass pass on the website to reflect what Barbacane actually does.
After verifying against docs.barbacane.dev/guide/dispatchers.html#ai-proxy,
adr/0024-ai-gateway-plugin.md, and PRs #67 / #69, it was clear the previous
positioning underclaimed by roughly half: Barbacane is a full AI gateway
in BOTH directions (outbound ai-proxy to OpenAI / Anthropic / Ollama, and
inbound MCP from agents to your APIs), plus a spec-first API gateway.

Changes:

- New /ai/ landing page covering both directions. Hero, "two directions"
  overview, dedicated outbound section (ai-proxy with fallback + policy
  routing), dedicated inbound section (MCP, distilled from the old /mcp
  page), AI governance middleware cards, "one gateway not three"
  positioning argument, use cases across three personas, FAQ, CTA.

- Old /mcp/ page removed. A redirect from /mcp/ to /ai/ is configured in
  astro.config.mjs, which Astro emits as a proper meta-refresh page with
  canonical link for SEO. Existing blog-article /mcp/ links continue to
  work via the redirect.

- Homepage hero reworded to lead with "One AI gateway, both directions"
  instead of the narrower MCP-only framing. Primary CTA now jumps to /ai/.
  Badge updated from "MCP native" to "AI gateway".

- Homepage gains a new "Your app calls LLMs through one dispatcher"
  section showing the ai-proxy config (OpenAI primary, Anthropic +
  Ollama fallback), sitting alongside the existing "Your OpenAPI becomes
  an MCP server" section. Together they tell the both-directions story
  above the fold.

- Layout.astro default description, footer tagline, and nav URL updated
  for the new positioning. "AI teams" nav entry now points to /ai/.

Technical copy verified against the three sources above. Template
interpolation in the ai-proxy YAML examples is HTML-entity-escaped
(${'{'}...{'}'} -> $&#123;...&#125;) to avoid Astro interpreting it as JSX.

Same PR #67 coupling as before: the four AI governance middleware cards
depend on PR #67 landing.
Pricing page was the last non-blog surface still framed as pure API
gateway. Updated for the Option A positioning without inventing new
service offerings.

- Meta description: "spec-driven API gateway" -> "open-source AI gateway
  for LLMs and MCP, built on a Rust-native spec-first API gateway"
- Hero subheading: lead with "whether you run Barbacane as API gateway,
  outbound LLM proxy, inbound MCP gateway, or all three" so visitors
  landing on pricing from /ai/ or /platform/ see continuity
- Consulting bullets refreshed to acknowledge AI traffic patterns, LLM
  proxy migrations, and AI governance middleware plugins
- Training spec-driven bullet mentions MCP extensions
- FAQ "compliance" answer adds AI governance middlewares to the scope
- FAQ adds a new question: "Does this cover AI and MCP workloads?" so
  the same-software / same-license / same-services story is explicit
- FAQ on-prem answer: em dash -> colon, "air-gapped" added

Also fixed "blast radii" -> "blast radiuses" on /ai/ per review feedback;
tech-industry usage is the Anglicised plural, not the Latinate one.
Platform-team visitors arriving on /platform/ had no way to discover
that the same spec-first model covers AI traffic too. Added one FAQ
entry at the end of the existing set: "Does this extend to AI traffic?"
with a short answer and a link to /ai/.

Keeps /platform/'s core narrative (API gateway, drift, governance) as
the focus, adds a pointer for readers who want the AI story.
…ng slashes

Two small but visible issues:

1. Syntax highlighting. The OpenAPI YAML examples on /ai/ and the
   homepage were hand-rolled <pre><code> blocks with no highlighting.
   Swapped them for Astro's <Code> component (backed by Shiki), passing
   dual themes ({ light: github-light, dark: github-dark }) so the
   highlighting follows the site's theme toggle. Matches the rendering
   of YAML snippets in blog posts. As a side benefit, the YAML lives in
   frontmatter constants now, so the template-literal $ escaping is
   handled by the JS template string instead of HTML entities.

2. Trailing-slash 404s on blog links. astro.config.mjs sets
   trailingSlash: 'always', but /src/pages/blog/index.astro emitted
   hrefs like /blog/compliance-by-construction-part-1 without the final
   slash, producing the "404: Not found - Your site is configured with
   trailingSlash set to always" page. Both occurrences (title link and
   "Read more" link) now include the trailing slash.
…links

The canonical postUrl used for Twitter and LinkedIn share buttons was
emitted as https://barbacane.dev/blog/<slug> without the trailing slash.
With trailingSlash: 'always', someone clicking a shared link lands on a
404. Fixed to include the trailing slash.

All other /blog/ references audited (nav, footer, platform link,
ai page link, back-to-blog link, inter-article markdown links) already
use trailing slashes.
@ndreno ndreno requested a review from bbe64 April 23, 2026 12:56
@ndreno ndreno added enhancement New feature or request help wanted Extra attention is needed labels Apr 23, 2026
@ndreno ndreno self-assigned this Apr 23, 2026
@ndreno ndreno merged commit 1a1d77a into main Apr 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request help wanted Extra attention is needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant