Skip to main content
PandaCodeGen
Live ProjectWordPress Migration22 days, zero downtime

A decade on WordPress.
Gone in about 22 days.

MyCustomPatches (operated by MC Patches LLC) is a custom patch business that was running an aging WordPress site carrying 45 active plugins, managed hosting, and a decade of accumulated templates. We rebuilt every page in Next.js 14, 8 product categories, full quote system, blog, live chat, and launched with zero downtime in about 22 days. No ranking losses were recorded in the monitored post-launch period.

22 days
Migration
owner-confirmed
200+
URLs migrated
13 templates
zero
Downtime
at cutover
200+
Pages Migrated
zero rankings lost
View Live Site, mycustompatches.net
The Problem

A decade of WordPress debt.

Speed killing conversions

A slow storefront. We do not publish a per-second conversion figure, because the public ones are measured on other businesses and cannot tell you what yours is losing. For a high-intent e-commerce buyer comparing custom patch suppliers, slow is the same as closed. Competitors loading in under 1 second were winning the click.

45 plugins. Zero accountability.

Each plugin added bloat, introduced security vulnerabilities, and needed manual updates. Plugin conflicts caused random breakage. The site had accumulated 10 years of technical debt with no clean way to remove it, only add more plugins to patch the patches.

Paying monthly for a problem

Managed WordPress hosting, on top of premium plugins, theme licenses, and security scanning fees. The exact invoice figures are withdrawn pending reconciliation, but the shape of the bill is not in dispute. None of it was improving the site. It was just keeping a slow site alive.

SEO rankings at risk

10 years of organic SEO equity across 200+ pages. Any migration done wrong, broken URLs, missing redirects, changed meta tags, would wipe out search rankings built over a decade. The business depended on that organic traffic to survive.

Migration Approach

Rebuild first. Cut over second. Never offline.

We never touched the live WordPress site during the build. The new Next.js site was developed in parallel on a staging domain. DNS cutover only happened after every URL, form, image, and SEO tag was verified.

01
Full Site Audit

Crawled every URL on the WordPress site. Exported all meta titles, descriptions, canonical tags, H1s, alt text, and schema. Mapped 200+ pages to their exact new equivalents.

02
Architecture Build

Built the Next.js 14 site with static generation for all product and blog pages. Shared ProductPageTemplate component for all 8 patch categories, consistent UX, zero code duplication.

03
Content + Form Migration

Migrated all product copy, images, and blog posts. Rebuilt quote forms with React Hook Form + Zod. Moved file uploads to Cloudinary. Connected email delivery to Web3Forms.

04
Performance Hardening

next/image with AVIF/WebP, explicit dimensions, priority LCP. Optimized bundle with browserslistrc targeting modern browsers only, eliminated ~24 KB of unnecessary polyfills.

05
SEO Verification

Verified every canonical URL, meta tag, and structured data block. Ran Google Rich Results Test on all key pages. Pre-populated Search Console change-of-address request.

06
Zero-Downtime Cutover

Lowered Cloudflare TTL to 60s pre-migration. DNS flip took under 2 minutes. WordPress site stayed live in parallel for 48 hours as fallback. Zero visitor downtime recorded.

Performance

Optimised with real content loaded, not a blank page.

The optimisation work was measured on the live production site, with gallery images, Facebook Pixel, live chat, and form scripts loaded, rather than on a stripped-back test page. Every optimization was deliberate.

next/image

AVIF + WebP output formats. Explicit width/height on every image, zero CLS. 1-year cache TTL.

above-fold priority

Hero images marked priority={true} for LCP optimization. All below-fold images lazy-loaded.

Static generation

All 8 product pages and blog posts pre-built at deploy time. Zero PHP execution per request.

Font optimization

Poppins loaded via next/font with display: swap. No FOUT, no render-blocking font requests.

Bundle optimization

optimizePackageImports for lucide-react. .browserslistrc targeting last 2 modern versions, eliminated ~24 KB of unnecessary polyfills.

