How We One-Shot Karpathy's Menugen
About a year ago, I read a blog post by Karpathy about building MenuGen, an app where you snap a photo of a restaurant menu and get AI-generated images of every dish. His big takeaway was that building a modern app is "like assembling IKEA furniture": the code was the easy part, but putting together all the services around it (payments, auth, database, hosting, domain names) was where things got painful.
Funnily enough, this was actually one of the things that inspired Blixt and me to start building Biscuit!
Well, last week Karpathy tweeted about it again, saying he's looking forward to a day where you could just tell an agent "build menugen" and it would handle everything, all the way to a deployed web page. When I read that, my first reaction was: wait, I think we can already do this. So I had to try it.
One prompt
My first experiment was very simple: I opened Biscuit and typed:
Build me this app: https://karpathy.bearblog.dev/vibe-coding-menugen/
That was the whole prompt! I didn't add anything else, just the URL to his blog post. And then I sat back and watched.
It started by reading through the blog post to understand what MenuGen does. Then it figured out which features were needed, designed all the views, and started building the backend. About six minutes later, I had a fully working app live at menu-vibe-app.bsct.so
Aaaaaand... it worked! Here's what it actually built.
What it built
Out of that one prompt, Biscuit built three pages: a homepage, a credit purchase page, and the actual menu generation page where you upload a photo of a menu and get AI-generated images of every dish.
It set up two new database tables for Credit Purchases and Menus, and added credit balance fields to the User table so it could track everyone's credits.
And then there's the workflows, which is where it gets really exciting. Biscuit created five workflows, all running behind the scenes:
- Purchase Credits starts a checkout session when someone buys a credit pack
- Complete Credit Purchase listens for successful payments and updates the user's credit count
- Extract Menu Items takes a menu photo and pulls out individual dish names
- Generate Menu Images creates AI-generated images for each dish, using Biscuit's built-in AI
- Retry Dish Image lets you regenerate a specific image if you don't like it
So there's a full purchase flow (start checkout, listen for payment, update credits), a menu extraction pipeline that reads dish names from a photo, and AI image generation for each dish. All built-in.
The best part for me is that everything Karpathy described as the hard part (auth, payments, hosting, domain) was just... there. I didn't have to set up Stripe, didn't have to configure authentication, didn't have to manage any API keys, didn't have to pick a hosting provider. The app was live on its own domain the moment it finished building. No external services at all.
How the AI approached it
Something I thought was really cool is how it broke down the work. It didn't just jump in and start building. It first read through Karpathy's blog post to understand what MenuGen actually does. Then it figured out what features were needed. Then it explored different designs on Biscuit's canvas before committing to anything.
Only once the designs looked right did it start creating the backend: tables, workflows, payment integration. Understanding first, then design, then build. It's closer to how you'd approach it yourself than what you'd expect from an AI tool.
What could have been better
The image generation and the purchase flow worked great right away, but we did hit a couple of minor bugs on our platform side.
For example, we weren't triggering purchase events for preview mode purchases, which broke the credit flow during testing. I worked around it with some follow-up prompts, and then fixed the root cause in the platform so no one else would hit it.
Oh, and there was this funny naming thing. The AI kept calling the app "MenuGen" in its messages because it picked up the name from the URL I shared. The name generator didn't have access to the earlier research where it had already decided on "MenuVibe." You can see me correcting it in the chat panel of the first screenshot, which was pretty funny.
I went back and fixed these platform bugs after the build. I ran the whole thing again after these bug fixes, and it did work as a true one-shot (as you can see on the video above). And that's the part we care about. Every build like this teaches us where the platform can be better, and we go and fix it.
Bottom line: we built it!
This is why we built Biscuit the way we did. Building a modern app today means you end up assembling a dozen different services before anyone can even use the thing you actually built. Payments, auth, database, hosting, security, domain names. All of that is on you.
With Biscuit, all of that is already there. Built-in database, built-in billing, built-in auth, built-in AI, built-in hosting… and it's all running on serverless, so it actually scales. When you describe what you want, the platform configures what already exists. There's nothing to assemble.
One prompt and about six minutes got me a working app with payments, auth, AI-generated images, and a credit system, live on the internet. I think that's pretty cool.
Try it yourself: menu-vibe-app.bsct.so
If you want to build your own, join the waitlist. We're opening spots every week.
P.S. If this mission excites you as much as it excites us, we're hiring too!