All updates
frontend
backend
database
integrations

Custom domain support with DNS TXT verification

  • Serve public changelogs on your own hostname (Team plan)Added a new Domain tab in project settings that walks Team users through adding a CNAME and a TXT verification record. Once the TXT record is verified, we register the hostname with Vercel so SSL is auto-provisioned via Let's Encrypt.

New Features

  • Added a Domain tab in project settings that provided a hostname input, step‑by‑step CNAME and TXT DNS instructions with one‑click copy, a verified/unverified badge, a Verify Ownership button, and a Team-plan upgrade CTA for non‑entitled users.frontend

API

  • Added POST /api/projects/[slug]/custom-domain to save a hostname and generate a verification token, and DELETE /api/projects/[slug]/custom-domain to remove it (deregisters from Vercel when appropriate).backend
  • Added POST /api/projects/[slug]/custom-domain/verify which performed a DNS TXT check (using dns.promises.resolveTxt) and only registered the domain with Vercel after successful verification; registration relied on VERCEL_API_TOKEN / VERCEL_PROJECT_ID and resulted in automatic SSL via Let's Encrypt.integrations
  • Added GET /api/internal/custom-domain-lookup used by middleware to resolve hostnames to verified project slugs; the route returned only public slug data and relied on Redis caching to reduce DB load.backend
  • Gated custom domains on the can_use_custom_domain entitlement so the feature was available only to Team plan customers.backend

Database

  • Added a migration that created a partial unique index enforcing one project per hostname and a composite lookup index to speed hostname → project resolution in middleware.database

Improvements

  • Added shared SETTINGS_KEYS (custom_domain, custom_domain_verified, custom_domain_verification_token) and persisted domain state and verification tokens in project settings.backend
  • Implemented Redis‑backed negative and positive caching for hostname lookups (5‑minute hit TTL, 1‑minute miss TTL) and added cache helpers plus @suprlogs/cache as a web dependency.backend
  • Updated middleware to consult the cached internal lookup for unknown hostnames and rewrite verified custom domain requests to the correct /changelog/[slug] route.backend

Documentation

  • Updated .env.local.example with Vercel API variables, refreshed backlog and changelog documentation to describe the custom domain workflow and migration.