V1 Web PWA · Surface walkthrough

Studio Aja · Depth Sensing

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

walked
8sections4 minread

On this page

Context. surface studio · domain aja · route /studio/aja/depth-sensing · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/aja/depth-sensing/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; body re-derived 2026-06-03 from current source (lane-console architecture)

Purpose#

Aggregator console that unifies the Aja spatial-capture lane consoles for depth sensing. It has no /v1 fetch of its own — it renders a capability summary plus five named lanes, each embedding a sibling leaf workspace (Depth Analysis, Multi-View Reconstruction, Pose Estimation, Segmentation, Ground Truth Comparison), so the operator can run all the depth-sensing primitives from one surface.

Entry points#

  • Direct URL / bookmark/studio/aja/depth-sensing; metadata canonical to this path
  • Studio nav — Domain-bridge studios section of /studio
  • Breadcrumb parent/studio/aja/depth-analysis (declared in the page.tsx breadcrumb <ol>)
  • Sibling quick-actions on this page: Depth Analysis, Multi-View Reconstruction, Pose Estimation, Segmentation, Back to Studio
  • Operator surfacing — see ../../studio-overview.md

Layout regions#

page.tsx renders inside <ShellLayout active="studio">:

  • Breadcrumb panel (data-aja-depth-sensing-breadcrumbs): <nav aria-label="Aja Depth Sensing breadcrumbs">Studio / Aja Depth Analysis / Depth Sensing
  • Workspace (<StudioAjaDepthSensingWorkspace />, archetype: AGGREGATOR):
    • <h1> (WorkspaceHeading) "Aja Depth Sensing Workspace"
    • Summary <p data-aja-depth-sensing-summary> — unified depth-sensing surface
    • Capability Summary panel (data-aja-depth-sensing-capability-summary, <h2>Capability Summary</h2>) — 4 data-aja-depth-sensing-capability cards: sensing-control-plane, diagnostics-and-trace-observability, security-permission-audit-controls, api-parity-and-contract-assurance
    • Named lanes (each a <h2> panel embedding a sibling via WorkspaceSection):
      • data-aja-depth-sensing-depth-analysis-lane → "Depth Analysis Lane" → <StudioAjaDepthAnalysisWorkspace />
      • data-aja-depth-sensing-multi-view-reconstruction-lane → "Multi-View Reconstruction Lane" → <StudioAjaMultiViewReconstructionWorkspace />
      • data-aja-depth-sensing-pose-estimation-lane → "Pose Estimation Lane" → <StudioAjaPoseEstimationWorkspace />
      • data-aja-depth-sensing-segmentation-lane → "Segmentation Lane" → <StudioAjaSegmentationWorkspace />
      • data-aja-depth-sensing-ground-truth-comparison-lane → "Ground Truth Comparison Lane" → <StudioAjaGroundTruthComparisonWorkspace />
  • Route Map panel (data-aja-depth-sensing-route-map): <h2>Route Map</h2> listing 6 entries from STUDIO_AJA_DEPTH_SENSING_ROUTE_MAP (primary, streams, calibrations, reconstructions, parity, governance)
  • Quick-action panel: five Link.quickAction anchors — Depth Analysis, Multi-View Reconstruction, Pose Estimation, Segmentation, Back to Studio

States#

The aggregator has no fetch of its own; loading / unauthorized / error / ready / result states are owned per embedded lane (each leaf GETs its own catalog on mount and renders its own admin-scope unauthorized / error / form / result blocks — see the individual sibling docs):

  • Depth Analysis Lane<StudioAjaDepthAnalysisWorkspace />
  • Multi-View Reconstruction Lane<StudioAjaMultiViewReconstructionWorkspace />
  • Pose Estimation Lane<StudioAjaPoseEstimationWorkspace />
  • Segmentation Lane<StudioAjaSegmentationWorkspace />
  • Ground Truth Comparison Lane<StudioAjaGroundTruthComparisonWorkspace />
  • Empty / Standalone PWA / offline — N/A at the aggregator level; shell is SSR, each lane is a client fetch on mount

Interactions#

Embedded lanes#

Each lane's form fields and submit are owned by the embedded leaf:

  • Depth Analysis Lane — embeds StudioAjaDepthAnalysisWorkspace
  • Multi-View Reconstruction Lane — embeds StudioAjaMultiViewReconstructionWorkspace
  • Pose Estimation Lane — embeds StudioAjaPoseEstimationWorkspace
  • Segmentation Lane — embeds StudioAjaSegmentationWorkspace
  • Ground Truth Comparison Lane — embeds StudioAjaGroundTruthComparisonWorkspace

Capability Summary#

  • Capability cards (4 × <article>) — non-interactive descriptive copy

Route Map panel#

  • Route entries (6 × <article>) — non-interactive path+purpose

Quick-action panel#

  • "Open Aja Depth Analysis workspace"/studio/aja/depth-analysis
  • "Open Aja Multi-View Reconstruction workspace"/studio/aja/multi-view-reconstruction
  • "Open Aja Pose Estimation workspace"/studio/aja/pose-estimation
  • "Open Aja Segmentation workspace"/studio/aja/segmentation
  • "Back to Studio workspace index"/studio

Data & contracts#

  • Reads / Writes: none at the aggregator level; delegated to the embedded leaves, which GET their catalog on mount and POST their verb:
    • GET /v1/admin/aja/depth-analysis
    • GET /v1/admin/aja/multi-view-reconstruction
    • GET /v1/admin/aja/pose-estimation / POST /v1/admin/aja/pose-estimation/evaluate
    • GET /v1/admin/aja/segmentation
    • GET /v1/admin/aja/ground-truth-comparison / POST /v1/admin/aja/ground-truth-comparison/compare
  • Realtime: none
  • Caching: each embedded lane does a client fetch on mount with cache: 'no-store' and buildBffAuthHeaders(); SSR shell only
  • Auth/role check: each embedded BFF endpoint is admin-scoped + fail-closed (401/403 → that lane's unauthorized render); route behind the signed-in + studio proxy gate

Cross-references#

Open questions / known gaps#

  • Ground Truth Comparison is embedded as a lane but is not surfaced in the quick-action panel; confirm whether that omission is intentional
  • Route-map sub-routes are advertised but have no page.tsx in V1