Show HN: I vibecoded a 35k LoC recipe app
Over the last 2-3 weeks, I vibecoded the recipe app that I always wished existed - recipeninja.ai . It now includes a fully interactive voice assistant so you don't need to get your dirty hands over your new iPad when you're cooking.Background: I’m a startup founder turned investor. I taught myself (bad) PHP in 2000, and picked up Ruby on Rails in 2011. I’d guess 2015 was the last time I wrote a line of Ruby professionally. Last month, I decided to use Windsurf to build a Rails 8 API backend and React front-end app, using OpenAI's realtime API for voice-to-voice responses. Over the last few days, I also used Claude Code and Gemini 2.5 Pro for some of the trickier features. 35,000 LoC later, this is what I built!The site uses function-calling to navigate the site in realtime as you chat with the voice assistant, which I think is pretty neat.For the long version, see https://tomblomfield.com/post/778601470234918912/vibecoding-...I'd love any feedback you have!Demo video of the voice assistant: https://www.youtube.com/watch?v=kRhVc9D5kcgGenerate and edit new recipes: https://www.youtube.com/watch?v=VwwZF6dHcHg
89 points by tomblomfield - 140 comments
Always floored about the problems people think need fixing. The problem is not that you get your dirty hands on the iPad. The problem is that you want real recipes. You know, things people have actually cooked and found to be good. With real photos of how the result actually looks (instead of what an AI thinks it might look based on the description).
You might be lucky and find these for free someplace on the web. However, those LLMs that "vibecoded" this Rails app for you are now also used to flood the web with garbage recipes, so finding good recipes on the web will become much, much harder than it already is. I browsed through the recipes and could not find a single one that actually looks real, so at the moment, you are just adding to this problem. This is why people still buy physical cooking books. The good ones are made with sturdy, thick paper so that you can get your dirty hands on them. This is what cooking is all about. Only unused cooking books stay clean.
The "problem" people have is: yeah, I want those, but for free. But creating a cooking book is a ton of work and very expensive. You need to first find good, original recipes. Then you need to actually cook each of them to see if they are any good, at least once, sometimes several times to perfect the recipe. And unless you are a photographer as a side-hustle, you need to do this again and hire a professional to make good-looking photos of the result.
Printing the books is also expensive. Good cooking books need to have very good binding so that they can be flattened to show one page for a long time without disintegrating. The paper must be thick and the printing must be able to withstand stains and moisture without becoming unreadable.
If you want something in the short form video era, I do appreciate Andy Hearnden (andycooks) as he is both concise, consistent and always posts the full recipe in the video descriptions (all too rare).
It's rare that I actually cook directly from them -- usually, that'd be big and fancy stuff or stuff I'm very unfamiliar with; in both cases I usually take the time to cross reference whatever the cookbook says with additional resources from the internet.
ChatGPT, on the other hand, I frequently use when or before cooking (and I cook virtually every day).
It's great when I only have a vague idea based on stuff in the fridge; five minutes later I've got a checklist I can reference. If it hallucinates something that I flat out don't think will work or, much more likely, comes up with something that I don't want or cannot do for lack of ingredients or time or whatever, I'll tell it to adjust the recipe and it does.
It's also great when I feed it a couple of existing recipes (from real people) to compare and contrast and integrate and reformat in a way that's most useful to me, e.g. a tabular format, or scaled to a different serving size.
With all that said, the AI based recipe sites don't really do it for me, either. If I want to cook purely AI generated recipes, a chat interface works fine -- and probably better. What I really want is an AI tool that helps me curate my own recipe collection. E.g. I want to ask it "I'd like to make Ramen, how did I do it the last time, what were my notes" and when it's done I want to tell it "ok, this was fine, I decided to double the mirin and next time I'd marinate the eggs longer" and have it update the recipe.
Edit: and right after this, I run into another AI-related gem: https://artificialintelligencemadesimple.substack.com/p/ai-t...
But yes, websites will now be filled with these low-quality recipes, and some might be outright dangerous. Cyanide custard should ring alarm bells, but using the wrong type of mushroom is equally dangerous and much more challenging to spot.
I believe I'm going to need a new oven...
35 kLOC is quite a bit. I wonder how straightforward and maintainable this app ended up to be. This would require taking a look at the sources. While good Rails code tends to be very terse, frontend may be quite voluminous.
> I believe within a couple of months, when things like log tailing and automated testing and native version control get implemented
This sounds a bit too optimistic, especially around automated testing, but yes, eventually this all will be there.
> an extremely powerful tool for even non-technical people to write production-quality apps
But why would non-technical people would even think in terms of log tailing and version control, any more than they think about the gauge of wiring in their walls, or the kind of modulation their Wi-Fi device use? For really non-technical audience to make a good use of such tools, it won't just take the AI to be a competent coder. The AI should become a competent architect and a competent senior SWE to translate from the product management language to the software development language, without even surfacing it when not explicitly asked. It's going to be quite a bit of a challenge to make it work, and work about as reliably as with a human team.
I think people will have to recalibrate on this. The LOCs do things that you otherwise would not do. Features and details that simply would not happen — because they are too code/time intensive for most projects. It just won't matter anymore.
> But why would non-technical people would even think in terms of log tailing and version control
They won't! They won't have to. The obvious good stuff, that everyone thinks the AI tool should be able do, will just work, because the people building the tools, will focus on making them work.
Example scenario: you have a codebase that you iterated on with LLM, and it contains let's say 15 features with various implementation details. You continue tomorrow and want to make a small change to handle an edge-case. While making changes to one of the 3 required files, suddenly it will decide to also rewrite / "improve" other parts of the code that have nothing to do with your request, where pieces of previous logic will no longer exist - since it made 18 changes to the file, and there are 3 such files, good luck spotting it without thorough and detailed change review.
Also, if you made manual changes to generated code and than you ask it to add something to the code (within the same "conversation" / context, it will often replace your changes with how it originally wanted code to look like.
https://www.recipeninja.ai/recipe/r_0a8wYxMgm1zFSw/white-pow...
Now updated to include real cum!
Dish: Fek Yerr AI Slop Garbage Plate All Ingredients
On a more serious note: I've found that for debugging difficult issues, o1 Pro is in a league of it's own.
Claude Code's eagerness to do work will often fix things given enough time, especially for self-contained pieces of software, but I still find myself going to o1 Pro more often than I'd expect.
A coworker and I did a comparison the other day, where we fired up o1 Pro and Claude Code with the same refactor. o1 Pro one-shotted it, while Claude Code took a few iterations.
Interestingly enough, the _thinking_ time of o1 Pro led us to just commit the Claude Code changes, as they were both finished in around the same time (1 min 37s vs. 2+ minutes), however we did end up using some feedback from o1 to fix an issue Claude hadn't caught. YMMV
Does it mean it use this expensive open ai audio model in the app? Don't you worry this will make it bankrupt if app goes viral and not monetised?
Can you share what's your strategy here, like topup $2000 open ai account as kind of marketing expenses for users to try for free? Genuine questions since planning to use openai audio API in other case and this kind of expensive price worry me a lot even if switching to new mini-transcribe and mini-tts
Probably the main value engineers have for a maintenance project is context. I wonder what happens when we fully cede context to the machines...
Today, I got a request at work for a feature ("let's offer coupons!") that I thought would take a week. That was until I found out that another engineer wrote most of the code last year, and it'd take him a day to dust off.
I'm totally onboard with, and grateful for, larger-scale experiments like this...thanks for putting the effort in. I wonder how well Cursor (or similar) would handle a situation in which large amounts of code are _almost_ being used. What if 3k LOC accidentally get duplicated? Can our automated systems understand that and fix it? Because if they can't, a human is going to spend a _long_ time trying to figure out what happened.
Over the next 18 months, I expect we'll hear a few stories of the LLM accidentally reimplementing an entire feature in a separate code path. It's a whole new class of bugs! :D
I think in the end AI will be more advanced tool, but a tool nonetheless. Like methodologies and principles, good practises etc. - they only work if you use it with care and added thought and adaptation to your case. DRY it a great principle. But sometimes it's better if you repeat yourself. For one reason or another. And these are the the tradeoffs that human in the loop should be making imho.
I agree. When I read these articles on vibe coding I can't help to think that these guys are basking in the glory of the impressive maze they built around themselves. Of course running these things in production and having them reach the state of legacy code is an entirely different thing. Building a maze is one thing, having to run around it is an entirely different challenge.
It's like one of those world expos: everything looks fantastic, but the moment the event ends everything just crumbles.
LLMs are super useful but currently, the primary use case is teaching, not doing. For this reason, I think ChatGPT is really just as good as an AI enabled editor (or both if you don't mind paying for two subscriptions).
Also vibe code has a parallel feature, while the code is generating, you are also doing live review and correcting it towards right direction, so depending on your experience, the end product can be a bad mess or wonderful piece of creation and maintenance dream.
The issue with seasoned SWE is that, the moment a mistake(or bad pattern) is made, the baby is thrown with bath water.
For a tiered app like the one presented, 35k LOC is not really that impressive if you think about it. A generic react based front end will easily need a large number of LOC due to modular principle of components, various amounts of hooks and tests(nearly makes us 25-40% of LOC). A business layer will also have many layers of abstractions and numerous impl. to move data between layers.
The vibe code shines, when you let it build one block at a time, limit the scope well and focus. Also, 2-3 weeks is a lot of time to write 35k LOC. at start of any new project, LOC generation rate is very high. But in maintenance phase it significantly falls as smaller changes are more common.
Lots of apps are quite repetitive: for building APIs for example you generate one controller and the ask the app to generate more using the first ones as a pattern. For frontend you do the same for forms or lists.
Tests are often quite good, but I think they were already great even back in the first ChatGPT release.
With this strategy and the fact that some patterns are quite verbose (albeit understandable for an AI or a reader), it is quite easy to get to a big LoC while still maintaining consistency.
Or, was this mostly just an exercise in engineering/testing AI?
A second, minor problem of your website is that the images illustrating recipes are AI generated with a bad quality
You can't solve those issues by throwing more AI.. well maybe the second problem you can (AI images with later models are generally ok)
[0] https://www.recipeninja.ai/recipe/r_WHeXRD7qXHV0Vr/cyanide-i...
https://www.recipeninja.ai/recipe/r_3i5lSfWjUKq05m/crunchy-p...
https://www.recipeninja.ai/recipe/r_N1VSPtXzCJVV3l/diarrhea-...
[1]: https://www.bbc.com/news/articles/cd11gzejgz4o
There's also apparently a hairstyle? https://www.recipeninja.ai/recipes/hairstyle
> Eleven Labs API for text-to-speech conversion
> streamio-ffmpeg gem for audio file analysis
> Active Storage integration for audio file management
> OpenAI integration for recipe generation
etc. I'm not saying it's not a fun excersize in 'vibe coding', I'm just very curios the quality of the code that was actually produced. Its my feeling project maintainability is something that will be a big pain point in the future is people are relying on these tools.. 35k LOC for this recipe app smells like that to me at least.
Seriously though - vibecoding is great. Even better (or only feasible) as engineers who can dive in when we need to.
My app is iOS and I had never done any Swift. I do have AI generation but that was more of a fun afterthought. The main utility is extracting recipes from the web and having a synced shopping list that I can share with my wife.
Being able to type out and immediately execute it directly in the window, and even have your code replaced by the output, is kind of life-changing. It fundamentally changes the way you write code, like the REPL isn't just a quick way to test your code, but a direct helper to test the stuff that you right.
I did a project in Clojure recently, heavily using Conjure, and then my next project was in Rust. Rust has nice Neovim plugins as well, but it still kind of felt like a step backwards; I found myself reaching for the "automatically evaluate" keystrokes that don't exist on Rust.
I've written more about it here: https://simonwillison.net/2025/Mar/19/vibe-coding/ and here: https://simonwillison.net/2025/Mar/23/semantic-diffusion/
Who knows what kind of time wasting is on the other side of a link these days either.. Dark pattern cookie pop-ups, subscription pop-ups, intrusive ads, account registration demands, pay walls, etc..
"There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It’s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard."
Contrasted to AI assisted coding, where you would give much more detailed prompts with technical specifications, and read over every line to make sure you understand it before accepting a response.
In theory, vibe coding can let someone with very limited technical expertise build complete apps, so understandably a lot of people are excited by it.
In practice, it doesn't seem like we're there yet. But each new step in AI development leads to people trying again, and it's hard to deny that the results are getting better. I think we're at the stage of where AI image generators were a few years ago. Very much in the uncanny valley.
Actually it is booming. In bsky, X and Linkedin, I see another recipe/todo/budget management/profit tracking/SaaS starter template/landing page/people-to-follow-directory etc. being pumped out every single day. Before GenAI, this would be more like one partial feature per user every month, now post GenAI, entire product in weeks or even hours.
I believe, the indie entrepreneurs are making the maximum bang for the bucks with AI codegen compared to any other groups.
I get this search result https://www.recipeninja.ai/search?name=Anti-inflammatory
What browser are you using? Voice mode or typing?
Search is working fine, I just tried https://www.recipeninja.ai/search?name=lasagne
Maybe there's more to this software development thing than pumping out something that kind of works?
The app literally exposes his OpenAI key.
But there is some quality in it, I can't argue against that
It does not seem very "viral" or income-generating. I know this is premature at this point, but without charging users for the service, is it reasonable to expect to make money off of this?
Also, the photos are some of the most un-appetizing, uncanny valley, shit I've ever seen.
Ah yes, they just don't make cyanide ice cream like grandma used to
You can call me a snob, but I appreciate some things only if they are the result of work and creativity of humans.
Posting date: 2025-04-02T01:57:13 1743559033 <-- too late
LoC: 35,000 <-- That's a _lot_
Front page: "Elon Musk Dirty Pants", "Heroin Hashbrowns", "AI Slop Stew", "Sweet Tooth Delight Made with Human Teeth" <-- WTF?
This is a joke, right?
I can pop over to Midjourney and be determined not to draw a single line and "sit there laughing" as it draws the Mona Lisa in the style of Salvador Dali but with a turnip instead of a person.
How is this any different? What is ultimately notable about it? Did any of it make you a better programmer?
I'm always deeply impressed when people devote significant chunks of their time to achieving extraordinary results. I'm entirely baffled, however, that there's anything at all interesting about using an AI interface to build an AI interface to connect you to AI slop.
You could have spent 20 hours planting trees or doing some kind of community serivce, and the world would have been a far better place.
What is notable here is that someone is demonstrating that the systems are reaching a quality where this is possible.
> Did any of it make you a better programmer?
By conventional metrics, if the job got done well enough in less time, yes, even if less skill is involved.
It's similar in principle to architecture or interior design.
1. When I click on a recipe from home page it is maintaining the scroll position, so I am not seeing the top of the screen. Is this deliberate?
2. "Recipe Ninja was vibecoded by Tom in San Francisco." Will it increase of decrease trust in your system for users?
3. To remove AI changing random files, I use "Copy relative path" to tell AI which file to change (there is a keyboard shortcut too). Not fully vibe coding but can be useful for precision bug fixing.
Good luck with the project.
(2) This particular post is an interesting data point in the research of what the current crop of LLM-based tools is capable of. It reads a bit like a Windsurf ad; I would like more details on how the technical side of the development panned out, what were the problems and where, how were they overcome, etc.
(3) The parent comment reads as a somehow funny mix of socialist "anti-greed" agenda and frowning upon the fact of sharing knowledge and experience freely.
Http://earthpilot.com/play and then join at AnthonyDavidAdams.com/zoom at 11 for show and tell.
I’m making a non-fiction book writing agent and I’d love to better understand how you used function calling to navigate the website!
Then you handle those function calls in your javascript.
``` if (function_name === 'search_recipes') { const searchParams = new URLSearchParams();
```