My Experience Vibe-Coding an Internal Company Application

Featured image for My Experience Vibe-Coding an Internal Company Application showing a programmer happily vibe-coding

I’ve been using AI more and more in my daily workflow — mostly for adding or fixing parts of an existing codebase. I’ve also vibe-coded small scripts from scratch here and there, but this project was different. This was my first time vibe-coding an entire web app, where AI did 99% of the coding.


The Project

The task seemed simple enough:

  1. Disable application fees on subscriptions.
  2. Refund Stripe Connect application fees that were accidentally charged when a customer accepted certain terms by mistake.

It should’ve been a quick PHP script, maybe a few lines and some API calls. But I couldn’t resist taking it further.

Instead of writing a one-off fix, I decided to vibe-code a full internal web app that would handle everything cleanly and (hopefully) future-proof the process.


How I Started

I fired up Cursor IDE and spun up a Lando environment for local development. No frameworks, no boilerplates — just pure PHP.

I told Cursor, “I want to build an internal app that manages Stripe Connect application fees. Here’s what it needs to do.” Then I asked it to come up with a plan of action.

To my surprise, Cursor produced a phased task list and a clear, logical breakdown of what needed to be built. I spent about an hour discussing and refining the plan until I was confident it understood what I wanted.

Then I said the magic words:

“Alright, Cursor — DO IT.”

And off it went.


A Good Start

The initial output was surprisingly good. The code looked clean, the structure made sense, and the logic checked out.

There were a few visual quirks — some UI alignment issues and minor backend bugs — but that’s normal for a first pass.

It honestly felt like working with a diligent junior developer who was still finding their rhythm but genuinely wanted to impress. I was impressed.


Frustrations Begin

Then came the frustrations.

Cursor kept asking me to confirm every change it made — even in Agent Mode. It’s like having a teammate who taps you on the shoulder after every keystroke:

“Hey, should I keep this?”

All I wanted was to let it run while I enjoyed a stand-up show on Netflix. But no — Cursor wanted constant validation.

I tried figuring out how to configure it to stop asking, but laziness (and Netflix) won. I just kept one eye on it, approving changes manually.

To make things worse, it kept forgetting what we’d already done. I didn’t have any MCP or persistent memory configured, so each new session meant re-explaining parts of the project.

It was progress — but it was exhausting progress.


A Week Later

I wasn’t working on this project full-time. I still had other tasks that required a human developer. But every day, I’d spend about an hour coming back to the app, fighting Cursor to keep it on track.

Eventually, I started noticing improvements. Not because Cursor got smarter, but because I got better at talking to it.

Once I learned how to phrase requests clearly and confirm its plan before execution, the process became smoother.

Still, the constant confirmation prompts drove me insane. So one day, I switched gears entirely.

That’s when I turned to OpenAI’s Codex CLI.


Codex to the Rescue

Codex CLI was a breath of fresh air.

I gave it access to the project and said, “Go ahead. Fix what needs fixing. Improve what needs improving.”

And unlike Cursor, Codex didn’t ask for permission every five minutes. It just did the work.

I joked that maybe it also accessed my bank account or started scamming people in my name — but honestly, it felt so capable I almost wouldn’t be surprised (kidding… probably).

But the difference was night and day. Codex executed with confidence. It was like collaborating with a solid mid-level dev who actually listened, made good decisions, and didn’t freeze up every few commits.


Final Tweaks and Finishing Touches

Once the app was functional, I moved on to polishing. I asked Codex to:

  • Update my AGENTS.md file so future AI contributions would make more sense.
  • Generate automated tests.
  • Fix all PHPCS issues.
  • Clean up the codebase — removing unused files and redundant functions Cursor had added earlier (mostly due to my own vague prompts).
  • Consolidate my messy commit history into three neat commits: bootstrap, app code, and tests.

It nailed all of it.

When I reviewed the results, I barely had to tweak anything. For the first time, I felt like AI had built something with me, not just for me.


Lessons Learned

This project taught me a few valuable things about AI collaboration:

  1. Start with a clear AGENTS.md file.
    It’s like onboarding documentation for AI. Give it context, structure, and goals upfront.
  2. Make it explain its plan back to you.
    Before it starts coding, ask it to restate what it’s about to do. This prevents a ton of confusion later.
  3. Commit regularly.
    Even with AI doing the heavy lifting, human checkpoints are crucial. You’ll thank yourself when debugging or reviewing history.
  4. Treat AI like a junior-to-mid dev.
    It’s smart, fast, and doesn’t complain — but it still needs guidance and supervision.

Tools of the Trade

  • Cursor IDE — switching between Claude 4.5 and GPT-5 as agents (cursor.com)
  • Lando — for dev environment setup
  • OpenAI Codex CLI (GPT-5) — the real MVP of this build (help.openai.com)

By the end, Codex CLI had completely taken over. It just understood my workflow better and didn’t interrupt my flow with constant confirmations.


Closing Thoughts

Unfortunately, the project’s internal, so I can’t share the code — but the experience was a game-changer.

This was the first time I truly felt like I co-built something with AI. It handled the bulk of the work, and I just guided it along the way.

I’ll be working on a public version of a similar project soon — something I can actually share and dissect with the community.

If there’s one big takeaway from all this, it’s that AI isn’t replacing developers anytime soon — but the ones who learn how to vibe with it early are going to build faster, cleaner, and smarter than ever before.


Disclaimer: This article was generated by ChatGPT based on a bullet-list of story points I provided about my experience. Everything in it is accurate and personally verified — the AI just helped make it sound a lot nicer.