Appearance
Overview
approvedThe LT Player is the proprietary web video player of Latest Thinking. It ships as the npm package @latest-thinking/lt-player: a self-contained, ESM-only bundle that mounts players into host elements on any web page. Consumers configure everything through a single JSON contract; they never modify the player itself.
What the LT Player is
- A video player for editorial video content: publications, talks, and short-form vertical video.
- One package, two layouts (landscape and portrait), one configuration contract.
- Self-contained: all runtime dependencies are bundled; the package assumes nothing about the hosting site's stack, CMS, or infrastructure.
- Configurable, not modifiable: behavior is controlled exclusively through the documented configuration and page API, in line with the license.
Design principles
- One contract. A player instance is fully described by its configuration object. There is no hidden state and no environment-specific behavior.
- Content and presentation are separate. Facts about the video (sources, poster image, title, author, chapters, tracks) live in
content. What the player shows and enables lives incontrolsandcapabilities. Hiding something never requires deleting content. - Core plus capabilities. Every instance ships the same core playback baseline with tunable visibility. Custom LT functions are capabilities: composable modules that are available when their data exists and enabled unless configuration says otherwise.
- URLs only. The player consumes plain URLs for all media and assets. It performs no CMS calls and knows no asset identifiers.
- The page stays in control. A documented page API covers mounting, control, capability triggers, and events. Anything the player UI can do, the hosting page can trigger.
- Every visible string is replaceable. Labels, tooltips, and accessibility texts default to English and can be overridden per instance through the
stringsnamespace.
Glossary
| Term | Meaning |
|---|---|
| User | The person watching in the browser. Interacts only through the player's visible controls, never through configuration or code |
| Hosting page | The site embedding the player. Its code owns the configuration JSON and speaks the page API; the word "page" alone always means this role |
| Player instance | One mounted player: one host element, one resolved configuration |
| Host element | The DOM element a player instance mounts into |
| Layout | The overall shape of an instance: landscape or portrait |
| Core control | An always-shipped baseline element with a visibility switch (for example the timeline) |
| Capability | A composable LT function on top of the core (for example chapters) |
| Cover | The pre-playback surface: image, identity, and play affordance |
| Content | The section of the configuration describing facts about the video |
| Configuration cascade | Built-in defaults, then instance configuration, then user state on top (see the config contract's merge semantics) |
| User state | The three user-owned properties (volume and mute, playback rate, captions choice) that outlive configuration updates and visits |
| Dormant | Enabled by configuration but inactive because the required data is absent |
| Page API | The documented JavaScript interface the hosting page uses |
| Showcase | The public demo and documentation site of the player |
| Feed | The shorts module driving one recycled portrait instance through the page API |
Vocabulary rules
- User, not viewer. The person watching the video is the user, everywhere in this specification. The word never refers to a developer consuming the package; that role is always the hosting page or the integrator.
- Capability, not feature. A capability is a composable player function. The word "feature" is reserved for the delivery process and never describes player functions in this specification.
- Layout, not type. The word "type" is not used for landscape and portrait; they are layouts. Historic type names from earlier player generations do not appear in this contract.
- Cover, not poster. The pre-playback surface is the cover; the image inside it is the cover image.