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.