TL;DR: Migrated 330 records (305+ products, 39 bundles) from a legacy platform (Entrepedia) to a Next.js + Prisma + MySQL stack. The code was fine β the data was the problem: slug collisions, duplicate titles, cover/deliverable mismatches, and a tangled taxonomy. Scroll to "The checklist I'd use next time" for the actionable part.
Earlier this year I migrated 305+ digital products and 39 bundles from Entrepedia to a new Next.js + Prisma + MySQL platform β idesire.io. Catalog migrations look boring until 330 records disagree with each other. Here's an honest breakdown of what broke, how we fixed it, and the checklist I'd run next time.
What broke
1. Slug collisions
Two products, one slug. The legacy platform allowed duplicate slugs across categories, so /products/planner existed twice. On the new platform the slug is the primary lookup, so imports silently overwrote each other.
Fix: namespaced slugs per category during import, then ran a uniqueness pass and 301-redirected the losers.
2.β¦