Four years ago I paid for a ready-made classifieds script. It looked exactly like what I needed in the demo. It had all the right features listed. I thought I'd found a shortcut — pay once, customise a bit, launch. That's not how it went.
The Script That Never Quite Worked
The PHP script was slow from day one. Not broken — just sluggish in ways I couldn't explain and couldn't fix. Bots found the login form within hours of going live. Database queries that should have been instant were taking seconds. The code was a mess of legacy patterns that nobody had cleaned up in years.
I hired a freelancer to fix the performance issues. He fixed one thing and broke two others. I hired a second one to undo the damage. He disappeared after the first payment. A third one looked at the code and told me it would take months to properly refactor — and quoted accordingly.
"After a year of fighting windmills I realised: either I cut costs to the minimum, or this project will never launch."
The freelancer model had failed. Not because the people were bad, but because none of them understood what I was actually building or why. They were fixing bugs in someone else's code for someone who couldn't review their work. It was never going to produce a reliable result.
The Decision to Throw It Away
I made the decision that most non-technical founders struggle with: I scrapped the existing codebase entirely and started from zero. Everything. No copy-paste of old PHP. No "salvaging the parts that worked." A clean sheet.
The timing was right because by then I'd found proper AI development tools — first Windsurf, then Claude. The dynamic had changed completely. Instead of describing a problem to a freelancer and hoping they understood, I could describe exactly what I needed, see the output immediately, test it, and correct course in minutes rather than weeks.
How You Rewrite an App Without Knowing How to Code
The honest answer: you don't write the code. You describe what you want with enough precision that AI can write it — and you stay close enough to the output to know when something's wrong.
The stack I chose for the rewrite:
- React 19 — component model made the UI manageable in pieces
- TypeScript — catches type errors before they reach production
- tRPC — type-safe API calls between frontend and backend
- Node.js — same language on both sides, simpler mental model
- MariaDB — solid, fast, familiar enough from the old stack
I didn't choose these because I knew them. I chose them because when I described the project to AI, these were the tools that produced the most coherent, maintainable output. The stack that works is the one that gets the job done.
The rewrite took months of evenings and weekends. AI fixed one thing and broke another — constantly. I learned to test every change on a staging environment before touching production. I learned to read error messages and understand enough of what they meant to ask the right follow-up question. I made thousands of mistakes. None of them were final.
What the Rewrite Actually Delivered
The performance difference was immediate and significant. The old PHP script loaded in seconds. The React app loads in under a second, even on mobile. Lighthouse scores went from unusable to solid. The difference in actual user experience is the kind of thing you feel before you measure it.
Beyond speed, the rewrite made things possible that were impossible on the old codebase:
- 28+ languages — AI-generated translations, activated per subdomain
- World Package — post once, appear on international country subdomains
- AI-powered features — post suggestions, auto-categorisation, translation on demand
- Real security — rate limiting, bot detection, proper session handling
None of that was possible on the original script. Not because the features couldn't exist in PHP, but because the codebase was too fragile to touch without breaking something else.
What I'd Tell Someone in the Same Situation
If you've bought a script or hired freelancers and it's not working — don't keep patching. The cost of maintaining a broken foundation compounds over time. A clean rewrite with the right tools is cheaper in the long run than a year of fixes that don't hold.
And if you're not technical: that's not the blocker it used to be. Describe precisely what you need. Verify what you get. Iterate. The gap between a clear idea and working software is smaller now than it's ever been.