Skip to report
Chief / OperationalLayer · domain move3 Nov 2026

Every Bettter tool now on bettter.us

The 9 Bettter tools on the 2.31.29.205 server now answer on bettter.us names with their own certificates, and all 13 old sslip.io addresses redirect to them with path and query (engine APIs with 308 since the platform restart).

Live and verified · platform restarted · engine names 308

Where the move stands

  1. New names live

    9 bettter.us names, own certificates

  2. Old web links

    301 with path, query, #route

  3. Engine routes

    Platform secrets on new URLs

  4. Platform restarted

    Old engine names 308 since 12:37

Engine contract checks passed on the new engine names

engine-adapter · blazers17 of 17 checks
engine-adapter · trousers17 of 17 checks
engine-adapter-qa · blazers17 of 17 checks
engine-adapter-qa · trousers17 of 17 checks
engine-tech-builder17 of 17 checks
engine-tech-builder-qa17 of 17 checks
Source: OperationalLayer docs/contracts/reference/conformance.py (read-only), run 3 Nov 12:05 UTC with the platform's own route keys

Before → after

Before (until 3 Nov)

  • ops.2-31-29-205.sslip.io
  • 2-31-29-205.sslip.io (+ /trousers/)
  • convert-2-31-29-205.sslip.io
  • design-builder.2-31-29-205.sslip.io
  • design-builder-tech.2-31-29-205.sslip.io
  • adapter[-qa].2-31-29-205.sslip.io
  • design-builder-tech-engine[-qa].2-31-29-205.sslip.io

After

  • ops.bettter.us
  • adapter.bettter.us (+ /trousers/)
  • convert.bettter.us
  • builder.bettter.us
  • tech-builder.bettter.us
  • engine-adapter[-qa].bettter.us
  • engine-tech-builder[-qa].bettter.us

The control room, opened from its old address

Bettter Ops control room at ops.bettter.us after opening ops.2-31-29-205.sslip.io: nine blocks, live engine rows
Headless Chrome via browser-use, 3 Nov 12:18 UTC. The old address landed on https://ops.bettter.us/ with live rows.

Tech builder feedback works on the new name

tech-builder.bettter.us feedback page listing feedback counts per page
design-builder-tech.…/feedback.html redirected to tech-builder.bettter.us. The counts load from the same host after the page fix.
Every old → new address, checked

Checked 3 Nov 12:18 UTC without following redirects. 401 is the expected basic-auth wall. Browsers keep the #fragment: ops …/#/adapter?cat=trousers and builder …/uniqlo/#method/rules landed on the same route in Chrome. Engine rows: switched to 308 at 12:37 after the platform restart.

