Skip to content

Overview

approved

The 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

  1. One contract. A player instance is fully described by its configuration object. There is no hidden state and no environment-specific behavior.
  2. 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 in controls and capabilities. Hiding something never requires deleting content.
  3. 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.
  4. URLs only. The player consumes plain URLs for all media and assets. It performs no CMS calls and knows no asset identifiers.
  5. 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.
  6. Every visible string is replaceable. Labels, tooltips, and accessibility texts default to English and can be overridden per instance through the strings namespace.

Glossary

TermMeaning
UserThe person watching in the browser. Interacts only through the player's visible controls, never through configuration or code
Hosting pageThe site embedding the player. Its code owns the configuration JSON and speaks the page API; the word "page" alone always means this role
Player instanceOne mounted player: one host element, one resolved configuration
Host elementThe DOM element a player instance mounts into
LayoutThe overall shape of an instance: landscape or portrait
Core controlAn always-shipped baseline element with a visibility switch (for example the timeline)
CapabilityA composable LT function on top of the core (for example chapters)
CoverThe pre-playback surface: image, identity, and play affordance
ContentThe section of the configuration describing facts about the video
Configuration cascadeBuilt-in defaults, then instance configuration, then user state on top (see the config contract's merge semantics)
User stateThe three user-owned properties (volume and mute, playback rate, captions choice) that outlive configuration updates and visits
DormantEnabled by configuration but inactive because the required data is absent
Page APIThe documented JavaScript interface the hosting page uses
ShowcaseThe public demo and documentation site of the player
FeedThe 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.