What I Learned Vibe-Coding My First App (& Shutting It Down)

By Peace Akinwale23 min read
What I Learned Vibe-Coding My First App (& Shutting It Down)

"At some point, I knew I may have to throw the baby out with the bath water." That's what I told my wife on the night of the 21st of March, when I decided to shut Garde down — a product I designed to help her extract recipe videos as texts. This is the story of how I did it & what I've learned.

TL;DR

  • I vibe-coded Garde in November 2025 to solve a problem my wife had with re-watching recipe videos while cooking. She had to pause, rewind, play, miss a step, & rewind again throughout her time recreating a recipe.

  • A few friends loved it, some used it, & I decided to commercialize it. I partnered with a friend who works in cybersecurity for his technical expertise.

  • We didn't have distribution — as in, couldn't afford to be visible everywhere in a good way. & without visibility, we couldn't move fast enough to build trust & gain market share.

  • There are many other alternatives that allow people to save videos for free (we capped ours at three for free) & the "big" competitors have incredible influence & trust.

  • I decided to stop spending money on the resources & put Garde behind me in March 2026, after over four months of sleeping & eating late.

We married on October 11, 2025 & it was the most beautiful day of my life. I've known her since my first year in grad school, & walking down the aisle that day, in my heart, I promised I would be everything for her. I would be the answer to every question (& need) she could think of. I meant it.

But freelance writing for B2B SaaS companies or any other niche is unstable. One month, you're on top of the world, the next, your client is either ghosting you or writing a four-sentence email about how they want to cut cost & content is the first to go.

So when I lost a high-paying gig, the first thing I did was seek out ways to be more valuable to my future clients so I wouldn't be easily replaceable.

I asked what I could do on Superpath, a Slack community for content marketers. Eric Doty, Jimmy Daly, & a couple of other senior content marketers said content engineering is the future for content marketers. & that meant I needed to know how to code, or at least, use vibe coding tools.

That conversation was my introduction to Claude Code.

I learned how to use Claude Code as a content marketer & it was the best thing that happened to me professionally.

If I had a problem in my existing content workflow, I could create a system that automates one or two loops & help me work faster. I built this website with Claude Code & have documented other projects here. I'm proud of contentDB, which helps you save customer conversations, research, & content in one place so you can query it through MCP in Claude.

But I was out of a job, so there wasn't much I could do aside from applying for opportunities.

On a November evening, I asked my wife what I could do to make her life easier. She said it would be cool if she could save recipe videos from TikTok & just read them as texts when she starts to cook. I decided to build that tool for her.

An illustrated comic strip showing three scenes: learning Claude Code & building contentDB, getting rejected while job hunting, & the moment my wife asked for a TikTok recipe-to-text tool — the idea that became Garde

The Building

I won't go into the intricacies of building this app because this essay is more about my experience & lessons trying to build an app in a climate where the bar to software development is so low.

But as you can imagine, it was a lot.

When I started, I explained my idea to Claude Code & it wrote a plan I could follow. When it asked if we should start building, I typed Yes — & that's how HowToKeep started, which was the name I used before choosing Garde.

The initial version was cool. I don't remember what the UI looked like but it was usable. My wife said the name HowToKeep was a mouthful, so I sought alternatives.

I had already read Arielle Jackson's What's in a Name? A Lot, Actually. Here's How to Pick the Right One For Your Company in First Round Review's newsletter, & read it for the sake of consuming knowledge. But now, I needed to reread it & follow some of the playbook to name my product.

She wrote about how companies chose names by translating another language to English. For example, the name Maven, the online education platform, is from the Yiddish word "meyvn," meaning "one who understands." Reebok, the athletic sportswear brand, is from "rhebok," the Afrikaans word for a South African antelope.

You can see how the etymology of names had strategic relevance to the names these companies chose.

