1,247 Recipes and Nothing to Eat

Warm illustration of a vintage slot machine sitting on a family kitchen counter, its marquee reading "Tonight's Dinner — Place Your Bets." The three reels show a bowl of chicken soup, a plate of spaghetti bolognese, and a glowing AI sparkle symbol. A plaque below the reels adds "No refunds. Everyone's hungry." A man's arm in a rolled-up dress shirt reaches for the lever. On the counter: a coffee mug printed "Coffee. Data. Discipline. Repeat." and a grocery list with chicken, carrots, and onions checked off — and "sanity?" unchecked. Children's drawings hang on the fridge behind.

I hate figuring out what’s for dinner. I’m rarely in tune with what I want to eat, which isn’t helped by my household constraints: a picky 9-year-old who only eats certain things, a 12-year-old who has suddenly gotten the ick about chicken, my wife’s universal veto authority, whoever’s actually around for dinner that night, whatever groceries survived the week, and whether anyone feels like cooking. I attempt to meal-plan, but that just doubles the cognitive load: first deciding what we’re going to eat over the next few days so we buy the right groceries, then revisiting those decisions each night because what sounded good on Sunday rarely survives intact until Tuesday. It seemed like the perfect problem to outsource to an LLM. What follows is a eulogy for what I built instead.


For some time, I’d wanted to get back into coding. Over the previous decade, I’d moved through increasingly senior technical leadership roles, even as I moved further away from the technical work itself. Maintaining technical credibility still felt important, but I hadn’t done any hands-on production work in almost as long. Combined with my desire to create things, solving my “what to cook” problem through code felt perfect. I could relearn Python, get to know what’s new in AWS since I last worked in there back in 2017 or so all while exploring the power of LLMs on a meaningful and personal problem.

Things started simply enough: hand-coded data models, researching libraries, and learning modern frontend approaches. I organized my repo with perfect tagging, did some product specifications to scope the plan. All supported by my good friend Claude. “What’s the latest view of React vs Angular?” “Help me think through a data model for organizing recipe ingredients.” “What’s a good color scheme for this thing?”

Hey Soo! (for sous chef) was born!

Screenshot of the Hey Soo! landing page, tagline "Your Kitchen, Decoded." A single search input reads "What sounds good?" above suggestion chips (Comfort food, Something quick, Date night, Surprise me) and dietary filter toggles (Under 30 min, Kid-friendly, Vegetarian, Low effort). Minimal white design with a Find Recipes button.

It didn’t take long before questions about coding became requests to do the coding. “Please implement task 123.” As long as I knew enough Python and AWS and DevOps, I could observe what was being built and drill in. I’d maintain my role as human-in-the-loop, reviewing and understanding the code Claude (sometimes supported by ChatGPT) was writing, so that I’d continue learning, honing the product and idea, and partnering on the direction forward.

I kept fine-tuning the process. Different agent personas used different models. One implemented features. Another reviewed them. Others tested, documented, refactored, brainstormed follow-up work, and kicked issues back into the queue. Before long I had multiple staging environments, automated code review, dependency management, and monitoring… for just me, the team of one, and all of my pet agents!

Somewhere along the way, I stopped building a dinner app.

Instead, I had started building a machine for building a dinner app: an orchestration harness.

Instead of helping decide what to cook, I was building crawler infrastructure, agent workflows, CI/CD pipelines, token optimization strategies, and ever more elaborate systems whose primary purpose seemed to be generating work for one another.

This felt creative, but more like watching a great artist rather than making it myself. At some point, I stopped even being the active observer… I’d skim the issue writeups, in some cases not even grokking the entirety of them, and just click commit and push, or just delegate that to Claude too. The volume of work Claude completed outpaced my ability to review it, and at best I would poke online to see if “we” had built any cool new things on the site. With Claude, I had more than 10x’d the throughput of development work. Everything had been reviewed for correctness and quality – by other LLMs, naturally. Who cared if I knew exactly what it did, or whether it aligned with the spec? (I hadn’t coded in assembly since college, so why get hung up on coding in higher level languages nowadays?) It had to be adding value somehow. At one point I opened a merged PR, read it top to bottom, and realized I couldn’t have told you whether it was necessary – and I had approved it. I barely understood some of the tracked issues – things like, “Add a static Literal annotation to abandon()’s disposition parameter” or “feat(infra): IAM-GSI cross-check lint — assert every Lambda with base-table Query has all GSI ARNs”, which were being spawned automatically as the LLMs reviewed the code. It felt like I was building something, but ultimately I was just funding Anthropic’s next release.

