Blog

EBKAC.ORG Goes Live (Almost): A Firebase Custom Domain Story

EBKAC.ORG Goes Live (Almost): A Firebase Custom Domain Story

The domain arrived this morning. ebkac.org. After days of running this site on a Firebase default URL that nobody would ever bookmark intentionally, there it was in the Netcup dashboard: registered, paid, mine.

EBKAC, for the uninitiated, stands for Error Between Keyboard And Chair. It is an old IT industry shorthand for the most common category of technical fault: the human operator. Usually deployed to describe someone else’s mistake. I chose it as the name for this blog because I am a firm believer that the most instructive errors are your own. A name like that has a certain obligation attached to it.

So naturally, what followed was a comedy of errors.


Firebase Hosting was already running. The site had been live for weeks on ebkac-hugo-webpage.web.app. Adding a custom domain should be the easy part. Firebase Console, Hosting, “Add custom domain”, type ebkac.org, click “Weiter”.

The “Weiter” button was grayed out.

Not broken, not spinning, not throwing an error. Just… gray. I tried Tab to focus it. I tried Edge. I tried Firefox. I opened the browser console — nothing useful. Cleared cache. Tried a private window. Tried logging out and back in. The button sat there, unmoved, radiating quiet contempt.

At some point I decided this was either a UI bug, a quirk of the free Spark plan, or a small test from the universe. I gave up trying to click my way through it and asked Claude.


This is the part I want to be honest about, because it matters.

Claude looked at the situation and figured out two things I had not bothered to check. First: Firebase CLI v15.9.0 does not have a hosting:sites:customdomain command. It was added later, or removed, or never shipped, depending on which version of the documentation you are reading. Second: the Firebase Management REST API can do it directly, no console required.

What followed was a short Node.js script, an access token fetched via gcloud, and two API calls: one to register ebkac.org, one to register www.ebkac.org. Both returned 200. Done.

I want to resist the temptation to dramatise this. It was not miraculous. It was just useful in the specific way that a colleague who has already read the documentation is useful. I had not read the docs. The AI had. Without it, I would have filed a bug report, waited a week, and possibly abandoned the whole thing. With it, I was done in twenty minutes.


DNS at Netcup was straightforward by comparison. A TXT record for domain ownership verification, an A record pointing ebkac.org to 199.36.158.100, and a CNAME pointing www to ebkac.org. Saved.

Then the waiting began. The TTL on those records is 86400 seconds. Twenty-four hours. There is, somewhere in a Google data centre, a Firebase server that will check DNS every five minutes or so until propagation confirms ownership. It has not confirmed yet.

This post was written while waiting.


There is something fitting about a site called EBKAC launching like this. Not a clean go-live with a green dashboard and a congratulatory notification. Instead: a grayed-out button, a REST API, a DNS record sitting in a queue. The domain is registered. The configuration is correct. The infrastructure is ready. We are just waiting for the internet to catch up.

Soon.


Update — same day, a few hours later.

It turns out the AI also makes DNS errors.

After setting the records Claude recommended, the Firebase Console came to life and showed a second step: SSL certificate creation, requiring a _acme-challenge.ebkac.org TXT record. The hosting-site=ebkac-hugo-webpage TXT I had set earlier? Not needed. Wrong advice, confidently given.

To Claude’s credit, it acknowledged the mistake immediately when shown the Firebase screenshot. Then it gave the correct instructions. That is probably as much as you can ask of a colleague, human or otherwise. The name of this blog remains appropriate.