Skip to content

docs: restructure the public IA and fix duplicate page titles - #21

Merged
echobt merged 2 commits into
mainfrom
droid/7ab9e242-cortex-docs-a-z-mintlify-ia
Sep 15, 2026
Merged

echobt merged 2 commits into
mainfrom
droid/7ab9e242-cortex-docs-a-z-mintlify-ia

Conversation

@echobt

@echobt echobt commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

What this is

A structural pass over the public docs at docs.cortex.foundation: one entry point per product, navigation grouped by task, pages findable by the labels the product actually uses, and a fix for a title-rendering bug. Docs-only — no backend or product code is touched.

This PR is intentionally a draft. Do not merge.

Why

The site was complete but harder to navigate than it needed to be. Three concrete problems drove the change:

  1. Every product had two competing entry points. chat/index ("Chat guides") and chat/overview ("Overview") both tried to introduce Chat, and the sidebar showed both.
  2. 26 pages rendered two <h1> elements. A body heading duplicated the frontmatter title. Verified against live HTML: rate_limited emitted both <h1 id="page-title"> and a second <h1 id="rate_limited">.
  3. The sidebar and the docs disagreed on names. The product says Artifacts, the page is Library. It says Planning, the page is Plans. Searching the label you see on screen did not find the page.

Chat was also the only product tab with no troubleshooting page, while Code, Bot, and CLI each had one.

IA before and after

Tab Before After
Get started 3 groups, no group roots 3 groups with roots; Quickstart, Downloads, Troubleshooting open their group
Chat 5 groups, hub + overview Hub + quickstart + tasks, Models/tools, Research/media, Context, How it works, Help
Code 4 groups, hub + overview Hub + quickstart + sessions + modes, Repositories, Where it runs, How it works, Help
Bot 4 groups, hub + overview Hub + quickstart + computer + tools, Control and scheduling, Desktop, How it works, Help
CLI 5 groups Unchanged shape, cli/index as the group root
Design 2 groups, hub + overview One group: hub, canvases, desktop, library
API Public + Problems Unchanged, with root pages so group titles open something
Changelog Release notes + Coming soon Unchanged

Each product tab now reads: hub, task guides, Help. Groups carry root pages so clicking a sidebar title opens a real page instead of only expanding.

Page inventory

