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, and 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 not long ago would have taken a 3-5 person team 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 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. The changelog for it is a long, boring list of refactors, and that is exactly the point.

~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 can’t 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 it 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 how to prioritise the 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.”

There is a lot left to build.

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.