Skip to content

docs: v1.4.1 overhaul — docs-first homepage, plugins/routing/providers sections, full accuracy pass - #6

Merged
MitulShah1 merged 12 commits into
developmentfrom
docs-overhaul-1.4
Aug 7, 2026
Merged

docs: v1.4.1 overhaul — docs-first homepage, plugins/routing/providers sections, full accuracy pass#6
MitulShah1 merged 12 commits into
developmentfrom
docs-overhaul-1.4

Conversation

@MitulShah1

Copy link
Copy Markdown
Contributor

Summary

A full overhaul of docs.ferrolabs.ai for the v1.4.0/v1.4.1 gateway. An audit of all 36 pages against the v1.2.0–v1.4.1 changelog found 1 fresh, 17 stale, 18 wrong — every page was corrected against the ai-gateway source, and the site was restructured into a cleaner, enterprise documentation experience.

The whole thing was produced source-grounded: agents read the Go source (not prior docs) for every claim, and caught several real errors in the process (e.g. budget prices from operator-configured rates not the live catalog; single-mode open-circuit handling; the retry default normalizing to 1).

Information architecture

  • Homepage is now the intro doc served at / (slug /); the marketing landing page is removed and /intro/ 301s to /.
  • /plugins/* — plugin-system overview + one page per built-in plugin (word-filter, max-token, rate-limit, budget, response-cache, request-logger) + a Managed-plugins page. Replaces the single guides/plugins.
  • /routing/* — routing overview + one page per strategy (single, fallback, loadbalance, least-latency, cost-optimized, conditional, content-based, ab-test). Replaces guides/routing-policies.
  • /providers (colored logo grid + endpoint-support matrix) and /providers/configuration (per-provider env vars). Replaces the three guides/providers* pages.
  • /guides/dashboard — new page for the embedded v1.4.0 dashboard.
  • guides/admin-auth merged into guides/auth.
  • Every moved URL has a server-side 301 in static/_redirects (plus a client-redirect fallback); all internal links repointed to the new IA.

Accuracy highlights (all v1.4.x-correct now)

  • Multi-stage plugin examples carry byte-identical config (the old examples made a v1.4 gateway refuse to start).
  • Budget exhaustion → 402 insufficient_quota (was 429); /metrics requires a scoped bearer; SkipProvider (removed Context.Skip); targets is an allowlist; retry honoured under every routing mode; FERRO_OLLAMA_MODELS; MASTER_KEY (removed ADMIN_BOOTSTRAP_KEY); base-URL-verbatim rule; per-IP rate limit on by default; real OTel var surface; /livez + /readyz; MCP stdio transport.
  • Changelog backfilled v1.2.0 → v1.4.1; OpenAPI spec version + new endpoints; FAQ fully rewritten.

Design & SEO

  • Self-hosted Inter + JetBrains Mono variable fonts (Roobert retired), preloaded with immutable cache headers.
  • 30 colored provider logos vendored to static/img/providers/.
  • src/data/product.ts single source of product facts wired into the chrome — fixes the v1.0.0 / 29-providers / Go 1.24 drift across hero/footer/JSON-LD.
  • Security headers (HSTS, nosniff, Referrer-Policy, Permissions-Policy), sitemap lastmod + /search exclusion, JSON-LD version bump, robots.txt + llms.txt refresh.
  • check-doc-accuracy.mjs: dropped the now-valid model_prefix ban, added an accuracy-ok escape and this audit's wrong-token denylist.

Test plan

  • pnpm typecheck
  • pnpm check:frontmatter
  • pnpm check:docs
  • pnpm build (validates every internal link + anchor; onBrokenLinks: throw)
  • Visual review of the new homepage, providers logo grid, and per-plugin/strategy pages
  • Confirm Cloudflare _redirects 301s resolve on the preview deploy

* feat(docs): updated docs
…curacy pass

Rebuild ferrolabs-docs around the v1.4.0/v1.4.1 gateway. An audit of all 36
pages against the v1.2.0–v1.4.1 changelog found 1 fresh, 17 stale, 18 wrong;
every page was corrected against the ai-gateway source, and the site was
restructured into a clean, enterprise documentation experience.

Information architecture
- Intro is now served at the site root (slug: /); the marketing landing page is
  removed and /intro/ 301s to /. Docs-style homepage with sidebar.
- New per-plugin section /plugins/* (system overview + 6 built-in plugin pages +
  a Managed-plugins page), replacing the single guides/plugins page.
- New per-strategy section /routing/* (overview + all 8 strategies), replacing
  guides/routing-policies.
- New /providers (logo grid + endpoint-support matrix) and
  /providers/configuration (per-provider env vars), replacing the three
  guides/providers* pages.
- New /guides/dashboard documenting the embedded v1.4.0 dashboard.
- guides/admin-auth merged into guides/auth. All moves have server-side 301s in
  static/_redirects plus client-redirect fallbacks; internal links repointed.

Accuracy (grounded in ai-gateway source)
- Fixed startup-breaking config examples (budget/cache/logger multi-stage entries
  now carry identical config), 402 insufficient_quota (was 429), scoped /metrics,
  SkipProvider (was removed Context.Skip), targets-as-allowlist, retry under every
  routing mode, FERRO_OLLAMA_MODELS, MASTER_KEY, base-URL-verbatim, per-IP rate
  limit on by default, real OTel var surface, /livez + /readyz, MCP stdio
  transport, and more across every rewritten page.
- Backfilled the changelog with v1.2.0 → v1.4.1; refreshed the OpenAPI spec
  (version + new endpoints); FAQ fully rewritten.

Design & SEO
- Self-hosted Inter + JetBrains Mono variable fonts (retire Roobert); preload +
  immutable cache headers.
- 30 colored provider logos vendored to static/img/providers/.
- Single source of product facts (src/data/product.ts) wired into footer/intro;
  fixes v1.0.0/29-providers/Go 1.24 drift everywhere.
- Security headers (HSTS, nosniff, Referrer-Policy, Permissions-Policy), sitemap
  lastmod + /search exclusion, JSON-LD version bump, robots + llms.txt refresh.
- check-doc-accuracy.mjs: drop the now-valid model_prefix ban, add an accuracy-ok
  escape and this audit's wrong-token denylist.

Verified: pnpm typecheck, check:frontmatter, check:docs, and pnpm build all pass.
@greptile-apps

greptile-apps Bot commented Aug 6, 2026

Copy link
Copy Markdown

Too many files changed for review (132 files, 100 file limit).

Bypass the limit by tagging @greptile-apps to review.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: d3e9e335-a7e1-4f8d-8362-bf3106c15882

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

h1 3rem->2.25rem, h2 2.1rem->1.75rem; nudge h3 1.55rem->1.4rem to keep the
hierarchy gap below the smaller h2.
h1 30px, h2 22px, h3 18px (from 36/28/22).
…d heading sizes

The page title uses Infima's .markdown h1:first-child (3rem) and section headings
use .markdown > h2 (2rem) / > h3 (1.5rem), which override the :root --ifm-hN
vars. Re-point those scoped rules with !important so the compact scale wins.
Verified in-browser: h1 30px, h2 22px (was 48/34).
Links were all one weight/color, so parents, leaves, and the active page read
flat. Now: leaf links in softer slate at a lighter weight; collapsible parents
in full ink + 600; the active page in teal + 650 with a tinted pill; clearer
hover. Verified in-browser (active 650/teal, parent 600/ink, leaf 450/slate).
…ng, short labels

The sidebar was a ~65-row flat list. Now: Routing (8), Plugins (7), SDKs (7),
Frameworks (13), Deployment (5), Migrations (3) and Ferro Labs Managed live in
collapsed categories whose header links to the section overview; redundant
self-labeled rows removed; MCP/Dashboard/strategy/plugin labels shortened to
nav-length. Default view is ~38 rows.

Pixel pass: nested children drop the per-item icon (parent row carries it),
get a smaller size and an indent guide; the link-category caret button is
restyled as the rotating chevron instead of being hidden (expandability was
invisible); right-hand TOC tightened (0.85rem, muted ink, teal active).
Verified in-browser at 1440px on / and /routing/fallback/.
…t group

The link run was absolutely page-centered, but the right group (GitHub +
theme + search) is ~2x the brand's width, so page-centering left a ~330px
hole after the logo and ~90px before GitHub. The run now centers in the
free space between its neighbours via symmetric auto margins (container
gap cancelled on the brand side). Measured 226px/226px, all three groups
on one vertical midline.
…ions, gated

- _headers: X-Robots-Tag: noindex on /search/* (robots.txt Disallow blocks
  crawling but not indexing from external links)
- Trim the 10 meta descriptions over 170 chars (homepage, frameworks pages,
  kubernetes, oss-vs-managed, litellm migration) to ~140-165
- check:frontmatter now enforces description length bounds (50-170) so
  truncation-length descriptions fail CI instead of drifting back
…le-load, Scalar pinning, schema cleanup

From the 6-pass SEO audit of this branch's build (report in workspace
docs/audits/docs.ferrolabs.ai-audit/):

- 404 page was in sitemap.xml with a self-canonical and no noindex — excluded
  via sitemap ignorePatterns + X-Robots-Tag noindex in _headers
- Added 301s for two previously-live URLs deleted in earlier releases with no
  redirect: /guides/workspace-sign-in-domains/ -> /guides/auth/,
  /sdks/overview/ -> /integrations/sdk/openai-compatible/
- Fonts downloaded twice: preload pointed at /fonts/* while webpack rewrote the
  CSS url() to a hashed /assets/fonts/ copy. @font-face now lives as a raw head
  <style> so preload and CSS share one URL (~86 KB saved per cold load)
- Scalar API-reference script was unpinned jsdelivr "latest" on every page —
  now vendored (static/js/scalar-api-reference-1.64.0.js), same-origin,
  version-pinned, immutable-cached. Route-scoping to /api tracked as follow-up
- Removed deprecated HowTo schema (fly-io); merged the homepage's duplicate
  SoftwareApplication into the site-wide entity (license + sameAs folded in);
  added WebSite SearchAction for the real /search/?q= endpoint
- Fixed brand drift "Ferro AI Gateway" -> "Ferro Labs AI Gateway" in 7 files,
  including 3 meta descriptions AI engines quote

Verified in rebuilt output: pinned script src, single font URL, one
SoftwareApplication, SearchAction present, HowTo gone, /404/ out of sitemap;
typecheck + frontmatter + accuracy checks + full build green.
…M-alternative intent, homepage category keywords

- Scalar bundle no longer loads on every page: local plugin fork
  (src/plugins/scalar-lazy, MIT-derived from @scalar/docusaurus) registers the
  same /api route but the component lazy-loads the vendored, version-pinned
  bundle on first mount. Homepage JS/CSS payload drops ~2.6MB -> ~0.7MB
  uncompressed. Verified in-browser: no scalar reference on any other page,
  /api renders the full reference via the lazy load.
- /guides/why-ferro/ retargeted at its query: title/description/opening now
  carry "LiteLLM alternative" / "Portkey replacement" language (every SERP
  competitor brands an alternatives page; ours had the content but zero
  keyword match). Sidebar label "Comparisons & Alternatives"; migration links
  promoted; "zero runtime dependencies" softened to "single static binary".
- Homepage leads with the category: opening sentence now says "open-source,
  self-hosted AI gateway" (was buried mid-page), plus a production-readiness
  line (benchmarks, retries/breakers, probes) for the platform-lead persona.
@MitulShah1
MitulShah1 merged commit ff0393a into development Aug 7, 2026
3 checks passed
MitulShah1 added a commit that referenced this pull request Aug 7, 2026
…s sections, full accuracy pass (#6) (#7)

* feat(docs): updated docs
@MitulShah1
MitulShah1 deleted the docs-overhaul-1.4 branch August 7, 2026 04:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant