DEV Community

Jack Fuchs
Jack Fuchs

Posted on

The *ck word-hack: how one two-letter domain became 80 leasable names

I never set out to build a domain business. I bought ck.gg for exactly one reason: my name is Jack, and I wanted my email address to be j@ck.gg.

That was it. That was the whole plan. For a year the domain did nothing but carry that inbox and redirect to my personal page. Then I noticed something: ck.gg is the tail of every English *ck word.

ha.ck.gg reads hack.gg. sta.ck.gg reads stack.gg. cli.ck.gg reads click.gg.

That observation turned into a product. This post is about both halves: the naming idea and the tech that ships it.

Why word-hacks still matter

Domain hacks are old news — del.icio.us shipped in 2003, instagr.am made it fashionable. But they've mostly been one-offs: a clever name for a single product.

The *ck family is different because it's a closed set. English has roughly 80 usable *ck words — hack, stack, track, click, deck, kick, lock, block, quick… That means one domain can host all of them, and each one can be exclusive: one word, one brand, ever.

One-word .gg domains themselves trade for five to six figures when they trade at all (the .gg aftermarket is tiny and hoarded). A lease of the identical read — what people say out loud, type in chat, print on a jersey — is a different price class entirely: €190–4,900/year.

The delegation trick

"It's just a subdomain" is the obvious objection. The answer is NS delegation: every leased name gets its own NS records in the ck.gg zone, pointing at the lessee's name servers.

From there the lessee controls everything: A/AAAA records, TLS certificates (Let's Encrypt treats it as its own domain for issuance), MX/SPF/DKIM for email, their own sub-subdomains. My zone only holds the delegation.

The remaining gap to "real domain" is the Public Suffix List: a PSL entry for ck.gg is submitted and pending review, so browsers will treat tenant sites as separate origins for cookies, and Let's Encrypt rate limits will apply per tenant instead of per ck.gg.

The stack (fittingly: sta.ck.gg is for lease)

The whole thing is deliberately boring tech:

  • Static HTML, generated by a ~300-line Python script. The catalog is one catalog.js file — it renders the site and is mounted read-only into the payment backend as the price source. One source of truth.
  • i18n without a framework: exact-string replacement tables (EN→DE) that hard-fail the build when a key goes stale. nginx maps Accept-Language server-side — no client-side language flicker.
  • 162 SEO detail pages (ck.gg/n/stack, two languages) generated from the same catalog, with Product/Offer JSON-LD and per-name OG images rendered via headless Chrome.
  • Stripe Checkout Sessions in custom-UI mode: 1–3 year leases are subscriptions with interval_count, 5-year prepaid is a one-time payment. A leases.json behind the webhook prevents double-selling a word.
  • nginx + docker-compose behind Traefik on a small VPS, push-to-deploy via Gitea webhook.

No database, no framework, no build pipeline beyond python3 build.py.

What's live

Five names are in use today: che.ck.gg (a research tool), sideki.ck.gg (a game-night app), ja.ck.gg (my page), feedba.ck.gg and de.ck.gg (brands). The other 76 are in the catalog: https://ck.gg

Since launch there's also a self-service portal (magic-link login) where lessees flip between NS delegation and optional add-ons — a 301 redirect, managed DNS records, or a small hosted one-pager — without ever emailing me.

If you've got thoughts on subdomain leasing economics, PSL etiquette, or which *ck word I've underpriced — comments are open, or j@ck.gg.

Top comments (0)