I was fascinated — & more fascinated when she touched on names having negative connotations when transferred from another language. For example, Vicks, the American over-the-counter medication brand, is sold under "Wick VapoRub" in Germany because "V" can sound like "F" in German, making the company sound like "Ficks." & since "Ficken" is the equivalent of the English F-word, "Ficks" would carry the same interpretation to German speakers & associate the brand with a vulgar term.

In my case, with Claude's help, I discovered that Garde means to keep in French, so I chose it — after hours of research, re-prompting, & two exhausted context windows.

A Claude chat showing 20 naming variations for the app — including Garde (French for "keep/guard"), Bewaar, Katika, & others — generated while brainstorming what to call HowToKeep

I learned by doing, & always stopped Claude when I didn't understand the code it was writing or the changes it was making that required permissions. So whenever it needed permissions & I didn't understand why, I'd stop it & ask it to walk me through the fix it was making.

For someone who didn't understand programming, I copied every bug I saw, checked my logs on Render (the backend), & pasted it into Claude. It then walked me through what happened & how I could solve it. It made me understand how programming works to an extent — but I digress.

I also didn't want to connect my database (Supabase) with Claude because I didn't want to risk security breaches on the little volume of customers I had from beta testing. Taking screenshots of my errors was eventually easier, & it's what I did.

Beta Testing & Getting Feedback

My wife was my first user. & she was the most excited when I was able to show her the localhost version of the product.

For the first few hours of getting a stable MVP, it was only accessible on my PC because the localhost:3000 network only worked on a local machine.

So you can imagine my excitement when I later understood that I could search ipconfig on another terminal, see my hotspot's IP address, & add :3000 behind it so I could see the same thing I was seeing via PC on my phone.

When I discovered it, I ran from the workspace to the living room — where my food was almost getting cold because my wife had dished it 15 minutes earlier — & did a happy dance. She didn't understand why it was such a breakthrough, but the first thing she did was create an account & use her new first name, Akinwale, as the password.

Showing Other People

When I later made the app public, it looked like this:

Previous Garde UI — the early web app interface before the redesign

No android-shading here please. I use a Pixel & it's 10x better than your iPhone. 🌚

The first person I showed was my friend, Ajala Elijah, who is an analytics engineer at Moniepoint, Africa's fastest-growing fintech. You can tell I'm proud of the boy.

He thought it was a really good idea & could sell in Silicon Valley. That's a stretch, we knew. But that belief — that it's a viable product — meant a lot to me.

Ajala's first feedback on Garde — he thought it was a great idea that could sell in Silicon Valley

He had objections about the value of the product & how it would work.

Ajala's query about the app name & positioning

To these, I said: "Calm down o. It's like Google Keep. You're watching TikTok & you see a how-to video you want to recreate. You save it, but it's easy to forget. This app extracts the details & gives you a step-by-step guide."

This was December 1.

I shared it on my WhatsApp story & a lot of people signed up. Only about 10 people tried it, & the feedback read like this:

Feedback from Roshee — she loved the multi-language ability & found it genuinely useful

Btw, friends from grad school call me Philip.

Second feedback from Roshee — follow-up thoughts on using Garde

The multi-language ability she referred to was a problem I intentionally addressed.

Initially, any video saved had to be in English. Whisper listens to the audio & writes out every word it hears. Then Sonnet takes those words & organizes them into a usable recipe: here are your ingredients, here are your steps.

The problem was that when Whisper heard a Yoruba word like "egusi," it would write it the way an English ear would approximate the sound — mangling it to "egushi." When it couldn't make sense of a word at all, it produced jargon. & since Sonnet was working from what Whisper wrote, it inherited every mangled word.

This happened across several languages (French, Italian, Spanish) so I added a step that let Whisper auto-detect the language during transcription. If a voiceover was in Yoruba or French, Whisper transcribed it in that language & passed that information to Sonnet as context, so it knew to be flexible with spelling & recognize their cultural ingredients.

This was the first major thing a lot of competitors don't do. Gave me a lot of faith.

I also built Garde to allow users to save DIY videos & projects they would love to recreate, which other products didn't do as well. However, this feature also affected how I could sell Garde — because as I branded it as a recipe saving app, I also had to position it as a DIY video saving app.