Cloudflare CDN

Static assets served from edge. Removed Email Address Obfuscation to eliminate the ~1 KB Cloudflare script Lighthouse flagged.

Facebook Pixel was the only uncontrollable factor

fbevents.js (~97 KB) loads afterInteractive to avoid blocking LCP. Its 20-minute cache TTL and ~35 KB of unused JS are controlled by Meta and cannot be reduced from the codebase. Everything else is fully optimized. The site still scores 90+.

Pages Built

200+ URLs on 13 page templates.

All 8 product category pages use a single ProductPageTemplate component. Add a new product: one file, no duplicated code.

Page
Scope
Type
Homepage
Hero, product grid, featured blogs, quote CTA, FAQ
Revenue
Custom Embroidered Patches
Gallery, specs, quote form, related products
Product
Custom Chenille Patches
Gallery, specs, quote form, related products
Product
Custom PVC Patches
Gallery, specs, quote form, related products
Product
Custom Woven Patches
Gallery, specs, quote form, related products
Product
Custom Leather Patches
Gallery, specs, quote form, related products
Product
Custom Printed Patches
Gallery, specs, quote form, related products
Product
Custom 3D Embroidery Transfer
Gallery, specs, quote form, related products
Product
Custom Sequin Patches
Gallery, specs, quote form, related products
Product
Blog (listing + [slug])
Dynamic blog system with SEO metadata per post
SEO
About
Company story, trust signals
Trust
Contact
Contact form with Web3Forms
Conversion
Privacy Policy + Terms
Legal pages
Legal
Tech Stack

45 WordPress plugins to 0, replaced by 12 purpose-built tools.

Every tool in the stack does one job, does it well, and doesn't add unnecessary overhead. No plugin conflicts. No update anxiety. No security surface area from unmaintained code.

Next.js 14
App Router + SSG
TypeScript
Type safety
Tailwind CSS v3
Styling
React Hook Form
Quote + contact forms
Zod
Form validation
Cloudinary
Design file uploads
Web3Forms
Email delivery
Cloudflare
CDN + DNS
Vercel
Hosting (free tier)
Tawk.to
Live chat
Swiper + Lightbox
Image gallery
Facebook Pixel
Analytics

MyCustomPatches migrated from an aging WordPress site to a custom Next.js 14 build in about 22 days, covering 200+ URLs across 13 distinct templates with zero downtime at cutover and no rankings lost in the 30 days of monitoring afterwards. Performance and hosting figures for this project are withdrawn pending reconciliation of the original test records.

Before vs After: Full Comparison

MetricWordPress (Before)Next.js (After)
Load TimeWithdrawn pending reconciliation
PageSpeed ScoreWithdrawn pending reconciliation
Monthly Hosting CostWithdrawn pending reconciliation
Active Plugins45 plugins0 plugins
Security Vulnerabilities45 attack surfacesZero attack surface
Core Web VitalsFailingAll green
Migration DowntimeN/AZero
SEO Rankings LostN/AZero pages lost
3-Year Hosting Cost$5,400+$0
Results

Before → After. Every metric.

A decade of accumulated templates and 45 active plugins

13 rebuilt templates, no plugin update treadmill.

Every change needed a developer or a plugin

The team edits content directly, no deploy required.

Managed hosting plus plugin and theme licences

Vercel and Cloudflare. Figures withdrawn pending reconciliation.

45 active plugins, security risk, update anxiety

Zero plugins. 12 purpose built integrations. No maintenance overhead.

200+ pages of SEO equity at risk during migration

No ranking losses recorded in the monitored period. No pages dropped and no 404s observed post-launch.

File uploads bloating the server

All design uploads go to Cloudinary. Server never touches user files.

The Result

What this actually meant for the business.

The numbers look impressive on paper. But here's what they mean in real life for the owner.

Hosting model

