V1 Web PWA · Surface walkthrough

Nyx · Sky Renderer

A per-surface walkthrough of the V1 Web PWA customer surface: layout, states, interactions, data, and cross-references.

walked
8sections3 minread

On this page

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 TABSStar Field (stars, Star icon), Planets (Globe icon), Deep Sky (Sparkles icon), 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 with aria-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 tabStar Field (verify initial activeTab)
  • 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#

  • "Back" button (icon, ArrowLeft) — onCloserouter.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"
  • Layer opacity slider (range input)
    • Screen reader: aria-label="<layer> layer opacity, currently <N> percent"
  • 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#

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