DEV Community

lingbot-map's 3D Scene Needs an Accessible Event List Beside the Canvas

Shared Scene Model and Two Views

Robbyant/lingbot-map is an Apache-2.0 feed-forward 3D foundation model for reconstructing scenes from streaming data. A browser visualization is a natural way to explore such output. A canvas can show geometry beautifully. It cannot, by itself, give every user a stable reading order, searchable object history, or keyboard path.

The accessible frontend needs one shared scene model and two views. Shared data, not an afterthought transcript:

type SceneEvent = {
  id: string;
  frame: number;
  kind: "camera" | "surface" | "object" | "warning";
  label: string;
  confidence?: number;
  timestampMs: number;
};

Feed this event stream to both the WebGL renderer and a semantic event list. Do not derive accessibility text by scraping pixels after rendering.

Semantic Companion View

<section aria-labelledby="scene-events-title">
  <h2 id="scene-events-title">Scene events</h2>
  <p id="scene-status" role="status" aria-live="polite"></p>
  <ol id="scene-events"></ol>
</section>

Each list item should expose frame number, event type, label, and confidence when confidence changes the user's decision. Selecting an item should focus the corresponding object in the canvas; selecting an object in the canvas should update the list selection.

Throttling Announcements

Do not announce every frame. Streaming reconstruction may produce many events per second. Announcing each one overwhelms assistive technology. Keep the durable list complete, but throttle the live region to meaningful summaries:

Frame 320: two new surfaces mapped; tracking confidence stable.

Warnings such as tracking loss can use an assertive announcement. Routine geometry updates should not.

Keyboard Contract

  • Tab reaches the canvas controls and event list.
  • Arrow keys move within the selected event group only when that behavior is documented.
  • Enter focuses the corresponding 3D object.
  • Escape returns to the event list.
  • A β€œPause updates” control stops motion and live announcements without discarding history.
  • Respect prefers-reduced-motion. Camera transitions should be instant or substantially reduced when requested.

Failure States

The semantic view must remain useful when WebGL fails, the model stream disconnects, or reconstruction confidence falls below a threshold. Show the last confirmed frame, connection state, and recovery action.

Test Matrix

Test Expected evidence
Keyboard-only navigation Every event and control reachable
Screen reader Ordered events with bounded announcements
Reduced motion No animated camera transition
WebGL disabled Event history and status remain visible
Reconnect No duplicate event IDs

Limitations

I have not evaluated lingbot-map’s demo with assistive technologies. This is a proposed frontend architecture for streaming 3D evidence, not a claim about the project’s current accessibility. The repository description and license were checked; implementation details may change.

A 3D model answers β€œwhere?” The semantic companion view must also answer β€œwhat changed, in what order, and what can I do next?”

Comments

No comments yet. Start the discussion.