Case study
live
CookJunkie
A WordPress-to-Next.js migration of a 15,000-recipe site, with AI-repaired legacy data, AI-assisted recipe authoring, a social cooking community, and a Stripe + Lulu print-on-demand cookbook business on top.
The problem
A 15,000-recipe site had outgrown WordPress: slow pages, years of malformed and inconsistent data, and constant scraper traffic from competitor services. The owner wanted it faster and cleaner, and wanted to launch a print-on-demand cookbook business plus a social recipe community on top of it.
What I did
- 01
Migrated 15,000 recipes without breaking a single URL
The old WordPress site was slow and straining. Moved the entire corpus onto modern infrastructure while preserving every trailing-slash and taxonomy-prefix URL byte-for-byte, so organic search didn't take a hit during the cutover.
- 02
Repaired years of legacy recipe data with an AI-in-the-loop pipeline
Across 15k recipes there were many missing ingredients, malformed yields, and inconsistent formatting. Built a pipeline that pulls recipes to per-ID source files, batches them, and fans out to ten Claude agents in parallel. Each agent proposes fixes that land back as reviewable diffs, applied via a dry-run-first command. The result is a normalized catalog that search and filters can actually rely on.
- 03
AI-assisted recipe authoring: read-from-image pre-fill and inline audit
Two ways the AI helps users while they fill out a new recipe. Read-from-image: drop in a photo or screenshot and the form pre-fills with parsed ingredients, steps, and yield, so the user is editing instead of re-typing. Inline audit: the same checks the bulk repair pipeline runs over historical recipes also run against in-progress drafts, flagging missing ingredients, malformed yields, and inconsistent units before the recipe is published.
- 04
Built a social recipe community around the catalog
Users create and submit their own recipes, showcase their cooking skills, follow each other, save favorites, and build a pantry that filters the catalog down to what they can cook tonight. The community features live on top of the existing library rather than in a separate section.
- 05
Shipped an AI chat assistant with user context and site-native tools
A chat window that knows who's using it, pulling in the logged-in user's pantry, favorites, skills, and submitted recipes, and exposing site-specific functions the AI can call instead of hallucinating about them.
- 06
Shipped a Stripe → Lulu print-on-demand cookbook pipeline
Users assemble sharable cookbooks from any recipes in the system; checkout runs through Stripe with no account required. A webhook freezes the rendered PDFs, fires a print job into the Lulu Print API, auto-refunds on Lulu failure, and publishes a tracking page that pulls live status straight from Lulu.
- 07
Auto-posted recipes to Facebook and Instagram on a schedule
A scheduled pipeline picks recipes from the catalog, formats them for each network's quirks, and publishes through the Meta Graph API, Facebook and Instagram in one pass, so the social accounts stay active without a content calendar to babysit.
- 08
Hardened against scrapers and competitor bots
A high-value recipe archive draws data-scraper services that resell content to competitors. Layered in rate limits, request-signature checks, and blocklists for known bad actors to cut the free feed.
The outcome
15,000 recipes live on modern infrastructure with clean, searchable data. Users create and submit recipes, follow each other, save favorites, filter by pantry, and assemble sharable cookbooks that Stripe and Lulu turn into printed books. Built and maintained solo.
Under the hood
Next.js 16 + TypeScript + MongoDB, with taxonomy pages that preserve the WordPress-era URL structure to protect SEO. Admin endpoints use bearer auth with machine-readable schemas so external tools don't have to scrape. Sentry for errors, Brevo for transactional mail, R2 for blob storage. No Redis or queue involved; idempotency keys and database transactions cover the coordination.