Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
bcc4251
fix: add redirects for /docs/prism/* → /docs/command-center/*
Apr 30, 2026
740341f
fix: resolve all 404s — add 71 redirects, fix 47 dead redirect target…
Apr 30, 2026
6918c35
ci: add PR checks for broken links and missing redirects on deleted p…
Apr 30, 2026
bae9308
fix: remove heading tags from non-content UI elements for SEO
May 3, 2026
be13b6d
SEO: optimize command-center/features batch 1 (caching, cost-tracking…
May 6, 2026
35c07e7
SEO: optimize command-center/features+guides batch 2 (observability, …
May 6, 2026
4856fa1
SEO: optimize command-center index/quickstart + cookbook batch 3
May 6, 2026
12bcac8
SEO: optimize cookbook batch 4 (error-feed/google-adk, eval-metrics, …
May 6, 2026
8899bb4
SEO: optimize cookbook batch 5 (mongodb, observability, portkey, batc…
May 6, 2026
d17bd3c
SEO: optimize cookbook/quickstart batch 6 (dataset-annotation, datase…
May 6, 2026
90f077b
SEO: optimize cookbook/quickstart batch 7 (inline-evals, knowledge-ba…
May 6, 2026
cc5b10f
SEO: optimize cookbook batch 8 (session-observability, synthetic-data…
May 6, 2026
0424f53
SEO: optimize cookbook/dataset batch 9 (trustworthy-rag, end-to-end-a…
May 6, 2026
f4dd8b5
SEO: optimize dataset/error-feed batch 10 (understanding-dataset, add…
May 6, 2026
2e1a20d
SEO: optimize error-feed batch 11 (severity-status, taxonomy, deep-an…
May 6, 2026
2c54289
SEO: optimize error-feed/evaluation batch 12 (trends, triage-workflow…
May 6, 2026
fef31a8
SEO: optimize evaluation/builtin batch 13 (chunk-utilization, clinica…
May 6, 2026
653c9e8
SEO: optimize evaluation/builtin batch 14 (cultural-sensitivity, cust…
May 6, 2026
5cf7e15
SEO: optimize evaluation/builtin batch 15 (customer-agent-query/termi…
May 6, 2026
d52f1d7
SEO: optimize evaluation/builtin batch 16 (hit-rate, image-instructio…
May 6, 2026
e80aaf7
SEO: optimize evaluation/builtin batch 17 (is-informal-tone, is-json,…
May 6, 2026
b1c791f
SEO: optimize evaluation/builtin batch 18 (no-harmful-therapeutic-gui…
May 6, 2026
ad7907d
SEO: optimize evaluation/builtin batch 19 (rouge, semantic-list-conta…
May 6, 2026
e1c2b0f
SEO: optimize evaluation batch 20 (tts-accuracy, eval-results, eval-t…
May 6, 2026
fab0c71
SEO: optimize evaluation+falcon-ai+faq+index+installation+integration…
May 6, 2026
7da5919
SEO: optimize integrations batch 22 (datadog, message-queues, mixpane…
May 6, 2026
ab93916
SEO: optimize integrations/traceai batch 23 (smol-agents, anthropic, …
May 6, 2026
010c220
SEO: optimize integrations/traceai batch 24 (haystack, instructor, ja…
May 6, 2026
e8feeb4
SEO: optimize integrations/traceai batch 25 (java/vector-databases, l…
May 6, 2026
12acca3
SEO: optimize integrations/traceai batch 26 (n8n, ollama, openai, ope…
May 6, 2026
13087d7
SEO: optimize traceai+knowledge-base+observe batch 27 (vercel, vertex…
May 6, 2026
16126e7
SEO: optimize observe/manual-tracing batch 28 (add-events, advanced-t…
May 6, 2026
83bf118
SEO: optimize observe+optimization batch 29 (semantic-conventions, se…
May 6, 2026
5a22335
SEO: optimize optimization+prompt batch 30 (using-python-sdk, optimiz…
May 6, 2026
70d503b
SEO: optimize prompt+protect batch 31 (versions-labels, create-scratc…
May 6, 2026
f882e96
SEO: optimize protect+prototype+quickstart batch 32 (protect-index, u…
May 6, 2026
f254d94
seo: optimize titles and descriptions for batch 33 (quickstart, relea…
May 6, 2026
9a7e937
seo: optimize titles and descriptions for batch 34 (sdk/evals)
May 6, 2026
dd9d84f
seo: optimize titles and descriptions for batch 35 (sdk/evals/metrics…
May 6, 2026
6ba48f4
seo: optimize titles and descriptions for batch 36 (sdk misc, self-ho…
May 6, 2026
9a219a3
seo: optimize titles and descriptions for batch 37 (simulation featur…
May 6, 2026
95087c5
seo: optimize titles and descriptions for batch 38 (tracing auto-inst…
May 6, 2026
6d2bced
seo: optimize titles and descriptions for batch 39 (tracing auto java…
May 6, 2026
f6f3983
seo: optimize titles for batch 40 (tracing auto: langgraph, litellm, …
May 6, 2026
6e6343d
seo: optimize titles and descriptions for batch 41 (tracing auto rema…
May 6, 2026
f37513f
seo: optimize titles and descriptions for batch 42 (tracing concepts …
May 6, 2026
7be3468
fix: harden check-deleted-pages script and restore card title size
May 6, 2026
c082cff
seo: optimize titles and descriptions for remaining 209 pages (admin-…
May 6, 2026
aab2b7b
merge: bring fix/prism-404-redirects up to date with dev
May 7, 2026
a01923a
merge: bring seo/optimize-titles-descriptions up to date with fix/pri…
May 7, 2026
5f1e529
revert: restore ## Next Steps and ## Related as proper h2 headings
May 7, 2026
98cfed1
chore: untrack local-only files accidentally staged in previous commit
May 7, 2026
84a96cd
fix: restore Card title to h3 for correct heading hierarchy
May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
47 changes: 47 additions & 0 deletions .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: PR Checks

on:
pull_request:
branches: [dev, main]

jobs:
link-audit:
name: Link audit & redirect enforcement
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # full history needed for git diff

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Fetch @futureagi/chat-widget
run: |
git clone --depth 1 \
https://x-access-token:${{ secrets.GH_PAT }}@github.com/future-agi/landing-page.git .landing-tmp
cp -r .landing-tmp/docs-agent/packages/chat-widget ./chat-widget
rm -rf .landing-tmp

- name: Patch chat-widget dependency
run: |
sed -i 's|"@futureagi/chat-widget": "workspace:\*"|"@futureagi/chat-widget": "file:./chat-widget"|' package.json

- name: Cache npm dependencies
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json', 'package.json') }}
restore-keys: ${{ runner.os }}-npm-

- name: Install dependencies
run: npm install

- name: Check broken nav & content links
run: node scripts/audit-links.mjs

- name: Check deleted pages have redirects
run: node scripts/check-deleted-pages.mjs ${{ github.base_ref }}
79 changes: 79 additions & 0 deletions scripts/check-deleted-pages.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/**
* Checks that every MDX page deleted in this branch has a corresponding
* entry in src/lib/redirects.ts. Fails with exit code 1 if any are missing.
*
* Usage: node scripts/check-deleted-pages.mjs [base-branch]
* Default base branch: dev
*/
import { execSync } from 'child_process';
import { readFileSync } from 'fs';

