The public frontend for the Ticker project. It presents a single ticker as a live page, updating as new messages arrive.
It is a static single-page application and holds no data of its own; everything lives in the ticker API.
https://systemli.github.io/ticker/
Installation, configuration, deployment and troubleshooting for the whole stack are documented centrally:
- Installation — running the full stack with Docker
- Configuration
- Troubleshooting
The published image is systemli/ticker-frontend.
Requirements: Node 24 (see .nvmrc) and a running ticker
API.
nvm use
npm install
npm run dev # http://localhost:4000The dev server proxies /api to http://localhost:8080/v1, so run the API alongside it and nothing
needs configuring.
Delete a leftover
.env.TICKER_API_URLoverrides the proxy with an absolute address. Requests still work, but attachment images do not: their URLs are relative and would resolve against the dev server instead of the API. The file is gitignored, so an old one may still be in your checkout.
The ticker must know this address. The API works out which ticker to serve from the request's
Originheader, which the proxy sets tohttp://localhost:4000. That address has to be registered under the ticker's websites in the admin interface. Otherwise the page only ever shows "The ticker is currently inactive".
npm test # vitest, watch mode
npm run coverage
npm run lint
npm run build
npm run previewNote the service worker is only registered in production builds, so PWA behaviour does not appear
under npm run dev.
See AGENTS.md for architecture and conventions, and the development guide for working across the three repositories.
Strings live in the locales folder. To add a language, update:
- i18n.ts to register it
- MessageTime.tsx for
dayjsrelative times
Use the t('stringKey') notation for new strings and update all locales.
GPL-3.0. See LICENSE.



