How it was built
What this project had to get wrong before the boards could stay honest.
TfL Components is an independent project and is not affiliated with or endorsed by Transport for London.
TfL identifiers
A station name is not an id. Liverpool Street is several StopPoints. The Underground one does not carry Elizabeth line arrivals. Polling a hub interchange id such as HUBLST returns nothing useful. The Board and Explorer therefore resolve sibling StopPoints from the same hub tables tfl-ts already ships, instead of asking visitors to learn NaPTAN.
Normalising sources
TfL knows which stations a service calls at, and in what order. OpenStreetMap knows which metres of track that service runs on. Those answers live in different shapes. The geographic map draws simplified unique track joined by station membership, not by snapping a station onto the nearest line. That join is still unfinished for some branches. The data model page says where.
Platforms and shared track
Circle, Hammersmith & City, and Metropolitan trains share metal in places and then don't. A board that paints every arrival as the line in the API field will lie at Victoria and at Baker Street in different ways. Shared-platform grouping and shared-track identity are separate rules, both derived from topology, not from display names.
Caching and quota
The Unified API is free and rate-limited. Public examples on this site use a server cache. A personal Board asks for the visitor's key and keeps it in the browser or in the URL hash. Showing the last good response after a failed refresh is allowed. Calling that live is not.
Unattended household displays
The hosted Board is for an iPad on a kitchen counter as much as it is for a docs demo. Unattended mode advances pages on a timer, keeps rank chips stable, and pauses when the tab is hidden. Home-screen and wake-from-sleep still need checking. That is why the Board page says experimental.
Accessibility
Station names wrap and abbreviate on a 48px tile. Find, copy, and screen readers still need the full name. That constraint produced the findable-text primitive, not a CSS truncate. Motion on the homepage is optional and has a pause control. There is no WCAG certificate behind that work. Details are on Accessibility.
Components versus the hosted app
Installable boards take normalised data as props. Fetching, API keys, and this website's chrome stay in the app. shadcn copies source into the consumer repo. That split keeps a kitchen display from inheriting docs-site machinery, and it keeps MIT from accidentally covering photographs and TfL marks. See Licence.