feat(portal): allow PORTAL_APEX_HOSTS env to extend APEX_HOSTS #15

Merged
sharang merged 1 commits from feat/env-driven-apex-hosts into main 2026-06-10 12:05:53 +00:00
Owner

Why

The portal's apex list was hardcoded to [stage.breakpilot.com, breakpilot.com, localhost]. Deploying it at portal-dev.meghsakha.com (or any other hostname while the canonical domain isn't registered yet) hits the apex fallback for every subdomain because the parser doesn't recognize the suffix.

What

Add a comma-separated PORTAL_APEX_HOSTS env var that prepends extras to the default list. Sorted longest-first so the suffix-strip loop stays correct.

PORTAL_APEX_HOSTS=portal-dev.meghsakha.com

Now acme.portal-dev.meghsakha.com parses to { kind: "tenant", slug: "acme" }.

The defaults (breakpilot.com, stage.breakpilot.com, localhost) still work without setting the env.

Test plan

  • pnpm test — full suite passes with 100% coverage on src/lib (unchanged from before; the IIFE is exercised by existing parseHost tests)
  • After merge + image rebuild + redeploy with PORTAL_APEX_HOSTS=portal-dev.meghsakha.com, the portal recognizes <slug>.portal-dev.meghsakha.com subdomains as tenants

🤖 Generated with Claude Code

## Why The portal's apex list was hardcoded to `[stage.breakpilot.com, breakpilot.com, localhost]`. Deploying it at `portal-dev.meghsakha.com` (or any other hostname while the canonical domain isn't registered yet) hits the apex fallback for every subdomain because the parser doesn't recognize the suffix. ## What Add a comma-separated `PORTAL_APEX_HOSTS` env var that prepends extras to the default list. Sorted longest-first so the suffix-strip loop stays correct. ```bash PORTAL_APEX_HOSTS=portal-dev.meghsakha.com ``` Now `acme.portal-dev.meghsakha.com` parses to `{ kind: "tenant", slug: "acme" }`. The defaults (breakpilot.com, stage.breakpilot.com, localhost) still work without setting the env. ## Test plan - [x] `pnpm test` — full suite passes with 100% coverage on src/lib (unchanged from before; the IIFE is exercised by existing parseHost tests) - [ ] After merge + image rebuild + redeploy with `PORTAL_APEX_HOSTS=portal-dev.meghsakha.com`, the portal recognizes `<slug>.portal-dev.meghsakha.com` subdomains as tenants 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sharang added 1 commit 2026-06-10 11:04:08 +00:00
feat(portal): allow PORTAL_APEX_HOSTS env to extend APEX_HOSTS
ci / shared (pull_request) Successful in 13s
ci / test (pull_request) Successful in 10m20s
ci / e2e (pull_request) Has been skipped
ci / image (pull_request) Has been skipped
eb98391f80
Hardcoded apex list is fine while breakpilot.com is the only target
but blocks deploying the portal under any other hostname. Adds a
comma-separated PORTAL_APEX_HOSTS env that prepends extras to the
default list (longest-first so the suffix-strip loop stays correct).

Needed today to deploy at portal-dev.meghsakha.com without forking
the codebase per environment. The default list still covers dev
(localhost) and prod (breakpilot.com, stage.breakpilot.com).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
sharang merged commit 5856c1c732 into main 2026-06-10 12:05:53 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: platform/portal#15