Context. surface customer · domain nyx · route /domains/nyx/renderer · auth signed-in · source apps/oshun/web/src/app/domains/nyx/renderer/page.tsx
Last walked. 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
Specimen surface. Per P3.4 (2026-05-24), this route is reclassified as a configuration/specimen page that powers the visual presentation used by other Nyx surfaces (star chart, moon, solar system). It is not part of the canonical customer journey — operators and power- users reach it through deep links from the surfaces it backs. Sibling specimen:
domains-nyx-widgets.md.
Purpose#
Configurable sky-rendering surface — tune star field generation, planet
overlays, deep-sky objects, post-processing, background, and cosmic-scale
display. The renderer powers the visual presentation used by the star chart and
is itself exposed as a configurable surface here. Wired via
apps/oshun/web/src/app/domains/nyx/renderer/page.tsx ('use client') which
mounts <NyxSkyRenderer onClose={() => router.back()} />.
Entry points#
- Direct URL / bookmark — yes (signed-in)
- In-app navigation — verify whether the star chart links into the renderer settings or whether this is reachable independently
- Browser back affordance — in-component back button calls
router.back()
Layout regions#
NyxSkyRenderer
(apps/oshun/web/src/components/domains/nyx/NyxSkyRenderer.tsx):
- Header: back button (
aria-label="Back"), title<h1>Sky Renderer</h1> - Tab bar: six tabs from
TABS—Star Field(stars,Staricon),Planets(Globeicon),Deep Sky(Sparklesicon),Post-Processing(post,Paintbrush),Background(CloudFog),Cosmic Scale(scale,Maximize2) - Per-tab content: controls for the tab's render layer — toggles with
aria-label="<label>: on/off", opacity sliders witharia-label="<layer> layer opacity, currently <N> percent" - Preview canvas — verify whether the panel includes a live preview
States#
- Loading — client component; no async data
- Default tab —
Star Field(verify initialactiveTab) - Layer toggles — each per-layer toggle flips on/off
- Opacity adjusted — layer opacity slider updates the preview
- Cosmic Scale tab — verify scale slider affects render distance
- Offline — static client bundle
Interactions#
Header#
- "Back" button (icon,
ArrowLeft) —onClose→router.back()
Tab bar (six tabs)#
- Star Field tab — sets
activeTab='stars' - Planets tab — sets
activeTab='planets' - Deep Sky tab — sets
activeTab='deep-sky' - Post-Processing tab — sets
activeTab='post' - Background tab — sets
activeTab='background' - Cosmic Scale tab — sets
activeTab='scale'
Per-layer controls#
- Layer toggle (button)
- Screen reader:
aria-label="<label>: on" / "<label>: off"
- Screen reader:
- Layer opacity slider (range input)
- Screen reader:
aria-label="<layer> layer opacity, currently <N> percent"
- Screen reader:
- Spectral / shape selectors — verify Star Field controls
Data & contracts#
- Reads: bundled defaults inside the component (~1700 lines)
- Writes: in-memory render settings; verify whether these persist across reloads
- Realtime: none
- Caching: static client bundle
- Auth/role check: middleware enforces signed-in for
/domains/*
Cross-references#
- Star chart surface:
domains-nyx-star-chart.md— the renderer's primary consumer - Sky conditions:
domains-nyx-sky-conditions.md(post- processing reflects local conditions) - Component source:
apps/oshun/web/src/components/domains/nyx/NyxSkyRenderer.tsx
Open questions / known gaps#
- Confirm whether the renderer settings have a persistence model (the star chart doesn't consume them) — is this a configuration surface whose output goes to other Nyx views, or a standalone playground?
- Document the live preview canvas — does it render with the current settings, or is it a static reference?
- Cross-cutting: the file may be a visualization-primitive surface consumed by other routes (e.g., star chart, time travel) rather than a standalone customer surface — clarify scope before walking