So after spending almost two months building on my own, I knew I needed a technical person on my side. I talked to my cybersecurity expert friend, Abdulquadri Saka-Bolanta, & we became partners because he loved that "the app just works."

What We Built

I still remember that some things were failing. For example, if a creator made a video & didn't narrate what they were doing or mention their ingredients — they just showed them on the screen & performed the activity — the system wouldn't understand what they did because there were no words.

So I built a path where if the transcript came back too short or unusable, the app would automatically pull frames from the video & analyze them to describe what it saw. Hands pressing dough on a wooden board, a bowl of flour on the left, eggs cracked on the right. The steps are visible in sequence, & Garde was now able to understand & present it to the end user.

The tricky part was that "no usable transcript" didn't always mean silence. Sometimes a creator would film with an Afrobeats song playing over their hands pressing dough into a pan — no voiceover, just music. Whisper would transcribe the song lyrics as if they were instructions & hand that garbage to the next step. So the app also had to learn to detect when a transcript was more music than meaning, & route those videos down the same frame analysis path.

After the app downloads the video, it recognizes whether the audio is usable or not. If it isn't, it starts pulling & analyzing multiple frames from the video so it can provide accurate information about what happened on screen.

As you'll see in this screenshot, after the app downloaded the video, it recognized that there was more music than voiceover & started analyzing multiple frames to provide an accurate account of the events in the video:

First stage of the app extracting 12 frames for analysis — Garde's fallback pipeline when audio is unusable

But I was on Render's 512MB memory tier — the cheapest plan — & the server could only hold so many frames in memory at once before it crashed. So I had to ration it: videos without narration would use 12 frames, videos with narration but unspecific details about the activities would use six frames.

Even with the rationing, the server died mid-process anyway, & I'd receive emails like this:

Render crash email — a server memory error notification from the backend

I had to upgrade my Render account. & soon afterwards, my co-founder came onboard. We concluded that he would hire a developer to ensure we could commercialize it safely. We'd split the bills — & that's what we did.

& while having a developer was good, the work felt slow.

I still worried about not providing users value for money, so I became more intentional about adding features. I worked on building the product & improving user experience while the dev worked on wrapping the web app into Android & iOS apps safely. When I hit a wall, I called on him, like here:

Problem for Chris — a message showing a technical issue I flagged to the developer

& here:

The actual problem — a follow-up message showing the specific bug I needed the developer to fix

The Features I Added

I kept adding features because I wanted Garde to be worth it.

I started with the meal planner, then an activity tab for the DIY part of Garde.

I also added an AI recipe generator with two modes. The first was the Quick Recipe feature where you let Garde recommend something for you to eat based on the options you've chosen:

Quick Recipe feature combined view — showing the meal recommendation UI with dietary preference options

When you click generate, it shows three recipe ideas based on your previous recipes, so what it generates is close to your usual taste buds.

Recipe generation in action — a GIF showing Garde producing three personalized meal ideas

The second is My Ingredients, where you type in what you have in your fridge & Garde provides meal ideas from them.

My Ingredients feature — a UI showing fridge-based meal suggestions generated by Garde

For DIY, I added a Make Something tab, so users can also enter what they have at home & get project ideas.

Make Something feature combined view — the DIY project idea generator showing input & output screens

By the end, Garde had a meal planner, shopping lists, an AI recipe generator, an activity planner for DIY projects, a feedback board (& even a changelog), a working push notifications feature, a blog, & an Android app.

I wanted to charge $5.99 a month, & I needed every feature to justify that number.

We Took Garde Seriously

When the co-founder came onboard, I registered Garde as a business in Nigeria.

The developer & I integrated Flutterwave for Nigerian users & Paddle for international users, with automatic IP detection so the app would route users to the right payment option. We built subscription tiers, upgrade flows, a billing management system, & a scheduler that ran every night to check whose subscription had expired.

