Ordinal moved to Blume while walking the dog.
Ordinal, the social media platform for B2B teams, keeps its docs in Git and changes them through pull requests. Blume moved those docs in an evening, and a Claude Code routine now keeps them current.
- Hands-on time; Claude Code did the rest
- 20 min
- Guide URLs changed in the move
- 0

Ordinal helps B2B teams run social together, with LinkedIn at the center. Teams draft and schedule posts for the company page and for executives and employees, route them through approvals, coordinate likes, comments, and reposts with Team Engagements, and track performance in one analytics view. For developers and AI assistants, Ordinal offers a REST API, an MCP server, and webhooks. Ordinal is a Y Combinator company.
Its docs cover all of it: a guide for every feature, references for two APIs, and a page for every webhook event.
How the docs started
Ordinal's docs started on Mintlify, and Mintlify got them off the ground fast. Francisco's co-founder, Jeffrey Zhao, signed the team up, and though Jeffrey isn't an engineer, within a few days and with a $200 Cursor subscription he had fed Mintlify all of Ordinal's product context and stood up solid docs.
Mintlify's agent became part of how the team worked. It opened pull requests to update the docs as the product changed, and wrote 46 of the last 60 docs changes Ordinal merged before the move.
Day to day, the team worked in Git. The docs were MDX in their own repository from the start, and changes went through GitHub pull requests, so a hosted editor wasn't something Ordinal needed. With the yearly renewal coming up, Francisco looked at moving the docs to a framework the team could run itself.
The move
He'd had his eye on Blume for a few months. One evening in September 2026, he ran npx blume migrate mintlify, which found Ordinal's docs.json and handed the job to Claude Code with Blume's migration playbook. Its bundled codemod rewrote the frontmatter and icons on 68 pages in one pass, and Claude worked through the rest unattended while Francisco walked the dog.
The content moved almost one to one. Cards (about 250 of them), Steps, Tabs, Accordions, Expandables, CodeGroups, and Frames all have Blume equivalents with nothing to import, and callouts became ::: directives. The 273 response fields on the 22 webhook event pages became type tables.
The real work was keeping URLs. Mintlify's sidebar groups lived only in docs.json, so Claude rebuilt them as group folders like (calendar-and-posts)/, which add no segment to the URL, and gave pages that changed folders a slug that kept their old address. The Guides tab sits at the site root, so nothing had to move under a new prefix. Not one guide URL changed.
The API reference came for free: pointing openapi() at Ordinal's two existing specs built 72 endpoint pages with schemas, code samples, and a Try it panel. Blume names endpoint pages by their operation ID, where Mintlify used each one's summary, so 72 of the site's 79 redirects send old endpoint URLs to their new pages. On Vercel, they're real 301s.
Before cutover, blume validate checked every link and redirect. Its first run flagged 52 broken links, which exposed 19 pages a content glob had silently left out of the build. With those back, the site went live on Vercel the next day.
Everything else was a line or two in blume.config.ts: llms.txt, a Markdown version of every page, a docs MCP server beside Ordinal's own product MCP server, the assistant, PostHog analytics, and Edit on GitHub links.
“I started the migration and went to walk the dog. About 20 minutes of my time, and every URL still worked.”
FranciscoCo-founder, OrdinalDocs that keep themselves current
Mintlify's agent had been writing most of the docs changes, so Ordinal rebuilt that job as a scheduled Claude Code routine. Every weekday at 5pm Chicago time, a cloud Claude Code session checks out both the product and the docs repositories, then:
- Lists the product pull requests merged in the last seven days, skipping any that a docs pull request already references, so it never repeats work that's already documented.
- Reads each one's description and diff and decides whether customers would notice. Bug fixes, refactors, backfills, internal automations, and work behind feature flags are skipped.
- Writes the docs change following the repository's
CLAUDE.md, which spells out Blume's syntax and conventions. - Runs
npm run buildandnpm run validate, and goes on only if both pass with no errors. - Opens one pull request per change for a person to review and merge.
The routine needs only git, the GitHub CLI, and npm, so it runs with no connectors attached. It reads pull request text that other people wrote, and keeping email, Slack, and payments out of its reach limits what an injected instruction could do.
The results
Every guide URL survived the move, the API references build from Ordinal's own specs, and the docs keep themselves current through pull requests the team reviews.
| What | Number |
|---|---|
| Hand-written pages | 80, across 5 header tabs |
| API reference pages | 72, from 2 OpenAPI specs |
| Redirects | 79, 72 of them for endpoints |
| Guide URLs changed | 0 |
| Webhook fields converted | 273, on 22 event pages |
| Francisco's hands-on time | About 20 minutes |
The whole move is one public pull request, and the new docs are live at docs.tryordinal.com.
To make the same move, follow the Mintlify migration guide.
