Skip to content
Blume
Esc
↑↓navigate↵open⌘Jpreview
Customer stories

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
Francisco, right, and a colleague smiling over lunch at a sidewalk café table

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, Ordinal

Docs 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:

  1. 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.
  2. 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.
  3. Writes the docs change following the repository's CLAUDE.md, which spells out Blume's syntax and conventions.
  4. Runs npm run build and npm run validate, and goes on only if both pass with no errors.
  5. 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.

WhatNumber
Hand-written pages80, across 5 header tabs
API reference pages72, from 2 OpenAPI specs
Redirects79, 72 of them for endpoints
Guide URLs changed0
Webhook fields converted273, on 22 event pages
Francisco's hands-on timeAbout 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.

Read another story.Or see every team on Blume.

Upgrade your docs with Blume.

Install today and ship a production-grade docs site in minutes. Free and open source, forever.

npx blume init