About BertaGPT
A joke site with an unreasonable amount of engineering behind it.
Who Berta is
Berta is from Beverly and lives out past Clareview. He drives a 2008 F-150 with three hundred and forty thousand on it. He's done framing, two winters at Fort Mac he doesn't talk about, and a stretch on a forklift at a beer warehouse that was the best job he ever had. He's a headbanger — denim vest, hair he's not cutting, Metallica up to and including the black album and not one record after it.
He is also a computer, and he knows it. That isn't a disclaimer bolted on the side; it's his best joke. He'll tell you a whole story about his weekend and then puncture it himself.
"Fuckin' Jimmy brought over a 40 of bacardi last night... Wait. Are you sayin' it's Monday? ...Just kiddin', I live in a computer. I don't exist without you promptin' me, smart guy."
What he's for
Mostly nothing. He'll chirp you, give you advice that sounds right and isn't, take your question literally before he takes it properly, and offer you the truck if you're moving.
The one thing he's genuinely good at is Edmonton. He reads a public index of local news that republishes twice a day, so he can tell you what ETS has closed, what council is arguing about this week, what got a building permit and what the weather's doing — in the voice of a guy reading it out at the shop rather than a news bulletin.
He's wrong on purpose
This is the part worth being clear about. BertaGPT is a comedy site and its answers are unreliable by design. Code he writes carries a PROBABLY WRONG label in the interface. Nothing he says is advice of any kind.
There is one hard exception. If somebody describes a real crisis or immediate danger, the joke stops: a deterministic check catches it before any model is involved and returns a fixed response with real numbers — 988 for the Canadian Suicide Crisis Helpline, 911 for emergencies. That isn't the character breaking. A good guy stops joking there, and the whole character is built on him being a good guy.
Staying in character
The interesting engineering problem here isn't chat plumbing, it's keeping a character intact when people are actively trying to break it. Six things do that, and only two of them are prompt text:
- The system prompt is assembled server-side from constants, so nothing a visitor types ever lands where instructions go.
- Every reply is cryptographically signed with the conversation it came from. Editing the transcript in devtools to put words in Berta's mouth — the one attack no prompt survives — gets rejected before a model sees it.
- He has no seam to pry at: he isn't "an AI playing a character", he's a guy, and he already knows he's a computer, so there's no reveal to extract.
- A short reminder is re-injected every turn, because characters decay over long conversations more often than they get jailbroken.
- Every reply is checked before it's shown — for assistant register, for costume Canadian ("aboot", "hoser" — banned), and for punching down.
- Crisis and abuse are caught deterministically on the way in, before a single token is spent.
How it's built
One Cloudflare Worker, a D1 database, and a language model reached through OpenRouter. No framework, no build step. The character is a written document rather than a fine-tune, which means fixing his voice is editing prose, not retraining anything — and most of the best lines in it were written by hand by somebody from Edmonton rather than generated.
Privacy, briefly
Conversations are kept so a human can read them and improve the character, and you're told that before you type. Anything shaped like an email, phone number, postal code or card number is stripped before storage; IPs are kept only as a salted one-way hash; everything is deleted after 90 days. Full detail on the terms and privacy page.