Context. surface customer · domain onboarding-public · route /welcome/domains · auth anon · source apps/oshun/web/src/app/welcome/domains/page.tsx
Last walked. 2026-07-01 by Codex (welcome-marketing.spec.ts covers full six-domain catalogue order, current beta badges, anchor jumps, per-domain signup and signin CTA hrefs plus public-auth-funnel telemetry for every domain, footer auth/nav links, mobile standalone SmartAppBanner/touch targets/no overflow, real service-worker offline replay, reduced-motion runtime state, metadata preview assets, and axe-gated contrast after domain landing CSS fixes), against commit HEAD' '2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; live screen-reader, touch, offline, and telemetry-delivery checks pending a manual AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md
Purpose#
Detailed marketing content for each of the six domains (Tara, Veritas, Nyx, Arete, Nisaba, Metis) with feature showcases, capability lists, stats, use-case lists, and per-domain CTAs into the sign-up flow.
Entry points#
- Footer "Domains" or "Tara/Veritas/Nyx/Arete/Nisaba/Metis" anchor links
- Marketing campaign links targeting a specific domain anchor
(
/welcome/domains#tara) - Outbound product pages on the marketing site
- Direct URL / bookmark — yes (anon)
Layout regions#
page.tsx is a server component built on welcomePage CSS classes (shared with
/welcome and /welcome/download). Renders <SmartAppBanner /> then iterates
DOMAIN_CONTENT (a hard-coded array of six domain landing definitions, one per
WebNavigableDomainId).
- SmartAppBanner: mobile install nudge
- welcomeHero: eyebrow "OSHUN domains", h1 "Six domains, one practice", subtitle paragraph
- Six
.domainLandingSectionstacked vertically, each with:.domainLandingBadge: accent dot (fromgetDomainMetadata(id).accentColor), domain label, and a Beta pill whenmeta.availability === 'beta'.domainLandingHeadline(h2).domainLandingDescription.domainLandingStats: four<article>stat cards with value + label.domainLandingFeatures: four feature cards with<h3>+ body.domainLandingUseCases: bullet list of 4 use cases.domainLandingCta(data-attrdata-welcome-domains-actions={id}): primary "Create an account and open
- welcomeFooterCta ("Better together"): cross-domain CTA with two buttons (signup / signin)
- welcomeFooter: brand mark, nav links, anchor links to each
#<domain>, copyright withnew Date().getFullYear()
States#
- Loading — N/A; static server component
- Default — all six sections render in
DOMAIN_CONTENTorder (tara, veritas, nyx, arete, nisaba, metis) - Beta badge visible — for any domain where
getDomainMetadata(id).availability === 'beta'; current walked state: Nyx and Nisaba renderBeta. - Anchor scroll — landing on
/welcome/domains#taraand clicking the footer#metislink both bring the target section into view (id={domain.id}set on each<section>) - Standalone PWA / mobile — iPhone standalone launch shows the SmartAppBanner, preserves every CTA as a 44px+ touch target, and avoids horizontal overflow
- Reduced motion — Playwright verifies the runtime media preference is
prefers-reduced-motion: reducewhile the static page remains readable - Offline — real
sw.jswarms and replays/welcome/domainswhile the browser context is offline; no generic offline fallback header is used
Interactions#
SmartAppBanner#
- Banner row — mobile iOS install nudge is visible with Open and Dismiss controls
Per-domain CTAs#
For each of the six sections:
- "Create an account and open
" (link, primary,data-welcome-domains-cta={id})- Function: navigates to
buildPublicAuthEntryPath({ mode: 'signup', redirectPath: buildWebDomainRoutePath(id, { origin: 'home' }), entrySource: 'welcome-domains' }) - Telemetry:
public_auth_funnel_cta_clickedfires for every domain withsurface: 'welcome_domains',step: 'domains_signup', the matchingtargetDomain,targetPath, and href.
- Function: navigates to
- "I already have access" (link, secondary)
- Function: navigates to
buildPublicAuthEntryPath({ mode: 'signin', redirectPath: ... }) - Telemetry:
public_auth_funnel_cta_clickedfires for every domain withstep: 'domains_signin'and the same domain target contract.
- Function: navigates to
"Better together" footer CTA#
- "Create your account" (link, primary)
- Function:
buildPublicAuthEntryPath({ mode: 'signup', entrySource: 'welcome-domains' })
- Function:
- "Sign in to the shell" (link, secondary)
- Function: signin with
redirectPath: '/'
- Function: signin with
Footer nav#
- "Home" link —
/welcome - "Dashboard" link —
buildPublicAuthEntryPath(... signin, redirect '/' ...) - Six anchor links (
#taraetc.) — in-page scroll;#metisis verified after footer click and every footer anchor href matches a rendered section id
Data & contracts#
- Reads:
getDomainMetadata(id)from@oshun/domain-registry(accent colour, label, availability)- Domain content hard-coded in
DOMAIN_CONTENTarray insidepage.tsx
- Writes: none directly; CTAs hand off to the auth flow
- Caching: SSR static; SW cache
- Auth: anon (in middleware
PUBLIC_PREFIXES) - Telemetry: CTAs carry
data-welcome-domains-cta/data-welcome-domains-actionsattributes;PublicAuthFunnelLinkfirespublic_auth_funnel_cta_clickedon click
Cross-references#
- Sibling public surfaces:
welcome.md,welcome-download.md,landing.md - Per-domain routes (post-sign-in):
../03-tara/tara.md../04-arete/,../05-veritas/,../06-nyx/,../07-nisaba/,../08-metis/
- Cross-route navigation:
d-domain-path.md,domains-domainId.md - Component sources:
apps/oshun/web/src/components/SmartAppBanner.tsxapps/oshun/web/src/navigation/routes(buildWebDomainRoutePath)apps/oshun/web/src/lib/public-entry(buildPublicAuthEntryPath)libs/shared/domain-registry(getDomainMetadata)
- E2E:
apps/oshun/web/e2e/welcome-marketing.spec.tscovers the route-level catalogue, anchor, auth handoff, telemetry, mobile standalone, offline replay, metadata, and axe-gated accessibility contracts
Open questions / known gaps#
- Confirm telemetry firing on
data-welcome-domains-ctalinks —PublicAuthFunnelLinkdispatchestrackPublicAuthFunnelCtaClicked, andwelcome-marketing.spec.tsverifies every domain signup/signin CTA plus footer auth CTAs. - Hard-coded
DOMAIN_CONTENTarray — verify whether marketing copy is expected to be data-driven (CMS) or stays in the page source - Metis description references "the fuller learner experience unlocking
behind launch-readiness gates" — confirm against current Metis launch
state in
V1/features.md#metis - Six anchor links in footer; each href matches a rendered section id and
footer
#metisscrolls the matching section into view.