Skip to content

Align OpenAI template behavior across nav and Studio accessibility controls - #2547

Open
groupthinking with Codex wants to merge 2 commits into
mainfrom
codex/complete-openai-template-uvai-website-studio
Open

groupthinking with Codex wants to merge 2 commits into
mainfrom
codex/complete-openai-template-uvai-website-studio

Conversation

@Codex

@Codex Codex AI commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Canonical issue

Linked by repository automation.

Outcome

Home/Pricing navigation and Studio pane controls now match the OpenAI Responses starter interaction model more closely, with responsive pane switching and stronger accessibility semantics. This addresses the template-completeness gap without changing product flow or pricing behavior.

<div role="tablist" aria-label="Studio views">
  <button role="tab" aria-selected={mobilePane === 'chat'} aria-controls="studio-panel-chat">
    Conversation
  </button>
</div>
<div
  role="separator"
  tabIndex={0}
  aria-valuemin={240}
  aria-valuemax={560}
  aria-valuenow={leftWidth}
/>

Scope

  • Included:
  • Navigation (Home/Pricing): mobile links now carry aria-current parity with desktop active-state semantics.
  • Studio shell: mobile pane controls upgraded to tablist/tab semantics with keyboard navigation.
  • Studio shell: splitters now expose keyboard-resizable behavior with ARIA min/max/current values.
  • Studio shell: pane collapse/restore controls now expose aria-controls/aria-expanded.
  • Added targeted tests for nav active-state parity and Studio pane accessibility contracts.
  • Explicitly excluded:
  • Pricing content, checkout flow, product catalog values, and Studio business logic.
  • Visual redesign beyond template behavior/accessibility alignment.

Risk

  • Risk level: low
  • Failure mode:
  • Keyboard/focus interactions in Studio panes regress on specific breakpoints or assistive tech combinations.
  • Rollback:
  • Revert apps/web/src/components/studio/StudioIdeShell.tsx, apps/web/src/components/Nav.tsx, and related new/updated tests.

Verification

List exact automated and manual checks, tied to the current head SHA.

  • Focused tests
  • Required CI
  • Review threads resolved

Production evidence

Not yet applicable for this PR body update; runtime evidence should come from preview validation in PR checks.

Agent handoff

  • One canonical issue is linked
  • No competing PR implements the same issue
  • Acceptance criteria are satisfied
  • Required checks pass on the current head
  • Human decision is requested only for product, security, irreversible infrastructure, or production approval

Security dependency evidence

  • Advisory: Not applicable (no advisory-driven dependency change)
  • Package and versions: Not applicable
  • Validation: Not applicable
  • Rollback: Not applicable

@vercel

vercel Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
v0-uvai Ready Ready Preview, v0 Nov 2, 2026 2:57pm UTC

@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Co-authored-by: groupthinking <154503486+groupthinking@users.noreply.github.com>
@Codex Codex AI changed the title [WIP] Update UVAI website and Studio to match official OpenAI template Align OpenAI template behavior across nav and Studio accessibility controls Nov 2, 2026
@Codex
Codex AI requested a review from groupthinking November 2, 2026 14:58
@groupthinking
groupthinking marked this pull request as ready for review November 2, 2026 20:08
Copilot AI balanced review requested due to automatic review settings November 2, 2026 20:08
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

🔍 PR Validation

⚠️ PR title should follow conventional commits format

