"Can We Delete Replit Now?"

Vibe coding · 5 min read
"Can We Delete Replit Now?"

Migrations go wrong when everything seems ready. The site is running, the DNS is correct, it feels good — and then you skip the wrong question. I did it. Claude Code did it too. And together it cost us two days, some of which I'd rather forget. This is the story of a near-disaster, what really went wrong, and why "ready" is sometimes the most dangerous thought.

28 February 2026 • Vibe coding • By: Peter

I nearly lost everything because of one question.
"Claude, can we Replit delete pb.nl now?"
And I actually knew it while typing it. Two and a half gigabytes of data, months of work, everything I had built. Just: leave that thing for a while. But no. Frugal decision. Click. Done.
And then the database was empty.

How It Came to This

NON TECH: I wanted to move this site pb.nl to a new environment at company Vercel
The migration to Vercel was a battle in itself. No major issues, but every little thing takes time. And then you manage to get it done late at night — site live, DNS via Cloudflare, pb.nl running on Vercel.
Feeling of: great. Done. Well done, Pete.

But someone should have asked a question here. Not me, and Claude Code neither.
Because that Neon database — it wasn't in my own Neon account at all. It was still fully running from Replit. Replit had created it, Replit managed it. And no one — not even Claude Code — had asked: "Is that database actually in your own account, or still via Replit?"

That's the question that would have prevented the whole disaster. One moment of checking. Two minutes to verify. But we both went through the technical checklist too quickly. The code worked, the connection worked, the site was running — so it felt ready. That's exactly when you should stop for a moment.

The next day, check: empty database.
The Neon PostgreSQL database created via Replit was no longer accessible. Just gone. No warning, no migration option, no "hey, are you sure?".
79 blog posts. 39 likes. 7 homepage banners. 609 F1 news items. 261 lookbook images. Zappa studio. Months.
I went crazy.

Replit Support: Waiting

I immediately contacted Replit support. Normally they respond quickly — but now it took a long time. Longer than I was used to. Nothing. Silence. And then you start thinking. Is it really gone? Can this just happen? What have I done?
But something lingered in the back of my mind. I always think in such cases: yes, but if, and can't it also be that. The same thought loop over and over, looking for an opening. There must be something.
I kept trying. Different connection strings. Different regions. Everything I could think of.
And then: "password authentication failed."
Wait a minute.
Password authentication failed is not the same as "server not reachable." It refused the password — but the endpoint was still alive. That server was still running. Tried the wrong region: c-3.eu-central-1 instead of c-2.us-west-2.

CONNECTED.
All 45 tables. Everything. Still present.
Within five minutes, I wrote a migration script. Transferred everything to the new database. 45 tables, 0 errors.

What Was Really Lost

After the euphoria, calmly searching. Result: 10 images from a Runway AI blog post and 1 Zappa identity image — those were on Replit Object Storage, not on Cloudflare R2. That part is no longer accessible. I'll upload those manually again.

Out of thousands of files and dozens of tables: 11 images lost. The rest: 100% intact.

What I Learned (Really, Not as a Buzzword)

Don't trust AI blindly — and AI should question you better too. Claude Code should have asked: "Is that Neon database in your own account?" He didn't. I should have checked it myself. I didn't either. We were both too quick. A good collaboration also means asking each other the crucial questions, especially before doing something irreversible. I've learned: take your time, verify the basics, don't trust the feeling of "ready" too quickly.
Know exactly where your data is. I had images in three places: Cloudflare R2, Neon PostgreSQL, and Replit Object Storage. Two out of three survived the migration. Had I known that beforehand, I would have moved the third first.
Dump everything before you migrate. Not "the API still works, I can retrieve it later." No. Dump. Everything. In advance. Seriously.
Keep your credentials. The old database URL was still in .env.local. That saved everything. Had I cleaned up that file, the data would have been truly gone.
Sometimes you need to take a step back. For two days, I thought it was gone. The frustration, the anger, the feeling that months of work were for nothing. And then it turned out the database was still alive. Patience is terrible, but it pays off.

About Closing Replit

It does feel strange, to be honest.
My first real experience in vibe coding was with Replit. The big advantage was watching along — building things live on the spot, immediately seeing what happens, no setup, no hassle. For someone who had sat next to developers for years but never really coded themselves, that was gold. It invited you to just do.
But now I'm much further along myself. Vercel, Claude, terminal — it now fits better with how I work. And that I, as a designer, have also started working so much with the terminal, I never thought. Replit initiated that.
So: thank you, Replit. It was a good start.

And now: Vercel Pro, own Neon PostgreSQL, Cloudflare R2. No platform dependency. 45 tables intact. Zero dependency on third parties for the main site.
From complete data loss to full recovery in 48 hours.
Those 48 hours were the toughest of the entire project. But the end is right.

— Peter
pb.nl now runs entirely on Vercel Pro + own Neon PostgreSQL + Cloudflare R2
THE END