Files
sites/playwright.config.ts
zeekayandHanzo Dev b4840c8dd0 feat: one branded site shell — erp / crm / cms / help, one app
The four are not four applications. They are one application whose `module` is a
value read off the hostname, because the thing behind all four — the framework
DocType engine — already treats an app lane as a module tag over a registry. The
first DNS label picks the site; the registered domain picks the brand. Keeping
those two resolutions apart is why erp.zoo.ngo is an ordinary sentence and not a
special case.

The renderer is @hanzo/ui/framework (list / detail / form from DocType metadata
alone), so this repo holds no per-module code and adding a fifth product is one
entry in SITES plus a DNS record. Auth is the console's IAM PKCE path — the access
token is the only credential, and cloud derives the org from its membership claim,
so this app never chooses a tenant.

Proven locally against a real cloud binary serving /v1/framework: nine Playwright
cases sign in through the app's own button and photograph all four hosts at 390x844
and 1440x900, asserting real records are on screen and that nothing scrolls
sideways on a phone.

Found on the way: @hanzo/brand's getBrand() takes a HOST, not a brand id, so
getBrand('lux') silently returns the Hanzo brand — every white-label caller keying
it by id is quietly wrong.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 11:13:34 -07:00

10 lines
211 B
TypeScript

import { defineConfig } from '@playwright/test'
export default defineConfig({
testDir: './e2e',
timeout: 90_000,
workers: 1,
reporter: [['list']],
use: { headless: true, ignoreHTTPSErrors: true },
})