ai
vibe coding
development
automation

My First Vibe Coding Journey: From Tears to Triumph

September 13, 2025
9 min read
My First Vibe Coding Journey: From Tears to Triumph

My First Vibe Coding Journey: From Tears to Triumph

As an SRE, "vibe coding" still gives me the chills. Yet you can't speak credibly about what you haven't built yourself. So I jumped in and tried it first-hand. I chose the simplest benchmark I could think of: a static personal website. Surely that would be quick... right?

I'm proud to say my personal website took just two hours to build.
I'm less proud to admit it took me a month of trial, error, sweat, and tears to get there.

That's the paradox of vibe coding with AI: it promises effortless creation… until you actually try it.

This is the story of my first vibe coding project: the detours, the breakthroughs, and the lessons learned. Shared here so that others might shortcut the same bumpy road.


1. The Spark

The ignition moment was simple: I asked a language model for code, and it gave me code.
PowerShell scripts, SQL queries... suddenly my operational tasks at work were automated!

Naturally, now I wanted more. Could I build a whole project purely on "the vibe"?

I started chatting with the LLM, and that's when it got tricky. I found myself copy-pasting files manually into folders and troubleshooting in the same chat window. I'd lose track of steps, and so did the model. Endless loops of instructions, with me saying "yes" to its tempting suggestions, led straight into chaos. Hours of debugging often ended right where I had started.

Lesson one: If you treat vibe coding like magic, it will treat you like a fool.


2. The Platform Detour

Frustrated with manual copy-pasting, I thought: "There must be a better way."

I discovered platforms like Lovable and other "ready-made" AI coding tools. They promised to build entire applications through conversation. No code required. Perfect, right?

Wrong.

Here's what I learned about these platforms:

The control problem:
I didn't want to "order a product" from a platform. I wanted to program in natural language. There's a fundamental difference. One gives you a black box; the other gives you code you understand and can modify.

The lock-in trap:
These platforms own your code generation. You're dependent on their infrastructure, their pricing, their limitations. Want to switch? Good luck untangling what they built.

The cost reality:
Enterprise-grade pricing for a personal project? No thanks. The economics didn't make sense for experimentation and learning.

What I actually wanted:

  • Full control over my codebase
  • Ability to understand and modify the generated code
  • No vendor lock-in
  • Reasonable costs for personal projects
  • The learning that comes from being close to the code

That's when I discovered Claude Code.

Not a platform. Not a service. A tool that runs locally, generates code I own, and lets me program in natural language while maintaining complete control. This was the breakthrough I needed.


3. Context Is Everything

Claude Code solved the mechanical problems, but it revealed a deeper truth:

👉 Prompts are code.

But there's a crucial step most people skip: the Requirements Document phase.

My technique:
I spend approximately two days refining the initial Requirements Document (RDP) before writing a single line of code. This isn't wasted time. It's the foundation of everything that follows.

What goes into those two days:

  1. Define the architecture clearly:

    • What frameworks? Which libraries?
    • How should components be structured?
    • What's the folder hierarchy?
  2. Specify design patterns:

    • How should state be managed?
    • What's the data flow?
    • How do components communicate?
  3. Establish coding standards:

    • Naming conventions
    • File organization
    • Comment style
    • Testing approach
  4. Document the scope precisely:

    • What features are in scope?
    • What's explicitly out of scope?
    • What are the priorities?

This heavy context becomes the foundation I pass to Claude Code. It's not about writing perfect specs. It's about giving the AI enough structure that it can make good decisions autonomously.

The difference this makes:

Vague prompt:

"Add a button below the text."

Result: The model might put the button in the wrong section, misalign it, or decide to add a button everywhere it spots text. Who knows?

Well-structured prompt (with RDP context):

"In the About page (about.tsx), within the main content section, insert a primary button labeled 'Contact Me'. Place it directly below the last paragraph of text, center-aligned, with mt-6 spacing. Link it to /contact."

Result: The model understands where, what, how it should look, and what it should do. Minimal ambiguity, minimal rework.

The closer your prompt is to structured software documentation, the better the outcome: fewer hallucinations, fewer bugs.

In other words: vibe coding still needs a definition of done.


4. Discipline Still Matters

Even with perfect context, chaos lurks around every corner:

  • Backups, always. A single hallucination can wipe hours of work. It once happened to me on the request for the final build! I now tell the agent: backup on every change.

  • Prompts should evolve incrementally. Start with the well-defined RDP. Then move with small, localized requests. Don't try to rebuild everything in one prompt.

  • Good taste is not included. The AI can generate UI, but unfortunately it won't make you a designer. UX sensitivity still requires human judgment. You'll need to provide visual direction, not just functional requirements.

  • Test continuously. Don't wait until "the end" to test. Validate after each meaningful change. Bugs compound quickly in AI-generated code.

  • Version control is mandatory. Git isn't optional when working with AI. You need the ability to roll back when (not if) things go sideways.


