Jawetzel LLC
All projects

Case study

live
CookJunkie logo

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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 16TypeScriptTailwind v4MongoDB AtlasStripeCloudflare R2Lulu Print APIMeta Graph APIBrevo@react-pdf/rendererSharp

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.

Links