How It All Went Down. From 0 to Production

· Pavel · project

codethoughts

Yesterday I shipped to production. And I want to share what I think about vibecoding and building solo.

Not a demo. Not a side project that “runs on my machine.” A real product, with real users, real infrastructure, and real responsibility.

Seven months ago, I just wanted to track my 9 cats.

The Accidental Platform

It started with a simple problem: vaccinations, weight logs, vet notes - scattered across spreadsheets and Trello, chat messages, and my increasingly unreliable memory.

“I’ll build a small app for myself.”

That cursed sentence is a spell. It summons months of work.

What began as cat profiles became a pet health platform. Multi-pet households. Placement and rehoming workflows. Medical records with attachments. Real-time notifications. In-app messaging. Admin tools. E2E tests. CI/CD pipelines. Backup scripts. Two VPS infra.

The kind of project that, yesterday would have been a 3-5 person team working for a full year.

I did it solo.

The Vibecoding Reality

Let’s address it directly: less than 1% of this codebase was typed by human hands.

The rest was vibecoded.

Code generation is the easy part. The hard part is software. Code writing is now easy, software still isn’t.

I used 15+ different models over these months. Bounced between them constantly. And somewhere along the way, I started recognizing their personalities:

  • One writes with supreme confidence about things that don’t exist
  • Another is cautious and verbose — safe, but slow
  • Another will refactor your entire codebase if you look away for a second

You learn to smell it. Which model wrote this. Why it’s subtly wrong. Where the hallucination hides.

And if you don’t take breaks, you start seeing patterns everywhere. I understand now why people talk about “AI psychosis.” The line between insight and delusion gets blurry at 2 AM when you’re debugging code that three different models touched.

My antidotes: tests, small commits, and walking away when my brain got weird.

The Timeline

Month 1 — Chaos

First commit: planning docs and tech stack debates. Laravel (chosen by a collaborator who then disappeared — best failed collaboration ever). React + Vite. Basic auth. Cat profiles. Everything breaking constantly.

Running fast in the dark. Bumping into walls. Learning that refactoring isn’t luxury - it’s oxygen.

Month 3 — It Stopped Being a Toy

Multi-pet support. Dogs joined the cats. Placement workflows appeared - not just buttons, but actual lifecycles with states and transitions. Email infrastructure. Docker pipelines.

Somewhere here, the project crossed an invisible line. It wasn’t a toy anymore. It was a product with responsibilities.

Month 5 — Systems, Not Features

Vaccination tracking became a proper system: active vs. completed, renewals instead of deletions, daily reminders, notification preferences. Health charts. Status badges. Performance optimization.

I started treating UX debt like real debt. Because it is.

Month 7 — Reliability, Not Features

The final month wasn’t about building new things. It was about making existing things unbreakable. [skepped endless list of refactors and improvements]

~1,500 meaningful unit tests. I’ve never had code this well-covered in my life.

What AI Actually Taught Me

The crane is powerful. But if you don’t understand structure, you’ll build a beautiful collapse.

What worked:

  • Treating AI outputs as drafts, never truth
  • Forcing everything through tests and types
  • Asking for options, then making the call myself
  • Using AI for scaffolding and repetitive patterns
  • Keeping context tight and instructions clear

What I learned:

  • You cant vibecode something you don’t understand
  • The skill isn’t generating code - it’s debugging, simplifying, and shipping
  • Speed without tests is just faster failure
  • The models are shockingly capable when you give them good context
  • Impostor syndrome doesn’t go away. but gets quieter.

The Stack (Boring on Purpose)

I’m not trying to impress anyone with microservices.

  • Backend: Laravel API + PostgreSQL
  • Frontend: React + Vite SPA
  • Admin: Filament
  • Real-time: Laravel Echo + Reverb
  • Infra: Docker, two VPS (staging + production), CI/CD

The philosophy: keep it boring, automate everything. If a flow matters, it has tests. If a deployment is scary, it has scripts.

What’s Next

The launch isn’t a finish line. It’s an ownership transition.

Yesterday I was a builder. Today I’m an operator. I have a long-term vision of how to grow this app, and ptioritise next moves.

The Real Takeaway

I started with “I want to track 9 cats.”

I ended with a production platform, infrastructure I trust, and something I didn’t expect:

The realization that I can build things now. Real things. Solo.

A year ago, this would have been impossible alone. The barrier wasn’t skill - it was time. AI compressed that time. Not by writing perfect code, but by making iteration fast enough that I could learn, fail, and fix at a pace that actually works for one person.

This is the shift. Not “AI writes code for you.” But “AI makes building alone viable.”

We’re just getting started.

Built with: Laravel, React, PostgreSQL, Docker, ~15 different LLMs, 1,500 tests, countless cups of coffee, and 9 cats who still don’t care about software architecture.