const baseBranch = process.argv[2] || 'dev';

// Get deleted MDX files compared to base branch
let deletedFiles;
try {
const output = execSync(
`git diff origin/${baseBranch}...HEAD --name-only --diff-filter=D`,
{ encoding: 'utf-8' }
);
deletedFiles = output.trim().split('\n').filter(Boolean);
} catch {
// If origin/base doesn't exist, try without origin/
try {
const output = execSync(
`git diff ${baseBranch}...HEAD --name-only --diff-filter=D`,
{ encoding: 'utf-8' }
);
deletedFiles = output.trim().split('\n').filter(Boolean);
} catch {
console.error('Could not determine deleted files — failing to surface the error.');
process.exit(1);
}
}

// Filter to only MDX pages under src/pages/
const deletedPages = deletedFiles.filter(f => f.startsWith('src/pages/') && f.endsWith('.mdx'));

if (deletedPages.length === 0) {
console.log('No MDX pages deleted in this branch. ✓');
process.exit(0);
}

// Convert file path to URL path
function fileToPath(file) {
return file
.replace(/^src\/pages/, '')
.replace(/\.mdx$/, '')
.replace(/\/index$/, '') || '/';
}

// Load redirects map
const redirectsRaw = readFileSync('src/lib/redirects.ts', 'utf-8');
const redirectEntries = [...redirectsRaw.matchAll(/["']([^"']+)["']:\s*["']([^"']+)["']/g)];
const redirectMap = new Set(redirectEntries.map(([, from]) => from));

