← Changelog

One Link to Send: palmer-ai.didi.sh, the Client Hub with a Real Domain

You can't send a client a raw railway.app URL and expect trust — so now there's one branded, bookmarkable page per client: open your CRM, connect your AI, and a didi-account teaser for what's coming.

· Michael Staton · with Claude Code on Claude Fable 5

One Link to Send: palmer-ai.didi.sh, the Client Hub with a Real Domain

Why Care?

The first thing a client stakeholder ever sees of their stack is a link in a message. If that link reads twenty-server-production-4b1e.up.railway.app, the product feels rented before it's even opened. Phase 5 got pulled forward for exactly this reason: https://palmer-ai.didi.sh now lands on a branded page that says, in order — here's your CRM, here's how to connect Claude to it in two minutes, ChatGPT is coming, and one didi account will hold all of this soon.

What's New?

  • A tiny Astro hub site (hub/ — pure Astro + CSS + one vanilla-JS copy button, per the tech hierarchy): CRM button, the four-step Claude connector walkthrough with copy-paste URL, the "let Claude walk you through it" agent-doc fallback, an honest ChatGPT stub, and the didi-account coming-soon card. One codebase; a CLIENT env picks the client per deployment.

  • Deployed inside each client's Railway project (D1 discipline), both verified live; palmer-ai additionally carries the custom domain palmer-ai.didi.sh with its own cert.

  • Verified on mobile — the page and the path to Twenty work from a phone, which is where half the real usage lives.

  • A new agent skill from the trenches: context-v/agent-skills/custom-domain-cutover/ — the full DNS-cutover playbook (Vercel-DNS zone, wildcard override, the --resolve truth probe, and the browser-cache theater that makes live domains look dead).

The one gotcha worth retelling

The cutover was server-complete minutes after the DNS records landed — and still showed a 404 locally for a while longer. Hard-refresh doesn't fix that: the browser caches DNS itself and keeps sockets open to the old server. Full browser quit (or a phone on cellular) is the honest test. It's in the skill now, so the next cutover costs zero confusion.

What's Next

Twenty member invites for the first palmer-ai stakeholders, then the real acceptance test: a terminal-poor human, one link, "help me set this up." The hub content stays deliberately portable into the lossless.group site (its eventual pretty home), per the spec's disposable-stopgap intent.

Files changed

  • hub/
  • context-v/agent-skills/custom-domain-cutover/SKILL.md