feat(site): audience nav, /mcp + /platform pages, AI cards in feature grid#10
Merged
feat(site): audience nav, /mcp + /platform pages, AI cards in feature grid#10
Conversation
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.
This was referenced Apr 23, 2026
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
(${'{'}...{'}'} -> ${...}) 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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-proxyand 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
ai-proxydispatcher 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./mcp/page deleted./mcp/redirects to/ai/via Astro'sredirects:config (emits meta refresh + canonical link for SEO).Homepage feature grid
Pricing page refresh
Blog surface
Quality / polish
/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.postUrlused 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.Deploy coupling
Several surfaces claim features from barbacane-dev/barbacane#67 (AI governance middleware suite), which is open but not yet merged:
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 buildpasses locally (14 pages, no errors)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/mcp/redirects to/ai/cleanly in the deployed build/ai/and homepage code blocks/ai/,/platform/, and/pricing/on a preview tester