
A summer 2025 vibe coding experiment that shipped, got noticed, and landed me a contract.
I spend a lot of time listening — music, audiobooks, podcasts. So it made sense to want the same experience on my own website. I also wanted it to be free, self-contained, and not tied to a monthly subscription. What I didn’t expect was that building it might become the most useful thing I did all summer.
This is the story of how a non-developer used AI tools to build, test, and ship a custom WordPress text-to-speech plugin — and what happened next.
How I got to Lovable
By mid-2025, vibe coding was all anyone was talking about. I started pelting my soccer buddies — who by day worked as database developers, engineers, and data scientists — with questions about training LLMs and which IDE was worth using. They pointed me to tutorials and I started going deeper: Python exercises, Kaggle, reading code instead of just copying it.
My first real experiment was in Lovable.dev, trying to build a simple, bot-resistant contact form for this site. I was frustrated with the exercise and losing confidence in its value fast. My starting prompt:
Create a bot-resistant simple embeddable form to collect name, email, and a brief message for deployment on my WordPress 2025 templated website. Ideally, would like to collect entries on a Google sheet or Airtable.
It didn’t go anywhere I wanted. So I pivoted.
The idea: a plugin that reads my pages aloud
I’d looked at off-the-shelf WordPress text-to-speech plugins but they all required paid subscriptions. I wanted something free, self-contained, and mine. With those two constraints as a rough product spec, I started prompting in Lovable.
Lovable’s enthusiasm was immediate — and immediately suspicious:
This is a fascinating request! You want to create a WordPress-compatible web widget that can read and analyze the text content of any webpage it’s placed on. This evokes modern accessibility tools, content analysis widgets, and reading assistance plugins.
– Lovable.dev
By now most of us know that feeling: either you’re suddenly very talented, or you’re being managed. I pressed on.

The dream, and then the constraints
At first, the sky seemed like the limit. I was experimenting with multilingual versions, accent choices, and displays that tracked your position in the text. I’d only signed up for a month of Lovable, so I had a built-in deadline.
The early versions required a Supabase connection and third-party integrations that were sometimes working, mostly not. Playback would stall. I kept asking why, and the debugging loop became its own project. I was spending every evening describing in step-by-step detail what I needed — and it was becoming clear that the complexity was the problem, not the solution.
I went back to basics: just make it play reliably. No frills. No language choices.
I started pulling code artifacts from Lovable and running them through Visual Studio Copilot — a useful gut-check for catching what could break and what might be unsafe. I also leaned on my product background: I’d been through enough user acceptance testing to know when to cut scope. The widget didn’t need to be a moon shot. It needed to ship.
My developer friends smiled at the idea of shipping production code from a vibe coding app. They encouraged me anyway.
What I ended up with

The gray play button in the bottom-right corner of every page on this site. That’s it. Simple, self-contained, no subscription required. You can also grab it on GitHub if you want to try it on your own WordPress site.
Building it taught me how to read and reason about code I didn’t write, how to test iteratively, how to cut scope without losing the point, and how to ship something that actually works. Skills I’d applied for years on behalf of clients — just never to my own tools.
Recruiters noticed. The plugin probably played a role in landing a content design contract with ServiceNow shortly after.