← All case studies

695 files in 3 days

Automated a 695-file cross-product migration and completed it in three days

Turned a multi-week rename into a 3-day operation by building 6 AI-assisted commands and a standalone Python redirect validator. 695 files, 349 URL mappings, 486 images audited across 4 products. Zero 404s in production.

695

Files touched

3 days

End-to-end execution

349

URL mappings validated

486

Images audited

The challenge

Four products, renamed at the same time, across a large documentation site, with multiple writers and a fixed deadline. The conventional approach (manual find-and-replace, screenshot review, redirect spreadsheets) would have taken weeks.

Speed wasn't the only issue. A documentation rename isn't just a find-and-replace problem. It touches YAML config files, frontmatter, component props, changelog entries, SVG icons, and redirect files. Miss a configuration reference and the build crashes. Miss a redirect and a user hits a 404 from a bookmark, a search result, or a cross-product link.

The largest single rename touched 390 files across 8 commits: 265 cross-reference files spanning 17 other products, 88 partial files, roughly 70 render path updates. That was one of four.

The approach

None of the tools were designed upfront. Each one came from hitting a specific problem during execution. By the end of three days, the toolkit was 6 AI-assisted commands and a standalone Python CLI.

The rename engine

The core rename automation tool handled folder renames, content updates, redirects, cross-references, and bridge phrasing ("formerly X"). It ran in two passes: first the product's own files, then cross-references in other products. That let multiple writers work in parallel without merge conflicts. Batch mode split each rename into content changes first, structural changes second, keeping diffs readable.

The validation layer

A validation tool ran 16 automated checks against the repository, each classified by severity: BUILD (build crashes), RUNTIME (UI breaks), CORRECTNESS (wrong content), COSMETIC (minor). It detected stale product references, missing redirects, broken internal links, and missing SVG icons. Instead of waiting for a slow build to catch failures, it found them in seconds.

Visual image scanning

An image scanning tool used AI vision to scan screenshots for outdated product names, a problem grep can't solve. All 113 SVGs in the scan were fully vectorized with zero <text> elements, meaning old names were baked into vector paths. The only way to find them was rendering each SVG to PNG and reading them visually.

The redirect validator

A standalone Python CLI handled redirect validation in 4 stages: scraping the live sitemap to create a baseline before any renames, comparing the baseline against the redirect mapping CSV to find gaps, validating the GitHub preview deployment, and confirming production after merge. Per-product filtering meant each writer could validate their own rename independently.

The outcomes

These counts come from the migration tooling's own reports, measured at execution time. The linked pull requests show GitHub's totals, which are higher because they also include review churn and merge commits from the main branch.

Metric Count
Products renamed4
Files touched~695
Insertions / deletions~2,848 / ~2,816
URL mappings validated349
Redirect rules added or updated71
Images audited486
Images flagged for update67
Reports generated29
Commits17
Execution window3 days

The image scan caught things nothing else would have. Among third-party vendor screenshots, 33 had the old product abbreviation in the filename, but only 11 actually showed the old name on screen. Ten others with no abbreviation in the filename still contained it. Only the visual scan found them.

After the project, both commands were generalised, with hardcoded product tables replaced with interactive prompts. Anyone on the team can run them for any future rename, no setup required.

Why it mattered

Product teams launched with docs that already matched the rename. Users following old bookmarks didn't hit 404s. The image audit caught things that would have sat wrong for months without anyone noticing.

The transition held up. No broken links, no customer complaints. Product leadership confirmed it landed cleanly, about as good as it gets for a customer-facing rename across four products and 695 files.

The longer-term outcome was the toolkit. Products get renamed again. Domains change. The tools now sit in the team's hands permanently. The next rename starts with working infrastructure, not a blank page. Each run makes the tooling better, because edge cases that trip it up become rules.

None of this was predicted. The problems worth solving only became visible during the work. That's why the tools are specific: each one started as a response to something that actually broke, not something that might break.

The public record

The rename ran in the open on Cloudflare's documentation repository. Each product below links to the pull request that carried it. The three-day window is visible in the merge dates: the four renames landed on 16 and 17 February 2026, with the correction passes closing on the 18th.

PR #28358 · 390 files

Magic WAN → Cloudflare WAN

The largest of the four. Cross-references across 17 other products, partials, and render paths, split into content-first and structure-second commits to keep diffs readable.

PR #28368 · 164 files

WAN Tunnels → Cloudflare WAN

Two products converging on one name, which meant merging navigation and reconciling overlapping content rather than a straight substitution.

PR #28391 · 67 files

Magic Network Monitoring → Network Flow

Smaller surface, same mechanics: content, redirects, and cross-product references updated in one pass.

PR #28370 · 19 files

Magic Cloud Networking → Multi-Cloud Networking

The narrowest rename, run through the same tooling so the redirect and reference checks were identical to the larger three.

Four follow-up passes closed the remaining references and audited the images: #28361, #28410, #28412, and #28424. Repository: cloudflare/cloudflare-docs.