// Check each deleted page
const missing = [];
for (const file of deletedPages) {
const urlPath = fileToPath(file);
if (!redirectMap.has(urlPath)) {
missing.push({ file, urlPath });
}
}

if (missing.length === 0) {
console.log(`All ${deletedPages.length} deleted page(s) have redirects. ✓`);
process.exit(0);
}

console.error(`\n✗ ${missing.length} deleted page(s) have no redirect in src/lib/redirects.ts:\n`);
for (const { file, urlPath } of missing) {
console.error(` ${urlPath}`);
console.error(` (deleted file: ${file})`);
}
console.error(`
To fix: add an entry to src/lib/redirects.ts for each path above, pointing to the closest current page.
Example: '${missing[0].urlPath}': '/docs/some-current-page',
`);
process.exit(1);
2 changes: 1 addition & 1 deletion src/components/AiChatWidget.astro
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ const turnstileSiteKey = import.meta.env.PUBLIC_TURNSTILE_SITE_KEY || '';
<path d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" />
</svg>
</div>
<h3 class="text-sm font-semibold text-[var(--color-text-primary)] mb-1">FutureAGI AI Assistant</h3>
<p class="text-sm font-semibold text-[var(--color-text-primary)] mb-1">FutureAGI AI Assistant</p>
<p class="text-xs text-[var(--color-text-muted)] mb-4 leading-relaxed max-w-[240px]">
Ask me anything about the FutureAGI platform — I can search across all docs instantly.
</p>
Expand Down
2 changes: 1 addition & 1 deletion src/components/GiscusComments.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export default function GiscusComments({ pagePath }: { pagePath: string }) {

return (
<div>
<h3 className="text-lg font-semibold text-[var(--color-text-primary)] mb-4">Questions & Discussion</h3>
<p className="text-lg font-semibold text-[var(--color-text-primary)] mb-4">Questions & Discussion</p>
<div ref={ref} />
</div>
);
Expand Down
4 changes: 2 additions & 2 deletions src/components/TableOfContents.astro
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ const feedbackUrl = `https://github.com/${GITHUB_REPO}/issues/new?title=${encode

{toc.length > 0 && (
<div class="space-y-4">
<h4 class="text-xs font-semibold uppercase tracking-wider text-[var(--color-text-tertiary)]">
<p class="text-xs font-semibold uppercase tracking-wider text-[var(--color-text-tertiary)]">
On this page
</h4>
</p>
<nav class="space-y-1">
{toc.map((heading) => (
<a
Expand Down
2 changes: 1 addition & 1 deletion src/components/docs/Card.astro
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ const Tag = href ? 'a' : 'div';
)}

<h3 class:list={[
"font-semibold text-[var(--color-text-primary)] mb-2",
"text-[1.125rem] font-semibold text-[var(--color-text-primary)] mb-2",
href && "group-hover:text-[var(--color-accent-primary)] transition-colors"
]}>
{title}
Expand Down
Loading
Loading