ToolNew name → statusCertificateOld address (deep link)Old → result
Ops dashboard / control roomops.bettter.us/ → 200valid, Let's Encrypt YE1, until 2027-02-01ops.2-31-29-205.sslip.io/state.json?probe=1301 → ops.bettter.us/state.json?probe=1
Adaptation review platform (blazers)adapter.bettter.us/ → 401valid, Let's Encrypt YE1, until 2027-02-012-31-29-205.sslip.io/platform.html?probe=1301 → adapter.bettter.us/platform.html?probe=1
Adaptation review platform (trousers)adapter.bettter.us/trousers/ → 401valid, Let's Encrypt YE1, until 2027-02-012-31-29-205.sslip.io/trousers/?lang=uk301 → adapter.bettter.us/trousers/?lang=uk
Old trousers addressadapter.bettter.us/trousers/ → 401valid, Let's Encrypt YE1, until 2027-02-01trousers-2-31-29-205.sslip.io/?probe=1301 → adapter.bettter.us/trousers/?probe=1
DXF converterconvert.bettter.us/ → 401valid, Let's Encrypt YE1, until 2027-02-01convert-2-31-29-205.sslip.io/jobs?probe=1301 → convert.bettter.us/jobs?probe=1
Sales design builderbuilder.bettter.us/uniqlo/ → 200valid, Let's Encrypt YE1, until 2027-02-01design-builder.2-31-29-205.sslip.io/uniqlo/?probe=1301 → builder.bettter.us/uniqlo/?probe=1
Sales design builder engine APIbuilder.bettter.us/v1/health → 200valid, Let's Encrypt YE1, until 2027-02-01design-builder.2-31-29-205.sslip.io/v1/health?probe=1308 → builder.bettter.us/v1/health?probe=1
Tech design builder lab sitetech-builder.bettter.us/ → 200valid, Let's Encrypt YE1, until 2027-02-01design-builder-tech.2-31-29-205.sslip.io/pieces.html?probe=1301 → tech-builder.bettter.us/pieces.html?probe=1
Tech builder lab, first addresstech-builder.bettter.us/ → 200valid, Let's Encrypt YE1, until 2027-02-01dxf-builder.2-31-29-205.sslip.io/fit.html?probe=1301 → tech-builder.bettter.us/fit.html?probe=1
Adaptation engine API (prod)engine-adapter.bettter.us/adapter-blazers/v1/health → 200valid, Let's Encrypt YE2, until 2027-02-01adapter.2-31-29-205.sslip.io/adapter-trousers/v1/health?probe=1308 → same path on the new name (since 12:37)
Adaptation engine API (QA)engine-adapter-qa.bettter.us/adapter-trousers/v1/health → 200valid, Let's Encrypt YE2, until 2027-02-01adapter-qa.2-31-29-205.sslip.io/adapter-blazers/v1/health?probe=1308 → same path on the new name (since 12:37)
Tech builder engine API (prod)engine-tech-builder.bettter.us/v1/health → 200valid, Let's Encrypt YE1, until 2027-02-01design-builder-tech-engine.2-31-29-205.sslip.io/v1/health?probe=1308 → same path on the new name (since 12:37)
Tech builder engine API (QA)engine-tech-builder-qa.bettter.us/v1/health → 200valid, Let's Encrypt YE1, until 2027-02-01design-builder-tech-engine-qa.2-31-29-205.sslip.io/v1/health?probe=1308 → same path on the new name (since 12:37)
What was done, step by step
  • DNS: 9 A records → 2.31.29.205, DNS only (not proxied), so Caddy gets its own Let's Encrypt certificates. The 22 existing records are untouched.
  • Caddy: each tool served on its new name next to the old one first. All 9 certificates were issued, then the old web names became redirects. Backup taken before any change.
  • App settings: the bug tracker's public URL (invite links), the engines' public URLs (signed result links), the control room's allowed origin, and the tech builder's pages (they treated only *.sslip.io as their own host).
  • Old web names: 301 to the new name with path and query; the old sales-builder /v1/* API answers 308. The redirects answer before any password prompt.
  • Engine routes: the platform's 4 route secrets carry the new URLs (URLs only, keys unchanged). After the platform restart, the old engine names became 308 redirects.
  • References: links in 4 repositories (READMEs, status pages, CLAUDE.md, deploy scripts and Caddy files, dashboard link cards, chat knowledge), one PR per repository, all merged.
Engine switch after the platform restart (done)
  • The 4 engine-route secrets (prod and QA × adapter, tech-builder) hold the bettter.us URLs since 12:03 UTC. Keys are unchanged; AWS keeps the previous versions.
  • The platform session restarted the prod and QA backends. ECS: one completed deployment each, tasks started 12:28:05 (prod) and 12:27:31 (QA) UTC.
  • The watcher switched each environment's old engine names to 308 at 12:37 UTC and checked them: the old /v1/health answers 308 to the new URL, and the new one answers 200. Stopped at 13:20 UTC.
  • A POST to an old engine name now gets 308 to the same path on the new name (checked on all 4).
  • BettterAIDesignBuilderTech #10 sets OLD_NAME_REDIRECTS = True. The next engine deploy writes exactly the live files (byte-identical, prod and QA).
  • Not seen yet: a platform engine job on the new names since the restart (none arrived by 13:20 UTC). The platform session confirmed its routes resolve to the bettter.us hosts.
Pull requests (all merged into main)
RepositoryPRWhat
BettterAIDesignGenerator#45Bug tracker Caddyfile (adapter.bettter.us + old-name redirects), converter, engine setup --old-host, links, status page
BettterAIDesignBuilder#12builder.bettter.us Caddy file (old name: 301; /v1/* 308), deploy DOMAIN, links, status page
BettterAIDesignBuilderTech#9tech-builder.bettter.us, site.py same-origin fix, engine deploy (old name kept until the switch), links, status page
OperationalLayer#17ops.bettter.us Caddy file, control origin, deploy.sh validation, link cards, status page
OperationalLayer#18Ask chat: knowledge base gives the bettter.us links even where old reports quote sslip.io
BettterAIDesignBuilderTech#10OLD_NAME_REDIRECTS = True: engine deploys keep the old names as 308
OperationalLayer#19Status page: the move is finished
Kept as it was, on purpose
  • platform.bettter.us and its Amplify settings, the bettter.us site, MX, SPF, DMARC and DKIM records: unchanged (zone diff: 9 added, 0 changed, 0 removed).
  • The parked Shopify app (upcycler) stays parked with no new name. The Chief host 49-13-95-174.sslip.io was not touched.
  • design-builder-tech.…sslip.io/api/* still answers. Three older pages.dev copies of the tech builder post feedback there cross-origin, and a browser does not follow a redirect for that.
  • The bug tracker's preview tool keeps <name>-<ip>.sslip.io names: they need no DNS record. A tech-builder dev engine, if ever deployed, keeps its sslip.io name for the same reason.
  • The engine registry in the control room calls the engines over loopback (127.0.0.1), not over sslip.io, so it needed no change. All 5 rows read live.
What people will notice
  • Signing in again once on each new name: the platform's site password and sign-in, the converter's password, and the control room's owner sign-in are per host.
  • Old bookmarks and links in Slack, reports and docs keep working through the redirects. Published historical reports were not rebuilt.
  • Engine result links already use the new name: a signed result file from a prod job downloaded with 200 from engine-adapter.bettter.us.
How to roll back
  • Caddy: the config from before the change is on the server in /root/domain-move-backup/20261103T115848Z (etc-caddy.tgz; stage1/ holds the state where both names served). Restore, then systemctl daemon-reload && systemctl reload caddy.
  • App settings: configs.tgz in the same folder (bug tracker, engines, control unit, caddy drop-in); restart the services.
  • Platform routes: the secrets' AWSPREVIOUS versions hold the old URLs.
  • DNS: delete the 9 A records (comment "sslip.io move 2026-11-03"). The old sslip.io names resolve on their own and never depended on bettter.us.
  • Redirects stay in place indefinitely; there is no expiry.
How this was verified
  • curl without following redirects for every old/new pair. Python TLS handshake for each certificate. Chrome (browser-use) for fragments, the control room and the tech builder's feedback.
  • conformance.py read-only on the 6 new engine routes with the platform's own keys: 17/17 each. Repository tests: Adapter 60 passed, 8 skipped. Builder 10 passed, 1 skipped. Builder Tech 11 passed, 16 skipped. opsdash 10 passed.
  • The dashboard's daily refresh ran from main after the merge (12:15 and 12:17 UTC) and deployed cleanly, including the changed validation step.