We paid for Google Play & Apple developer access & had even submitted the Android app to the Play Store (we were still in the testing phase). I bought an iPhone specifically to monitor our app on iOS devices & manage our social media from a separate device.

I wrote a privacy policy with our address & phone number in the footer, so anyone who read it from the UK or US could see we were a real company. I even added a refund policy to be Paddle-compliant & wired up Slack notifications so I'd get a ping for every new signup, every review, & every paid subscriber.

None of that happened.

I checked the PostHog analytics I set up every day, & the only users were my team, my wife, & a few early fans of Garde.

PostHog analytics dashboard showing low user activity — sessions were mostly from the team, my wife, & a handful of early users

I watched their full session replays, events clicked, & every other important thing I tracked so I could see how real users moved through the product & fix every friction point.

There wasn't much friction to fix because there were no paying users. & this is not for lack of trying. I wanted to go the organic route with social media content but since we couldn't show our faces (because we're Nigerians & didn't want the western audience — our primary target audience — to stereotype & dismiss us), we stuck to motion videos & carousels to market Garde.

Our most-seen post was a motion video that had 150 impressions. We did social media marketing for about two months before I realized that, coupled with our other challenges, Garde wouldn't work.

Some of the Challenges

Garde was built on a premise that if you paste a link from TikTok, Instagram, or YouTube, you'd get a detailed recipe or guide on how to recreate whatever was in the video. What I didn't know when I started was that the server (via Render) runs on datacenter IP addresses, & YouTube & Instagram actively block datacenter IPs.

If a human tried to save the video using their local network, it would go through (which was why testing on localhost was always successful). But in the production environment, it failed.

I tried yt-dlp, a tool that downloads video, but these platforms — especially YouTube — blocked it. I could still get away with some TikTok, Instagram, Twitter, & even Facebook videos, but YouTube actively blocked all downloads from our server. Except for a few Shorts.

I spent many days looking for alternatives. I even cached my residential IP address — my home's internet — & used it in the prod environment (so that every download request would be from my IP, not the datacenter's which Render & other backend services use). After a few days, that cached IP expired & I was back to square one.

I eventually used Supadata, a tool that, by some magic, is able to extract information from every social media platform. I wanted to hack how they did it but I couldn't, so I used their API.

The whole experience was a lot of chaos, debugging, troubleshooting & getting my wife worried because I didn't sleep early for weeks & ate late. All I did was wake up, pray with my wife, go to the gym, come back home, & go to the workspace. For a newly married couple, that was such a great plan.

But I needed it to be successful. I really wanted it to be.

So when I faced the wall again with an Instagram video, I felt let down. & tired.

Garde logs combined — showing a sequence of backend errors during an Instagram video extraction attempt

As you can see from these logs, I added an Instagram link here:

Instagram link attempt — the input that triggered the failed extraction

It failed here:

Failure log — the server error returned after the Instagram extraction attempt

& the user got this error:

User-facing error message — what Garde showed the user when the Instagram extraction failed

I found out IG videos failed that day because I use my product often — so I can fix any problem or bug before it affects potential users. When it failed, I tried a few other Instagram videos. They all failed. I tried other ways that wouldn't require me to use Supadata because I didn't want to pay for another API. Nothing worked.

The last commit I pushed to the Garde codebase, on March 19th, was to remove the Instagram scraping code I wrote (to see if that would work). It didn't.

The Other Reason Why I Shut Garde Down

There are a lot of players in the recipe saving niche.

If you google recipe apps or check app stores for them, you'll find more than 30 apps. & if you search for meal planner apps — which was a neat feature I added to Garde — you'll probably find even more.

Most of these products were developed by someone with more experience, some were cheaper, & most had a lot of money to go all out on social media. Plus, most were built by people living in Australia, the UK, the US & Canada — countries where people can easily trust the product compared to Nigeria, which has had a bad rep internationally. That's why we didn't market with our faces & names in the first place.

These may read like excuses. But with all this in mind, I sent this message to my co-founder — & it wasn't my first time wanting to call it quits:

