V1 Web PWA · Surface walkthrough

Studio Aja · Reference Video Library

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

walked
8sections2 minread

On this page

Context. surface studio · domain aja · route /studio/aja/reference-video-library · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/aja/reference-video-library/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#

Admin lane console for querying the reference-video library. Its catalog lane wires the library query + duplicate-detection engine via /v1/admin/aja/reference-video-library: filter a library item set by format / tag / title search, stable-sort by a key + direction, and flag content duplicates by checksum — returning matched/total counts, the sorted items, and the duplicate groups.

Entry points#

  • Direct URL / bookmark/studio/aja/reference-video-library; metadata sets alternates.canonical
  • Linked from /studio Domain-bridge studios section (Aja sub-area)
  • Quick action — "Open Aja Gaming Pipeline workspace" (/studio/aja/gaming-pipeline)

Layout regions#

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

  • Workspace StudioAjaReferenceVideoLibraryWorkspace<h1> "Aja Reference Video Library Workspace" + summary (data-aja-reference-video-library-summary), then the Library Catalog Lane (<h2 data-aja-rvl-lane-heading>)
  • Route Map panel (data-aja-reference-video-library-route-map, <h2>) — 5 entries from STUDIO_AJA_REFERENCE_VIDEO_LIBRARY_ROUTE_MAP
  • Quick-action lanequickAction links: gaming-pipeline, /studio

States#

  • Loadingdata-aja-rvl-loading "Loading reference-video library…" while GET /v1/admin/aja/reference-video-library is in flight
  • Unauthorized (gated)data-aja-rvl-unauthorized on 401/403; admin scope message ("Aja workspace scope required to query the library.")
  • Errordata-aja-rvl-error on non-OK / malformed / network failure
  • Ready (form)data-aja-rvl-form once the catalog loads (engine summary data-aja-rvl-engine-summary)
  • Resultdata-aja-rvl-result (-headline matched/total + duplicate groups, -items-list, -duplicates-list) after a successful POST; query error in data-aja-rvl-query-error
  • Offline — SSR shell; lane error state when fetch unavailable
  • Standalone PWA — desktop layout; quickAction anchors wrap
  • Empty — N/A; catalog (formats / sort keys / directions) is constant

Interactions#

Library Catalog Lane#

  • Library items JSON (<textarea data-aja-rvl-items>, label "library items json")
  • Format (<select data-aja-rvl-format>) — — any — + catalog formats
  • Tag (<input data-aja-rvl-tag>, label "tag")
  • Search (<input data-aja-rvl-search>, label "search")
  • Sort by (<select data-aja-rvl-sortby>) — catalog sort keys
  • Dir (<select data-aja-rvl-sortdir>) — catalog sort directions
  • "Query library" (<button data-aja-rvl-submit>) — POSTs { items, query } to /v1/admin/aja/reference-video-library/query

Route Map panel#

  • 5 entries (<article> per path + purpose) — non-interactive

Quick-action lane#

  • "Open Aja Gaming Pipeline workspace"/studio/aja/gaming-pipeline
  • "Back to Studio workspace index"/studio

Data & contracts#

  • Reads: GET /v1/admin/aja/reference-video-library (catalog: summary, formats, sortKeys, sortDirections) on mount, cache: 'no-store', buildBffAuthHeaders()
  • Writes: POST /v1/admin/aja/reference-video-library/query
  • Realtime: none
  • Caching: client fetch on mount (no-store); SSR shell
  • Auth/role check: BFF endpoints admin-scoped, fail-closed (401/403 → unauthorized render); route gated signed-in + studio via the proxy

Cross-references#

Open questions / known gaps#

  • The lane queries a library item set supplied as JSON in the form; it does not browse a persisted library catalog from the backend