I built an app in 3 hours with Claude


Hi Reader,

Building apps has never been easier. I can prove it.

I built a working app for the hands-on API workshop I held two weeks ago. Took me 3 hours, spread across 4 rounds of getting it right.

If you've ever wanted to do a quick, scrappy first build and actually put it in front of other people, this one's for you.

Today in 10 minutes you will:

  • See why I built my own app instead of grabbing something off the shelf
  • Get the process I actually followed, from idea to a public link
  • See the requirements I gave Claude, and how I tested every version before trusting it
  • Look at the actual architecture, and the trade-off I made on purpose
  • Learn how to deploy your own on Render, free

Why does this matter to you as a PM?

You don't need to code to prototype anymore.

That's not a hot take. You've heard it a hundred times.

But there's a difference between knowing that, and having actually done it.

Building something real, even something small and silly, changes how you talk to your engineers, how you design software, and how you think about trade-offs.

Having built a small, simple prototype gives you a basic foundation. That foundation is what lets you ask better questions, and work better with your engineering team.

The overall process

Building an app comes down to five things.

→ Know what you want to build

→ Write it down as requirements

→ Turn that into code, saved somewhere real (a repo)

→ Test it, at every stage, not just at the end

→ Deploy it somewhere publicly accessible

Step 1: What to build

I run a free workshop teaching non-technical PMs how APIs work. For the hands-on part, I needed something attendees could poke at without breaking anything real.

I looked for an existing sandbox first. The usual one people point beginners to (Swagger's Petstore demo) works, but it's generic.

Nobody remembers a fake pet store.

It also didn't have the flexibility I needed, and I couldn't build reliable exercises and quiz questions on top of it.

So I decided to build my own app and my own APIs. A food delivery app, because everyone already understands how food delivery works: an order, a driver, a status that changes.

At first I had a doubt: am I overkilling this? Building a custom app for a one-hour workshop, is it really worth it?

But a bit of research told me I could build something simple in an hour. So I went ahead, and I'm glad I did.

Step 2: Write the requirements

I opened up Claude and wrote, in plain language, what I wanted the app to do.

My app needed:

→ A front-end storefront, plus a Swagger page specifically for testing the APIs

→ Orders, drivers, and restaurants, with real-feeling data attendees could query

→ The four standard actions (create, read, update, delete an order)

→ Data that lives in memory, not a real database, so I could reset everything back to a clean playground before each session

→ A set of "seeded" orders that are locked, read-only, so people can look but not accidentally wreck the demo

→ One API key, so everyone unlocks the same version

→ A map, so attendees could see a driver's location update and watch the app call a completely different company's service to draw it

→ A taco theme, because why not, branded as Maria's Tacos, in my own brand colors

That's the whole spec.

The trade-off I made on purpose

Here's what saying yes to that "data lives in memory" line actually looks like, once it's a running app:

Browser to storefront to your API to the Swagger playground, with one branch out to OpenStreetMap for the map tiles.

The trade-off worth calling out: no database.

Everything the app knows (orders, drivers, restaurants) lives in memory. That means:

→ It's fast, and there's nothing to configure or pay for

→ One restart, or one click on my reset endpoint, wipes it completely clean

→ If Render restarts the service for any reason, all the data disappears with it

For a real product, that's a dealbreaker. You'd lose customer orders.

For a workshop sandbox that resets between every session anyway, it's actually the right call, not a shortcut I settled for.

This is the same decision you make constantly as a PM, just with different stakes.

Do you build the durable, correct version, or the version that's good enough for what this actually needs to do right now?

Here, the disposable version was the better engineering choice.

Step 3: Claude and GitHub

I handed those requirements to Claude and it wrote the actual code: a small MariasTacos app with a built-in Swagger playground where you can test every endpoint in the browser.

For the map, Claude wired in OpenStreetMap, an open source mapping service. A driver's coordinates from my own API get drawn as a pin on a real map.

That one addition became one of the best teaching moments in the whole workshop.

Did I review the code? No. I don't have that coding knowledge.
I know that for the best app performance, you always want to review code. But for what I'm doing, the potentially verbose code AI writes is more than good enough.

I didn't touch GitHub during the building part. Once the code was ready, I created a new repo in my GitHub, dragged the files in, and hit commit. No terminal needed. Really simple.

Step 4: Test every version

And as any PM knows, testing matters just as much as development.

It's not enough to have the code. You need to make sure it does what it's supposed to do: functionally, in the way you'd expect.

But also when something unexpected happens, and under load (I had to think about a class of up to 30 people).

Every time Claude changed the code, I checked it before trusting it:

→ Ran the app and clicked through every endpoint myself

→ Checked that the locked orders actually stayed locked

→ Confirmed the reset button really did reset everything

→ Tried to break it: wrong inputs, missing fields, requests without the API key

Step 5: Deploy

Now that I had the code in my repo, I needed to deploy it somewhere so it could actually run as an app.

​Render was my choice: easy to set up, with a free tier.

Though I ended up paying 9 euros a month, so the app would start fast for the first participant and not crash under a small load.

→ Go to render.com, sign up, and choose "New Web Service"

→ Connect it to your GitHub repo

→ Deploy

You get a public link. Mine is the storefront at taco-api-bta4.onrender.com, with the Swagger playground at taco-api-bta4.onrender.com/docs.

What do you think?

Did this make building your own quick prototype feel more doable?

Hit reply and let me know, or tell me what you'd want to build with this.

See you next week,

Maria

Frankfurt am Main, 60311, Germany
​Unsubscribe · Preferences​

Maria Korteleva

Hi, I’m Maria. For the past 7 years, I’ve been building internal products across FMCG and tech companies.Now, I share everything I’ve learned to help junior PMs master delivery from technical skills to stakeholder communication. Join 200+ Internal PMs who get weekly insights from the Build Internal Products newsletter.

Read more from Maria Korteleva

Hi Reader, You know that feeling of “you don’t know what you don’t know”? You get it always when you start building a new system or a complex feature. And you’re just thinking: how are we supposed to know how to build this if we’ve never built it before? As someone who likes to control things (yes, that’s me), I tried my best to find an answer. Of course, very predictably, there is no answer. We can’t predict many of the technical issues that will come our way. But that doesn’t mean we should...

Hi Reader, Have you ever heard of the Jobs-to-be-Done framework? You probably did. And like you, I have heard of the interpretations of it, and I thought I got it. It's an easy concept. But with the new small internal tool I am building, I have decided to actually implement it, and see if it could help me organize messy requirements into a clear picture. So if you are currently managing a product, and need some ability to actually map out what it's meant for, this newsletter is for you! P.S....

Hi Reader, Have you ever felt lost while asking your engineers if they have already pulled, pushed, or merged their code? I have 🙋🏻♀️ What if I tell you that learning this once and for all will take you only 20 mins? And much more confidence going forward. If you like that, today's issue is for you. Today in 20 minutes you will: Why code repositories matter to PMs (even if you never write code) What Git and GitHub are (and why they're not the same thing) The 9 words your developers use every...