VeePeenini, Part 7: What's Next
· Vitor Pontual · 4 min read
Everything in the first six parts was me building against a deadline. This part is the opposite: the build is done, and now I wait for the only test that matters. The World Cup starts on June 11. Until a real match kicks off with my friends all logged in at once, a lot of what I built is a well-reasoned guess.
Here’s what I’m actually watching for.
Ripping open a pack. The build is done; the tournament is the test.
The things I couldn’t fully test
- The lounge under real load. During a group-stage match I expect everyone online at the same time, reacting to the same goal in the same second. The realtime layer held up fine with me and a script. It has never had a dozen real people leaning on it during a 1-0 in the 89th minute. That’s the moment it either feels magic or falls over, and I won’t know which until it happens.
- Half-drops on a genuinely live match. The drop windows are derived from kickoff time, which I tested by backdating fixtures. But a real match has a late kickoff, a long VAR check, eight minutes of stoppage. I’m fairly sure the windows are forgiving enough, and “fairly sure” is the honest status. The first live match is the real unit test.
- Knockout bracket resolution. The group stage is 72 matches of relatively simple grading. The knockouts introduce progression, tiebreakers, and a bracket that has to redraw itself as results land. I’ve reasoned through it and seeded test data, but the real bracket filling in live, with people’s predictions riding on it, is its own kind of pressure.
The things I know are coming
- Friends who fall behind. In any collection game, a few people pull ahead early and a few drift. There’s already a dormant mechanism for this: a quiet boost that biases pack drops toward cards a lagging player is missing, paired with an overt nudge from Mila. I left it switched off at launch on purpose. I’ll turn it on around the tournament’s halfway mark, once I can see from real data who’s actually drifting, instead of guessing.
- Squads that keep changing. Even with final 26-man rosters locked, injuries and late replacements happen during a tournament. The photo and roster pipeline from Part 3 is built to absorb that, but every change is a small live operation against production, and those are exactly the moments to stay careful.
- The move. I have a move coming up that will mean shutting down the server VeePeenini runs on now and bringing it back up at a second location. The multi-host deploy is built for exactly this, but actually exercising it, picking the app up and setting it down on different hardware while real people are mid-collection, is still ahead of me.
What building this way taught me
Claude 4.7 wrote most of the code, and it moved faster than I could alone. My job was the part that doesn’t compile. Deciding what this should be. Scoping it down to something I could actually finish in under three weeks. Making the calls that had consequences, like deriving live windows from a timestamp instead of polling an API, or keeping the realtime layer on Postgres instead of renting it. Reviewing the architecture. And staying paranoid about the specific things that would quietly betray my friends’ trust.
That last one is worth sitting on. The bugs that mattered most weren’t found by writing code faster. The Drizzle binding that failed every trade. The nightly cleanup that would have wiped the database. Two files quietly disagreeing about which teams were in which group. Alerts that had never once fired. None of those came from velocity. They came from an owner asking, over and over, “what could silently go wrong here, and who gets hurt when it does.”
So the headline isn’t that an AI built a soccer app. It’s that this working model let one person carry a real product, with real users and real stakes, from an idea on a plane to a launch, in under three weeks, without losing the thread of what actually mattered. The code was the fast part. Knowing which features, in what order, and what to leave out, was the job. That part was mine.
The app is live. My friends are arguing in the lounge and hunting the cards they’re missing. The tournament starts in a week, and then I find out which of my guesses were right. I’ll write that part when I know.