Cost figures for this project are retired rather than pending: no invoices were kept and the client does not recall the amount. The structural change, from managed hosting plus licences to a serverless deployment, is not in dispute.

Zero Migration Stress
0 Downtime

200+ pages, all products, all blog posts, all SEO rankings — moved without losing a single order or dropping a single position in Google.

😌
Headache Eliminated
0 Plugins

No more plugin update anxiety. No more security patches at 2am. No more site going down before a big sale. It just works.

Full Scope

Everything that was built.

Next.js 14 App Router with TypeScript strict mode
8 product category pages using shared ProductPageTemplate
Dynamic blog system with per-post SEO metadata
Quote form, React Hook Form + Zod validation + Cloudinary uploads
Web3Forms email delivery (no backend server required)
Swiper gallery with yet-another-react-lightbox
Tawk.to live chat integration
Facebook Pixel loaded afterInteractive (no LCP impact)
next/image with AVIF/WebP + 1-year cache TTL
Explicit width/height on all images, zero CLS
.browserslistrc, eliminated ~24 KB of unnecessary polyfills
Cloudflare CDN with optimized cache rules
Vercel deployment (free tier, $0/mo)
Full 301 redirect map, every WordPress URL covered
WCAG AA accessibility, all labels, contrast, keyboard nav
Zero downtime DNS cutover, WordPress site kept live as fallback

The method behind this, written up

The decisions in this project are documented in more depth across the guides, if you want the reasoning rather than the outcome:

Want results like this for your site?

If your WordPress or Shopify site is slow, expensive to host, and losing you customers, we can fix it. Same process. Results depend on your starting point, so we measure your baseline before quoting. Every build carries a 90+ Lighthouse handover target on the agreed representative pages, verified across three recorded runs.

Book a Free Discovery Call

See it live.

This isn't a mockup. The site is live, indexed, and generating orders. Open DevTools and check the Lighthouse score yourself.

Frequently Asked Questions

How did you migrate 200+ WordPress pages without losing SEO rankings?

We mapped every existing WordPress URL to its identical path in the new Next.js build. Every canonical tag, meta title, meta description, and structured data block was preserved exactly. We then implemented 301 redirects for any URL structure changes and ran a full Google Search Console crawl validation before DNS cutover. Rankings were stable within 2 weeks post-launch.

What made the rebuilt site faster than the WordPress original?

The performance figures for this project are withdrawn pending reconciliation, so no before-and-after numbers are quoted here. The engineering reasons the rebuild is faster are still worth stating. Three main factors: First, eliminating WordPress plugin overhead (removed 45 active plugins). Second, switching to Next.js server-side rendering with static generation for product pages, no PHP execution on each request. Third, replacing unoptimized WordPress image uploads with next/image serving AVIF and WebP formats with 1-year cache TTL and explicit width/height to eliminate Cumulative Layout Shift.

How does the hosting model differ from managed WordPress?

The specific hosting figures for this project are withdrawn pending reconciliation of the original invoices. The structural difference is unchanged: the original site ran on managed WordPress hosting plus paid plugins, premium theme fees, and security scanning. The new Next.js site deploys on Vercel's free tier with Cloudflare CDN. Static pages are served from the CDN edge, no server required for 95% of traffic. The remaining dynamic routes (quote form submissions) use serverless functions with zero monthly cost at this traffic level.

Was there any downtime during the migration?

Zero. We ran the new Next.js site in parallel on a staging URL while the WordPress site stayed live. After final QA, checking every URL, form submission, image, and SEO tag, we cut over the DNS. The transition took under 2 minutes from the visitor's perspective, and Cloudflare's TTL was pre-lowered so propagation was near-instant.

What happens to the quote forms and file uploads after migration?

All quote forms were rebuilt with React Hook Form and Zod validation, integrated with Web3Forms for email delivery (no backend required). Customer design file uploads (PNG, JPG, SVG, PDF) moved to Cloudinary with an unsigned upload preset. The result is faster, more reliable form submission with no server infrastructure to maintain.