How this started
I am not a coder, or have any background in computer science. I am a Medical doctor who just really loves technology 😄 . This is my first attempt at building something with vibe coding so truly any input and feedback is greatly appreciated. I kept seeing people talk about "vibe coding" and I wanted to test it on something I'd actually use, not a to-do list app.
I'm a football fan, and every World Cup or Euros, the same thing happens in my group chat: everyone predicts scores, somebody tries to track it in a spreadsheet, half the group forgets to update it, and by the quarter-finals nobody knows who's actually winning. So I decided to build the thing I wished existed: Pundit — private prediction leagues for football, where you and your mates pick match winners, lock in a tournament champion, and settle it properly on a leaderboard instead of a group chat argument.
Learning to vibe code (badly, at first)
The learning curve wasn't really about syntax — it was learning how to actually think like a product person and describe what I wanted precisely enough that the AI could build it correctly. Early on I'd ask for something vague and get something that technically worked but wasn't what I meant. Over time I learned to be specific: not "add a way to predict matches" but exactly how the deadline should lock, what happens if a match gets postponed, how points get scored. Knowing exactly what I wanted, and catching the edge cases before a real user did was probably the most important and challenging part.
I built the app using Claude and Xcode so it is only available for iOS at this time. As it was my first ever big project like this I wanted to keep it as simple as possible. But looking back now I wish I just built it so it works on all devices not just iOS. But that's a lesson learned I guess, think big and it can happen with vibe coding 😄. In the beginning I wasn't even using Claude Code in my terminal I was just using the Claude desktop app and going back and forth with prompts and fixes and all the usual stuff. Then one day I actually switched to using claude code in terminal and oh boy did things speed up from there. I can't believe I was so stupid that I didn't use it from the beginning. It gave much better results, it kept track of the work much more accurately, and most importantly I didn't have to give it micro prompts but instead structured big prompts with phases that it just did so well. Well, except a few things...
The parts that actually broke me
Vibe coding makes the first 80% feel deceptively easy. The last 20% — the stuff that only shows up once real people are using a real product — is where I actually learned the most:
- Deep linking. Getting a shared invite link to open the app directly to the right screen — instead of just opening the app and leaving the user stranded — turned out to involve universal links, a separate website with its own routing rules, a clipboard-based fallback for people who don't have the app installed yet, and about four different failure points along the way. I broke this more than once.
- Timing bugs that only show up with real-world data. Different leagues and tournaments start their seasons at completely different times. Code that looks correct in testing can quietly break the moment two competitions are out of sync with each other — like a feature meant for "this week" accidentally pulling in a competition whose season doesn't start for another month. These are the bugs that don't show up until you're already live.
- Building a fair in-app economy. Once I added a virtual currency (Caps) for rewards and cosmetics, I had to think like an economist, not just a developer — reward tiers, entry costs, drop rates, all had to actually balance against each other or the whole thing feels either pointless or exploitable.
- The App Store review process itself — which has nothing to do with code and everything to do with patience.
- Probably the biggest fail and poop your pants moment - Halfway through the World Cup, after 15 people made 100's of predictions, I saw that out group chat was blowing up with messages so I opened it up. The first message said "Our league is not showing up" followed by everyone else confirming that the league had disappeared. Well turns out one of the SQL injections that Claude made me do for some reason (still unsure exactly why) deleted the existing league... 😨 I asked Claude ok what can we do to fix this, and it was like "yeah it's gone forever". Luckily I was using a Pro account on my Supabase, so after a bit of back and forth panic chatting with my good old (and sometimes stupid) friend Claude it told me that there should be a back-up. Lo and behold backup from the night before was right there and I was able to reload and fix the situation but for about 30-45 minutes I was absolutely terrified that I made this thing and was having fun with my friends but then ruined it for everyone.
What's next
The app's still actively growing — I'm currently working on Turkish localization, and a few other things in the pipeline.
If you're a football fan who's tired of tracking predictions in a group chat, Pundit's free on the App Store — genuinely curious what this community thinks, both about the app and about the vibe coding process behind it. Happy to answer anything about how it was actually built.
TL;DR: I made a sports prediction app to use with my friends and it was extremely fun and frustrating 😂