My first vibe-code: from idea to App Store in a weekend
My pug weighs 7.2 kg. Is that too much? Not enough? It depends on his age, his life stage, whether he's neutered. No app on the App Store can tell me. I checked.
For years I managed his health with duct tape. A Notion database for vaccinations. iOS Reminders for face fold cleaning. A note for weight. A Siri shortcut for baths. Four tools that knew nothing about each other, and nothing about pugs. When Apple shipped Claude Agent natively in Xcode, I thought maybe it was time to stop improvising.
One weekend later, the app was on the App Store. Approved on the first try.
Pugs: the perfect niche problem
If you don't own a pug, here's what you need to know. Pugs are wonderful dogs and walking medical disasters. Flat face, narrow airways, bulging eyes that are prone to ulcers, facial folds that need daily cleaning to prevent infections. Their ideal weight sits in a narrow window between 6 and 8 kg, and they gain weight by looking at food. Vaccination schedules are their own calendar.
I looked for an app to handle all of this. There are dozens of pet tracking apps: 11Pets, PetDesk, DogLog, Pet First Aid. All generic. None of them know that a 5-month-old pug should weigh between 2 and 3 kg. None of them track face fold care. The niche of "one app, one breed" simply doesn't exist.
This is the kind of problem that's invisible from the outside. If you don't have a pug, you don't see the need. If you do, you live it every day. And the more I looked at the App Store, the more I realized something interesting: no one had ever built an app dedicated to a single dog breed. Not for pugs, not for French Bulldogs, not for any breed. Every pet app tries to be everything for everyone, and ends up being not much for anyone in particular.
1,300 lines of specs before opening Xcode
Vibe-coding has a reputation. You type a prompt, AI spits out code, it works. Reality is the opposite. The vaguer the prompt, the more useless the output. The real skill in vibe-coding isn't coding. It's writing specs.
I spent an entire morning on a CLAUDE.md file. 1,300 lines. Not a casual brief. A full technical specification describing the architecture (strict MVVM, SwiftData, SwiftUI), navigation structure, data models with their enums, color palette, and most importantly, pug health data.
For that last part, I did real veterinary research. Weight thresholds by life stage (puppy, junior, adult, senior). Recommended cleaning frequencies for folds, eyes, ears. Vaccination protocols used in France and internationally. AI generates code, not veterinary knowledge. If the spec data is wrong, the app will be wrong, with immaculate architecture and passing tests. That's almost worse.
This step is, in my experience, 80% of the real work. Everything else is execution. And that's the counterintuitive part of vibe-coding: the bottleneck isn't generating code. It's knowing, with enough precision, what you want the code to do.
What Claude Code produced in one afternoon
I fed my 1,300-line CLAUDE.md to Claude Agent in Xcode. What came out of the first run: a complete MVVM architecture, SwiftData models, meal tracking with weekly stats, weight tracking with Swift Charts curves, a daily care system with green/amber/red indicators, vaccination reminders with booster dates, a vet contact card with PDF export, a Tip Jar via StoreKit 2, and 12 unit test files covering life stage transitions, weight thresholds, care statuses, and date calculations.
All of it with zero external dependencies. No third-party packages. No API, no server, no cloud, no Firebase, no analytics. Everything runs locally on the device.
It's impressive. I couldn't have produced this myself in the same timeframe. Probably not in several weeks.
But the design was terrible.
Claude Code had generated a functional interface with a Catppuccin color scheme. Clean, technical, and completely soulless. It looked like any productivity app. Not like something that people who photograph their pug 12 times a day would want to open.
I spent the evening searching for a direction. Looked at dozens of apps. Eventually drew inspiration from Finch, a wellness app with a soft, warm visual identity, and created what I called the "Pugify Latte" palette: warm cream background (#FFF8F0), pastel accents, rounded typography, cozy and playful. I wrote a complete redesign prompt and ran Claude Code again.
The result was unrecognizable. Same code, same features, entirely different emotion.
The lesson is simple: AI implements a vision. It doesn't have one.
Everything that isn't code
When the app runs in the simulator, it feels like you're done. You're halfway there.
You need App Store screenshots. Six in French, six in English, with iPhone mockups, punchy copy, a consistent background color. I made those in Canva. The app icon, a stylized pug at 1024x1024, was generated with Gemini. You need a support page and a privacy policy, both mandatory for submission. I deployed them on my Hetzner VPS through Coolify, integrated into my existing Next.js site, bilingual. Two complete App Store descriptions, optimized keywords for ASO, promotional text.
Then there's App Store Connect. Creating three In-App Purchase products for the Tip Jar (EUR 0.99, 2.99, and 4.99). Filling out the W-8BEN tax form, because Apple is American and I'm a French sole proprietor (there's a France-US tax treaty, Article 12, that brings withholding on software royalties down to 0%, and you need to know this). Setting up a bank account. Enrolling in Apple's Small Business Program to pay 15% commission instead of 30%.
None of this is hard. But it's real work, it's incompressible, and AI doesn't help with any of it.
Submitted Sunday evening, approved Monday morning
I hit "Submit to App Review" on a Sunday evening, fully expecting a rejection. Most developers, especially on their first app, go through at least one round of feedback with Apple's review team. Monday morning, Pugify was approved. No comments. No modification requests.
I think the reason is straightforward: there was nothing to find. Pugify collects zero data. No analytics, no user accounts, no tracking. Apple's App Privacy questionnaire was a single "No." The review notes were one line: "Free pug health tracker. No login. Tip Jar via StoreKit 2 consumable products." When there's nothing to investigate, the review goes fast.
What followed was less smooth. The app was live in the US immediately but blocked in all 27 European Union countries. The Digital Services Act requires developers to declare themselves as "traders" to distribute in the EU. Forms to fill, verification to wait for, and a phone call to Apple support to get things moving. A few hours later, Pugify was available in 175 countries. The first tip, EUR 0.99, came through shortly after. Full circle.
What vibe-coding actually changes
✔ What AI does better than me
Generating structured code from clear specs. Architecture, models, views, tests, all produced quickly and cleanly. Implementing well-documented patterns (StoreKit 2, local notifications, PDF export). Producing in one afternoon what would have taken me weeks of native iOS development.
I'm not a Swift developer by training. I've built web apps, browser extensions, automated workflows. But I'd never shipped a native iOS app before. Vibe-coding let me bypass that technical barrier without sacrificing output quality. That's a real shift.
⚠ What AI doesn't do for me
Finding the right idea. I was the one who knew no app was dedicated to a single dog breed. I was the one who'd been living with the problem for years.
Having taste. I was the one who rejected the first design and spent an evening searching for the right visual direction.
Navigating the Apple ecosystem. Tax forms, EU compliance, screenshots at the right dimensions, ASO. All human work, all detail-oriented, all necessary.
Vibe-coding doesn't turn anyone into a developer. It turns someone who knows what they want to build into someone who can build it. Without a clear product vision and precise specs, AI produces noise with correct syntax.
Conclusion
In one weekend, I went from a years-old Notion workaround to a real native app on the App Store. Not a prototype, not a demo. A complete app with health tracking, vaccination reminders, weight curves, vet export, and a Tip Jar. Approved by Apple on the first try.
What struck me most wasn't the speed of code generation. It was how the work shifted. I spent more time writing specs than "coding." More time in App Store Connect than in Xcode. Code has become the most automatable link in the chain.
The real question is no longer "can I code?" It's "do I know what I want to build, and can I describe it precisely?"
If the answer is yes, vibe-coding handles the rest. And if you've been solving a problem with duct tape for years, maybe that's your sign.
Questions? You can reach me on LinkedIn or use the contact form.
By Gauthier Huguenin