Screenshot of a recipe page for Creamy Tuscan Chicken bearing an "AI Generated" badge. An amber banner reads "This recipe has been adapted," showing heavy cream struck through and replaced by coconut cream, labeled "Minor Change." Ingredients are grouped into Core, Flexible, and Optional tiers, and each numbered instruction step has its own "Tip" and "Explain" buttons.

It was addictive. As so many others have written about, sending work to these LLMs is like playing slots. Just one more batch of tasks! I still have some tokens left in the 5-hour block, let’s queue up something else! Each pull of the machine had the potential to create something magical (or on the other extreme, entirely superfluous). This orchestration harness became the focus, and the product was the pretext. I reasoned I could always prompt my way back to sanity, and get back on track. Each fixed issue was like a hydra, spawning new ideas, new improvements for the orchestration process, and new ways to tinker. It’s not like the kids were starving after all – one more night of burgers won’t kill anyone, no urgency to find new vegetables to work with. The stakes were zero – no users, no customers, nobody downstream of a bad merge but me. Nothing in the setup would ever tell me I’d gone off course.

I would run out of tokens regularly, and so tried switching to other models. I switched to ChatGPT, which felt more like methadone than the real thing. And then, Anthropic announced a change to their pricing model: using their “claude -p” invocation (the command my scripts used to run Claude automatically, without me present) was going to get charged differently, outside of normal subscription invoicing. This meant all of my orchestration work was at risk – I’d have to start paying for token use for real, or refactor the entire implementation for a different approach (or ask Claude to refactor itself into a more cost-effective solution!). I was forced to take a sabbatical from the LLM casino.

In the dead hours while capacity recovered, I would prune the backlog, find smaller tasks to tweak, and read how others were crafting the perfect orchestration process. It all still felt productive. Of course, at no point was I getting any closer to deciding what’s for dinner. When the pricing announcement finally forced me to step away completely, the old organic LLM in my head was prompted to reboot its thinking. Absent that, I might still be in addict mode, one prompt away from that perfect product which would never materialize given how far adrift I was, sailing through lint rules, crawler rates and CI/CD pipelines.


Stopping felt like I’d wasted a lot of time and some money. I certainly hadn’t picked up any new recipes. I had, however, picked up some fluency – these models across their toolsets, the CLI, the API, how to structure work so AI is a helpful partner and sometimes a mentor, scoping in markdown, tmux session management, and more. That’s not nothing.

But look at that list. I set out to relearn Python; what I actually learned was AI orchestration – I got fluent in the exact thing that ate the project. An agentic tool will happily generate plausible next tasks forever, because the reviewers spawn their own. My output went up tenfold; my ability to evaluate it did not.

The LLMs removed the friction that would normally have told me I was heading in the wrong direction.

If I’d simply tracked one number, such as dinners actually decided, the drift would have stared me in the face by week two (though I’m not certain I’d have stopped). And so the thing I actually wanted remained unbuilt, and I scrapped the whole shebang.

Screenshot of the app's admin dashboard, "System health overview." Panels show a recipe pool of 1,247 recipes at 72% average quality, a seeder running 10 of 12 sites at 68% convergence, crawl success rates of 17–26% for recipe sites like Budget Bytes and Serious Eats, and a daily-imports chart averaging 8 per day.

I had spent so much time perfecting the orchestration process, but still needed to decide what’s for dinner. A crawler that scraped thousands of strangers’ recipes coupled with the world’s greatest super-intelligence got me no closer to deciding whether tonight would be chicken soup or bolognese, the two meals my kids insist I regularly iterate over. I don’t need the bells, the UX, the scraping – my kids eat like 5 meals, and, if you ignore all of the stuff around the edges, a random function that selects over that set would probably have been sufficient. In v2 (of course there’s a v2!), I’ve since slimmed down with just a few markdown files and a dialogue with the LLM. There’s no slot machine mechanism except when deciding what to shop for while meal-planning. What do I want to cook this week? What do I need to buy? Simple questions that don’t need a platform or CI/CD pipelines.


I’ll close this by noting that I wrote this by hand. I almost didn’t. It took as much discipline to sit down and write this thing as it does to do cardio at the end of a work day. It’s so easy to reach for Claude and hand off the effort of thinking, letting that muscle quietly atrophy. I did in fact use AI to edit and run an ‘adversarial review’ of this draft. With code, the words are often the means to an end. In writing, the words are the thinking, and outsourcing the draft can mean outsourcing the thought. I’m grateful for what this project taught me about the usefulness of these tools and the slipperiness of the slope – and I worry about what this means for my kids, who’ll grow up with tools that make it so effortless to offload critical thinking – including being told what vegetables they should be eating.

That’s a decision I too remain very happy outsourcing to my buddy Claude, so long as I have tokens left in my 5-hour window.

Leave a Reply