Iona401's picture
Publish Lingo Bridge
7135dbd verified
|
Raw
History Blame Contribute Delete
2.45 kB
# visualization Specification
## Purpose
Present the 7-layer progressive translation as an interactive, toy-like
experience: a custom WebGL 3D card stack and a 2D parallel-sets view, served by
FastAPI (not Gradio, for the "Off-Brand" bonus), with per-layer audio playback.
> Ownership note: the frontend implementation under `static/*` is owned by a
> separate coding agent and MUST NOT be edited by others. This spec captures the
> intended behavior, not implementation details to change here.
## Requirements
### Requirement: Custom FastAPI-served frontend
The visualization SHALL be a fully custom HTML/CSS/JS frontend served directly
by FastAPI (no default Gradio UI), to satisfy the "Off-Brand" bonus.
#### Scenario: Frontend served from root
- **WHEN** a user opens the app root URL
- **THEN** the custom frontend is served and static assets are available under
`/static`
### Requirement: 3D card stack and 2D parallel-sets views
The frontend SHALL provide a WebGL (Three.js, vendored locally) 3D card-stack
view and a 2D parallel-sets view of the same seven layers.
#### Scenario: Both views available
- **WHEN** a translation result is rendered
- **THEN** the user can view it as a 3D card stack (original at back, final at
front) and as a 2D parallel-sets diagram
### Requirement: Source-to-target gradient colorization
Phrase blocks SHALL be colorized along a purple (source) to cyan (target)
gradient, and adjacent-layer phrase blocks SHALL be connected by broad elevated
translucent ribbons.
#### Scenario: Gradient and ribbons
- **WHEN** layers and links are rendered
- **THEN** blocks are colored from purple (source) to cyan (target) and adjacent
layers are joined by translucent ribbons, with reordering shown as crossings
### Requirement: Interactive tracing and playback
The frontend SHALL let the user hover to trace a single phrase across all
layers, play per-layer audio, play all layers in sequence, and request a random
example via a "Surprise me" button.
#### Scenario: Hover trace
- **WHEN** the user hovers over a phrase block
- **THEN** that phrase's path is highlighted across every layer
#### Scenario: Audio playback
- **WHEN** the user triggers playback on a layer or "play all"
- **THEN** the corresponding layer audio is played (one layer, or all in
sequence)
#### Scenario: Surprise me
- **WHEN** the user clicks "Surprise me"
- **THEN** a random curated example is loaded and translated