Message to co-founder about shutting down — the conversation where I told him I wanted to stop

He understood & was very kind.

Telling My Wife & Team

I'd always told my wife that when we had enough traction, I would hire a more experienced team to rebuild the product & make it better. Make it feel more like a real app. I told her I would throw the bath water away & save my baby.

But when I decided to shut it down, I told her I had to throw the baby out with the bath water. It broke her, as you might expect, but she understood me.

Message to the Garde marketing team announcing the shutdown — blurred to protect the team's privacy

Telling my team of three was probably the hardest. It almost moved me to tears. We believed in it; they believed in me, but I didn't have the financial wherewithal to pursue it.

The Lessons I Learned

I have grit. But more than that, I needed to have figured out distribution, moving with speed, & a relatively deep pocket to hire an experienced team, pay for ads, & fund user-generated content.

1. Distribution: Figure Out How to Promote Your Product & Where

I am a content marketer by trade & I know organic content marketing takes time. Give or take, six months or more.

I started with blog content. I wrote two blog posts — which was insanely hard to do well because of my schedule: building a product, writing for my existing clients, & actively looking for work. But I wrote them & hired a social media manager & a freaking good designer.

I was hell-bent on organic traffic, not paid ads, because I wanted to see if our organic Instagram & TikTok content would get us traction. They didn't.

& while I held on hoping they would, I saw a lot of competitors whose:

  • apps were faster (ours took 40–80 seconds to save a recipe)

  • already had apps in app stores (we were still in testing for Android, hadn't started iOS)

  • were cheaply priced

They took over the market & there was nothing I could do. Most were free too (we had three free trials).

So if I had figured out a sure way to amplify our reach, I would've known if we could afford it. Or at least, found ways to ensure we could go as viral as possible.

2. Speed: Have a Plan for Promoting Your B2C Product as Fast as Possible — Ads, UGC, Whatever It Takes

Because we didn't figure out how to distribute (& couldn't afford it), there was no speed of execution to bank on.

Sure, I believe my product is freaking good & is much better than what some of my competitors have. But without speed of execution or a well-thought-out distribution tactic, I didn't have an edge. & we definitely didn't have any visibility.

I figured that I need to nail distribution & move with incredible speed to win in a world where there's so much noise.

3. Hire People Who Have Done What You Want to Do Before — or at Least, Can Get Up to Speed Fast

I couldn't afford them, & we didn't have a lot of patience to let the ones we got "get up to speed fast."

I went through two social media managers for Garde & while they were qualified, they didn't have a lot of experience in the B2C app niche. To be fair, they had a lot of ideas & many of them would require creating content for us — content that shows our skin tone.

My co-founder & I were concerned that people in the West, our primary target audience, would think this is a shitty black man's product & wouldn't even interact with it.

Maybe this was the wrong perception, but it left our social media managers with limited marketing options. We didn't show our faces. We even had someone living in the US create our social media accounts so that our content would circulate around people in that region, not people in Lagos. I don't know if that strategy worked — our max organic impressions from a post was 150, which isn't enough data to analyze.

That ties back to my point: your plan for distribution & speed is important.

People need to see the people marketing a product, not just slides & motion videos with AI characters & AI phones. I wanted us to be audacious in our last month of running Garde, but we stopped because of funding. Managing our resources in anticipation of traffic was getting too expensive because we had zero users.

4. "Owo ni kẹ̀kẹ́ ìhìn rere" — Money Is the Wheel of the Gospel

This Yoruba adage is often used in religious circles to emphasize that financial resources are necessary to support & spread the message of faith.

If we had money, distribution, speed & the best people who have done something like this before, Garde would've been easier.

But I am a struggling artist. A writer whose freelance business is struggling because of the many concerns around AI, the economy, & just a terribly shitty time to be a human on planet earth. So I believe Garde could have worked, but our limited resources didn't help.

It's time to close the curtain.


Garde is still live at usegarde.com, but I've downgraded all our resources to the free tier. You can still use Garde.