5. Beyond the Personal Site

The personal website was just the beginning. Once I understood the fundamentals, I started building more complex projects.

The real test:
I built a small web portal and mobile application connected to the same Supabase database. Real-time data sync, authentication, proper state management: actual full-stack development.

But here's the key: It only worked because I did the groundwork first.

I had to:

  • Understand Supabase's architecture and API patterns
  • Learn the mobile framework's conventions
  • Define the data model properly
  • Establish authentication flows
  • Map out the component hierarchy

In other words: I walked the path of stones first.

Vibe coding didn't eliminate the need to understand what I was building. It eliminated the tedious work of typing it all out. The AI became a pair programmer that could scaffold structure at the speed of thought, but I still needed to architect the solution.

The paradox:
The better you understand software development, the more powerful vibe coding becomes. It's not a shortcut around learning. It's an amplifier of existing knowledge.


6. The Professional Horizon

As I've grown more comfortable with vibe coding for personal projects, I've started seeing its professional applications.

Where it fits in my SRE work:

Scripting and automation:
Tasks that previously took hours of bash/PowerShell wrangling now take minutes. Need to parse logs, automate deployments, orchestrate workflows? Vibe coding excels here.

The next frontier: MCP Servers:
Model Context Protocol servers represent the next evolution. Imagine troubleshooting infrastructure issues in natural language:

"Check the error rate on the payment API over the last hour. If it's above 2%, investigate the database connection pool and show me recent slow queries."

Instead of writing monitoring queries, checking dashboards, and correlating data manually, you describe the investigation, and the AI executes it.

Configuration as conversation. Troubleshooting as dialogue. Infrastructure automation without scripting.

A brave new world:

The Huxley reference isn't accidental. We're entering a world where the boundary between human intention and machine execution blurs. Like Huxley's Brave New World, it's simultaneously exciting and unsettling.

The excitement:

  • Productivity multipliers we've never seen before
  • Democratization of software development
  • Solving problems at the speed of thought

The concern:

  • Are we building systems we no longer understand?
  • What happens when the AI makes decisions we don't verify?
  • How do we maintain quality when velocity is this high?

The parallels to Huxley's dystopia are worth examining. In his world, technology created convenience at the cost of depth. In ours, AI promises efficiency, but at what cost to craftsmanship, understanding, and intentionality?

My current stance:
Embrace it, but critically. Use AI as an amplifier, not a replacement. Maintain the discipline of understanding what you build. Speed without comprehension is just faster failure.


7. The Takeaway

Between frustrations and breakthroughs, I came out with something real: multiple working projects, built in a fraction of the traditional time.

What I've learned:

  1. Vibe coding isn't magic. It's a discipline.
    The two-day RDP investment pays dividends throughout the project.

  2. Control matters more than convenience.
    Platforms that "do it for you" look appealing until you need to deviate from their assumptions.

  3. The learning curve is real.
    These first steps and lessons are crucial foundations before tackling ambitious projects.

  4. Speed creates new risks.
    At this velocity, we risk forgetting even faster the things we already tended to overlook when we worked "at our own pace." Security, technical debt, maintainability: they don't disappear just because development accelerates.

  5. It's a collaboration, not automation.
    Think of it as pair programming with an infinitely patient partner who types really fast but needs clear direction.

The honest truth:
I'm not yet addressing security and technical debt properly. I'm enjoying the ride first, learning the patterns, understanding the capabilities and limitations. But I know these considerations must come.

Vibe coding is a rollercoaster: frustrating one moment, exhilarating the next. But for me, it has opened a new way of thinking about software, a shared flow between human and machine. It's about having a virtual pair programmer to accelerate the dull stuff, while keeping humans in the loop for structure, creativity, and taste.

The future:
Professional use cases are emerging. MCP servers, infrastructure automation, configuration as code: these aren't speculative anymore. They're happening now.

The question isn't whether AI will change how we build software. It's whether we'll maintain the discipline, understanding, and intentionality that separates good engineering from fast hacking.

And yes… it's addictive.

Welcome to the brave new world of software development. Proceed with curiosity, discipline, and just a touch of healthy skepticism.


Ricardo Dias is a Platform Engineering Manager and SRE practitioner exploring the intersection of AI and infrastructure automation. He believes the best technology amplifies human capability rather than replacing human judgment.

Written by Ricardo Dias

Platform Engineering, DevOps & Observability