<div className="template-pane-tabs" role="tablist" aria-label="Studio views">
{MOBILE_PANES.map((pane) => (
<button key={pane} type="button" role="tab" id={`studio-tab-${pane}`}
aria-selected={mobilePane === pane} aria-controls={`studio-panel-${pane}`}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At viewport widths of 900px or less, replacing aria-pressed with aria-selected removes the active-pane highlight because the stylesheet still targets aria-pressed='true'.

Fix on Vercel

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The change breaks mobile tab selection styling, exposes resizers whose announced values diverge from fixed pane widths, and removes the page’s only main landmark.

3 open issues
What changed in this PR

This PR advances #2386 by aligning UVAI navigation and Studio controls with the OpenAI Responses starter’s accessibility patterns, without changing pricing or the core product flow.

Changes:

  • Adds mobile navigation active-page semantics matching desktop links.
  • Adds Studio tab semantics, keyboard resizing, and pane-control accessibility attributes.
  • Adds navigation tests and updates Studio interaction tests.
File Description
apps/​web/​src/​components/​studio/​StudioIdeShell.tsx Adds accessible tabs, keyboard splitters, and collapse/restore semantics.
apps/​web/​src/​components/​Nav.tsx Adds aria-current to active mobile links.
apps/​web/​src/​components/​__tests__/​StudioIdeShell.template.test.tsx Updates tab assertions and tests keyboard splitter behavior.
apps/​web/​src/​components/​__tests__/​Nav.template.test.tsx Adds Home and Pricing active-navigation tests.

Review effort: Balanced

if (key === 'ArrowUp') next = current + RESIZE_STEP;
if (key === 'ArrowDown') next = current - RESIZE_STEP;
if (next === null) return false;
update(clampPaneWidth(next));
<div className="template-pane-tabs" role="tablist" aria-label="Studio views">
{MOBILE_PANES.map((pane) => (
<button key={pane} type="button" role="tab" id={`studio-tab-${pane}`}
aria-selected={mobilePane === pane} aria-controls={`studio-panel-${pane}`}
id="studio-panel-chat"
data-testid="studio-ide-chat-pane"
aria-label="Chat"
role="tabpanel"
@github-actions github-actions Bot added javascript Pull requests that update javascript code tests labels Nov 3, 2026
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

✅ E2E Test Results: ALL TESTS PASSED

Metric Value
Status 🟢 GREEN
Total Tests
Passed 16
Failed
Deployment https://v0-uvai-fe5az7gtg-garv1.vercel.app
Test Output
y request without persisting it�[32m 1�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mTemplate Gallery�[2m > �[22mhomepage returns 200 with HTML�[33m 380�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mTemplate Gallery�[2m > �[22mfeatures page contains template/workflow markup�[33m 317�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mTemplate Gallery�[2m > �[22mfeatures page surfaces at least 5 workflow/template indicators�[33m 393�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mVideo Pack Pipeline�[2m > �[22mPOST /api/video/pack accepts a YouTube URL without hanging�[33m 2805�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mVideo Pack Pipeline�[2m > �[22mGET /api/video/pack resolves to a ready pack with evidence lineage�[33m 874�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22mmissing URL returns 400, not a hang�[32m 203�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22minvalid URL returns 400 quickly, not a hang�[32m 207�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22mPOST /api/video/pack with no body returns 400�[32m 193�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mDashboard�[2m > �[22m/dashboard returns 200�[33m 323�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mDashboard�[2m > �[22m/dashboard contains agent or pipeline visualization markup�[32m 226�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mAPI Health�[2m > �[22mGET /api returns a response (not 404)�[33m 1140�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mAPI Health�[2m > �[22mretired /api/pipeline routes are gone (no pipeline served)�[32m 111�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mStatic Assets�[2m > �[22mhomepage has proper meta tags�[32m 271�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mStatic Assets�[2m > �[22m/features page returns 200�[32m 233�[2mms�[22m�[39m

�[2m Test Files �[22m �[1m�[32m1 passed�[39m�[22m�[90m (1)�[39m
�[2m      Tests �[22m �[1m�[32m16 passed�[39m�[22m�[90m (16)�[39m
�[2m   Start at �[22m 08:27:51
�[2m   Duration �[22m 11.12s�[2m (transform 53ms, setup 0ms, import 65ms, tests 10.94s, environment 0ms)�[22m


This branch was successfully deployed

1 active deployment
Preview — 39c25c9d Deployed Nov 2, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

javascript Pull requests that update javascript code tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Complete official OpenAI template across UVAI website and Studio

4 participants