01
6 signs your app is about to break
If you tick three, the debt is already running your roadmap.
Every fix breaks something else.
The code has no boundaries: everything depends on everything, so a local change ripples everywhere.
It holds in a demo, not with real users.
Janky lists, screens that load everything at once, request waterfalls: nothing was built for load.
No tests, or tests that test nothing.
Without a safety net every release is a bet, and the AI brings back the bugs you already fixed.
Secrets in the app.
API keys in the bundle, open security rules, sensitive calls made from the phone.
The data model can no longer evolve.
Every new feature needs a risky migration, or one more field glued wherever it fits.
Nobody understands the code anymore.
Three ways of doing the same thing, 2,000-line files, and a prompt history as the only documentation.
02
Not the AI’s fault, nor yours
AI writes plausible code, very fast. What it cannot know is what your product will be in six months: how many users, which data, which team. Those decisions are architecture, and architecture is a senior’s job.
So the problem is not that you used AI: we use it every day. The problem is using it without a frame.
| Criterion | Vibe coding | Senior + AI |
|---|---|---|
| Architecture | improvised prompt after prompt | decided before the first line |
| Tests | missing | blocking before every merge |
| Code | duplicated, inconsistent | conventions enforced by our skills |
| Scale | breaks at the first spike | built for load and for the team |
| After | nobody understands the code | documented, handed over |
03
Rescue or rewrite?
A full rewrite is rarely the right answer. Here is how we decide.
We rescue when…
- the app has users and data to preserve
- the main flows work, even badly
- React Native / Expo is the right stack
- the problems are local: performance, crashes, security, structure
We rewrite when…
- the data model is wrong at the root
- the product has changed so much the app no longer fits it
- every screen has to be redone anyway
- rescuing would cost more than restarting, with numbers to prove it
Either way, the decision comes after the audit, written and costed. Not before.
04
How we take it over
Four moves, the same as on every mission.
1 / MOUNT
A five-day audit
Repo review, profiling on a production build, crash reports, security. You get a written diagnosis of three pages at most, with ranked risks and costed options.
2 / SHIP
Stabilise the critical flows
Sign-in, payments, data: we first secure what loses you users or money. Secrets come out of the app.
3 / SHIP
Refactor under tests
We put tests around what exists, then restructure in small PRs. The app stays in production throughout.
4 / UNMOUNT
Build forward with framed AI
Documented architecture, conventions encoded in our skills, a CI that blocks: your team, or ours, can ship fast again without breaking everything.
05
What you get back
- a written, costed diagnosis
- tests on the critical flows
- a CI that blocks regressions
- a documented architecture (ADRs)
- an app your team understands
06
Frequently asked questions
How much does rescuing a vibe-coded app cost?
It starts with a five-day audit. It costs the options precisely, from targeted stabilisation to a full takeover, so you decide on evidence rather than on a blind estimate.
Do we need to rewrite everything?
Rarely. Most of the time we keep the flows that work and restructure the rest under tests, with the app in production. We only recommend a rewrite if the audit shows it costs less.
How long does it take?
Five days for the audit. Stabilising the critical flows comes next, and the length of the refactor depends on the size of the app: it is costed in the diagnosis.
Do you use AI too?
Yes, every day. But framed: a senior decides the architecture, our internal skills enforce our conventions, tests block, and every PR is reviewed by a human. That frame is what was missing.
Which apps do you take over?
React Native and Expo mobile apps, whatever tool generated them: Cursor, Bolt, Rork, Claude Code or a mix.
Will our code be sent to an AI?
Yes, if you want it, and on your terms: tools that don’t train on your data, your own tools, or no AI at all. Never a secret or production data in a prompt, and we can put it in the contract.