Count
MDX pages before 99
MDX pages after 96
Added 1 (chat/troubleshooting)
Removed 4 (merged `chat

Removed pages keep working: /chat/overview, /code/overview, /bot/overview, and /design/overview are 301-redirected to the product hub. New redirects also cover /chat/artifacts, /code/goals, /troubleshooting, and /getting-started/desktop-app. All 20 redirects were checked to resolve to a real page with no chains.

No orphans, no dead navigation entries, no broken internal links, no duplicate titles (all checked mechanically).

Titles and search

  • Removed the redundant body # heading from all 24 problem pages, platform.mdx, and status.mdx. Every title now comes from frontmatter exactly once.
  • Gave Sessions and Canvases product-qualified titles, because each name covered two different pages and the pair was indistinguishable in search. sidebarTitle keeps the sidebar short, so both still read "Sessions" and "Canvases" where space is tight.
  • Added keywords to every content page so the product's own label finds the page. Artifacts to Library, Planning to Plans, Agents to Cortex Bot, Customize to Connectors to Tools.
  • Trimmed 19 descriptions under 160 characters, the point where search results and link previews truncate them. No claim changed.

Content

  • chat/troubleshooting.mdx (new) — turns, files and images, models and research, voice, quotas and access. Grounded in behavior already documented on the other Chat pages.
  • platform.mdx — was a placeholder telling contributors what not to write. Now answers the reader's question: no endpoints, no SDK, no keys, what to use instead, and how a launch would be announced.
  • problems/index.mdx — added a status-family table and a note on the two different 429s (rate_limited versus quota_exceeded).
  • api/overview.mdx, api/errors.mdx — practical guidance on which problem fields to branch on and which are unsafe to render.
  • Cross-links — every page now ends with a Related or Next section; 27 previously ended without one. Home gained a reference grid and a product chooser.

Copy stays in English, uses Cortex product names and domains, and mentions no other vendor.

Housekeeping

  • FernDesk sync removed (workflow, script, test, docs, CI step, gitignore entries). Mintlify is the source of truth, so there is no downstream mirror to keep current; leaving it would have pushed this rewrite into a second system.
  • Checker gap closed. check-docs-site.mjs walked a group's pages but not its root, so a dead group title would have published as a 404. It now walks both, with a regression test. Verified the test fails without the fix.
  • Image inventory fixed. images/product/README.md still pointed at the removed overview pages, and bot-public.png had gone unused. Every product screenshot is now used on exactly one page.
  • README and AGENTS record the one-hub-per-product rule, the closing-section rule, the 160-character description limit, the unique-title rule, and the keyword convention.

Safety review

  • No auth, OAuth, session, or identity-provider internals; no private routes, credentials, or operator runbooks.
  • No compliance claim of any kind. security/overview.mdx states plainly that Cortex does not claim SOC 2, GDPR certification, or HIPAA; that is the only place those words appear.
  • No competitor names anywhere in the copy, titles, or docs.json.
  • Only cortex.foundation domains are referenced.
  • Nothing was invented: pages are grounded in behavior already documented in this repo, and the Platform API stays explicitly unbuilt.
  • The Home + Documentation navbar and ink-on-cream CTAs are untouched; docs-ui.test.mjs still passes.

Validation

All run locally and green:

node scripts/check-docs-site.mjs
bash scripts/tests/check-docs-site.test.sh
node scripts/tests/docs-ui.test.mjs
npm exec --yes --package=mint@4.2.876 -- mint validate

Also checked mechanically: zero broken internal links, zero orphan pages, zero dead navigation slugs, zero duplicate titles, and every page has a title and a description within length.

The backend contract check (node scripts/check-docs-site.mjs ../backend) was not run here; it needs a backend checkout. No error codes or endpoints changed, so no coordinated backend PR is required.

Follow-ups

  • Member-only surfaces still have no screenshots (Code session timeline, Bot setup form and Computer rail, Design canvas, Bot desktop app). images/product/README.md tracks them; this PR adds no fake art.
  • platform.mdx will need a real reference if the inference API ships.

The docs site worked but was harder to navigate than it needed to be. Two
problems in particular: every product shipped both a `X/index` hub and a
separate `X/overview` page competing as the entry point, and 26 pages
rendered a second `<h1>` because a body heading duplicated the frontmatter
title.

Information architecture
- One hub per product. `chat|code|bot|design/overview` are merged into the
  matching `index` page and removed; redirects cover the old URLs.
- `docs.json` groups are re-cut around what a reader is trying to do:
  each product tab now runs hub, task guides, and a Help group.
- Groups carry `root` pages so a sidebar title opens something real.
- Added redirects for paths readers and search engines still hold:
  `/chat/artifacts`, `/code/goals`, `/troubleshooting`,
  `/getting-started/desktop-app`, and the merged overviews.

Titles
- Removed the body `#` heading from the 24 problem pages and `status.mdx`,
  where it duplicated the frontmatter title. The live pages rendered two
  `<h1>` elements; the canonical one is the page title.

Content
- Added `chat/troubleshooting.mdx`. Chat was the only product tab without
  one while Code, Bot, and CLI each had a page.
- Rewrote `platform.mdx` from a placeholder into a real answer about what
  does and does not exist, and `problems/index.mdx` around status families
  and the two different 429s.
- Gave `api/overview.mdx` and `api/errors.mdx` practical guidance on which
  problem fields are safe to render.
- Every page now closes with a Related or Next section, so no page is a
  dead end. Home gained a reference grid and a product chooser.

Housekeeping
- Removed the FernDesk sync workflow, script, test, and docs. Mintlify is
  the source of truth, so there is no downstream mirror to sync; the
  workflow would have pushed this rewrite to a second system.
- `check-docs-site.mjs` now walks a group's `root` as well as its `pages`,
  with a regression test. A dead group root would otherwise publish as a
  404 sidebar title.
- README and AGENTS record the one-hub-per-product rule and the new check.

Validation: check-docs-site, its shell suite, docs-ui, and mint validate
all pass.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@mintlify

mintlify Bot commented Sep 15, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
cortex-foundation-add13747 🟢 Ready View Preview Sep 15, 2026, 9:49 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

Follow-up polish on the IA pass. Two things made pages harder to find than
they needed to be: the sidebar and the docs disagreed on names, and several
descriptions were long enough to be truncated before they said anything
useful.

Search
- Added `keywords` to every content page, mapping the label a reader sees in
  the product to the page that documents it. The sidebar says **Artifacts**
  and the page is Library; it says **Planning** and the page is Plans; it
  says **Agents** and the page is Cortex Bot. Searching either term now
  finds the page. No content page relied on this before.
- Gave `Sessions` and `Canvases` product-qualified titles, because each name
  covered two different pages and the pair was indistinguishable in search.
  `sidebarTitle` keeps the sidebar short, so the pages still read
  "Sessions" and "Canvases" where space is tight.

Metadata
- Trimmed 19 descriptions to fit under 160 characters. Longer text is cut
  off in search results and link previews, so the trailing half was doing no
  work. No claim changed; where the cut cost a possessive, it was restored.
- Fixed the image inventory: `images/product/README.md` still pointed at the
  four overview pages this branch removed, and `bot-public.png` had gone
  unused when the Bot pages were merged. The capture is placed again, so
  every product screenshot is now used on exactly one page.

Docs
- README and AGENTS record the description limit, the unique-title rule, and
  the keyword convention, so the next page follows them.

Validation: check-docs-site, its shell suite, docs-ui, and mint validate all
pass. Re-checked structurally: no orphans, no dead navigation, no broken
internal links, no duplicate titles.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@echobt

echobt commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai

@echobt
echobt merged commit 36440a0 into main Sep 15, 2026
5 checks passed
@echobt
echobt deleted the droid/7ab9e242-cortex-docs-a-z-mintlify-ia branch September 15, 2026 22:46
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