You prompted it into existence over a weekend and the demo was beautiful. Then somebody who wasn’t you tried to use it. Now you’re reading a stack trace you’ve never seen, in a file you didn’t write, at an hour you didn’t plan on.
I still write code, by hand. Most of it. I also run a VPS and push projects to it constantly, so when yours won’t build, won’t deploy, or won’t stay up, odds are I’ve already met that error and fixed it.
// a real afternoon. only the repo name was changed.
Tick three and you have a project. Tick six and you have an incident.
// click a symptom to tick it. be honest, nobody is watching.
You haven’t opened a diff since March. The button is right there and it’s green.
“fix”, “fix2”, “ok now fix”, “please work this time”. Seven of them today.
Someone asks why user_id is a string in one table and an int in another. You alt-tab to a chat window to find out.
package.json has 180 lines. You recognize nine of them. Four are date libraries.
“It worked when I tried it” is the entire QA department, and it only ever tried the happy path.
Twelve minutes to generate a full-stack app. Three days trying to get it onto a server, and it’s still not on one.
It’s sitting in the JavaScript you serve to strangers. Anyone with devtools open is one click from your billing page.
The app has never run anywhere except one MacBook in one coffee shop, and you close the lid to go home.
Prod is down. The only entity that ever understood this code has forgotten the conversation.
Ticked three or more? None of it is unfixable and none of it fixes itself. Tell me what’s broken and I’ll tell you what it takes.
Three is the number where it stops being bad luck and starts being a pattern. Nothing here is fatal today. This is the software equivalent of a cough you’ve had since March: you can live with it, you can even ship with it, and it gets a little louder every single time you deploy.
The good news is that at this stage it’s still cheaper to fix than to explain. Keep ticking, though, and we move from “project” to “pager”.
Rx: read one diff a day · delete one date library · write one test that can actually fail
Six of these together isn’t a rough patch, it’s a system that only appears to work, held up by one laptop, one lucky build, and a conversation nobody can find any more. Somewhere in there is a key strangers can read and a table nobody can explain. It will not stay quiet forever, and it never picks a convenient hour.
Here’s the part that should actually cheer you up: I have seen every one of these, usually all at once, usually at 3 a.m. None of it is a mystery and none of it is beyond saving. It just needs someone to read the code instead of generating more of it.
Patient: your prod · Status: unresponsive · Symptoms logged: 6/9 · One human reads these
Same feature. Same deadline. Very different Tuesday.
| Vibe coding | Raw code | |
|---|---|---|
| Who wrote it | A model, in a chat you’ve since closed | You, and you remember why |
| Before it merges | Accept All | You read it |
| When it breaks | Prompt harder, hope louder | You already know which file |
| Secrets | Wherever they ended up | On the server, in one place you can name |
| Deploying it | A three-day boss fight | Tuesday |
| Handing it over | There’s nobody to hand it to | A README and a deploy script |
| Six months in | Rewrite it | Extend it |
Most vibe-coded projects die at the deploy step or in their first hour of real traffic. I run a VPS and put projects on it every week. Yours can go there with a domain, TLS, backups, and logs you can actually read.
Copy them. Post them. Blame the vibes, not the messenger.
“Vibe coding is the only discipline where ‘I don’t know how it works’ counts as a feature.”
“You can’t git blame a conversation.”
“The prototype took a weekend. The next eighteen months are the actual project.”
“Reading code is the job. Typing it was never the expensive part.”
“Autocomplete is a tool. Autopilot is a hiring decision you made by accident.”
“If you can’t explain your auth flow out loud, you don’t have one.”
You picked the data model. You decided what happens when two requests arrive in the same millisecond. When it breaks you open the file, not a chat window.
I use AI every day. It writes my boilerplate, my fixtures, the regex I’d otherwise have to look up. Then I read every line before it goes anywhere near the repo, because typing was never the expensive part of this job. Understanding is.
There’s a simple test. Explain your data flow, your auth, and what happens on deploy, out loud, with the laptop shut. Get through it and you built the thing. Stall on the first question and you were in the room while it got built.
Vibe code your weekend project. Vibe code the thing you’re learning on, the throwaway, the demo you’ll delete on Monday. Then stop, well before anything holds money, user data, or a promise about uptime.
So write the code. Read what the model hands you before you accept it. Know which machine it runs on and how to get into it at 3 a.m. It’s slower on Tuesday and much faster in March.
Raw code. Write it yourself. rawcode.ing
Short answers, so you know what you’re walking into. If yours isn’t here, the answer is “ask me” — that’s what the form at the bottom is for.
That is the whole job. Most projects that arrive here were generated with an assistant and then hit something the model couldn’t get past — a build that won’t complete, a deploy that never worked, a schema that contradicts itself. Being AI-generated isn’t a disqualifier and it isn’t judged. It means nobody has read the code yet, and that’s where I start.
Almost always, and it’s the most common thing people send me. “Works locally, dies everywhere else” is usually a short list of concrete problems: hardcoded localhost URLs, environment variables that only exist in your shell, a database nobody actually provisioned, a build step that depends on something only your machine has. You end up with the app on a real server, with a domain and TLS, and a deploy you can run yourself.
There’s no price list, because a broken build and a security rewrite aren’t the same job. Send what it’s built with, what it does instead of working, and how long it’s been like that — you get a plan and a real number back. No discovery call, no deck. If it can be settled in email, it gets settled in email.
Either. The default is a VPS I run and maintain: nginx, systemd, a database that persists, TLS, and backups that leave the box. If you’d rather it lived in your own cloud account, that works too, and you keep the bill and the root access.
Your repo doesn’t go into a chat window. You keep the repo, the domain, the DNS and every account the whole way through. If a key turns up somewhere it shouldn’t be — in the client bundle, in git history — I’ll tell you which one and walk you through rotating it, because a key that’s been public needs replacing, not moving.
Every day. It writes boilerplate, fixtures, and the regex I’d otherwise look up. Then I read every line before it goes near your repo. The question was never whether a model was involved — it’s whether a human understood the result. Typing was never the expensive part of this job.
You’ll hear that in the first reply, with the reasoning, and you’ll have spent five minutes finding out instead of a month. Sometimes the honest answer is that the prototype did its job, you learned what the product should be, and rebuilding the core properly is cheaper than untangling what’s there. That answer is free.
That’s the point of the handover. You get a README, a deploy script, and a walkthrough of how it actually works — where it runs, how it starts, where the logs are, what to do when it stops. The goal is that you can deploy at 2 a.m. without me, not that you can’t.
Tell me what’s broken. If it’s fixable you get a plan and a number. If it’s past saving I’ll say so in the same reply, and you’ll have spent five minutes finding out. No call, no deck, no funnel.
0x00000009 · CASCADE · TUBE_FAULT · NO DUMP WRITTEN
You ticked all nine. So did the machine. The schema, the key, the build and the one laptop it ran on all decided to stop at the same moment.
There is no autosave here. No undo. No conversation to scroll back through and ask what it was thinking. This is the whole experience, rendered faithfully.
> reload the page to bring the machine back
when it is prod and not a webpage — hello@rawcode.ing