Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
翻訳待ち
A personal UK rail companion: TfL-style line status, live train tracking, and ticket/Delay-Repay support — with first-class handling of operators whose routes share trunk track, so an incident is only
翻訳待ち
暮らしTypeScript · CSSGitHub @Distant-Signalオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
A personal UK rail companion: TfL-style line status, live train tracking, and ticket/Delay-Repay support — with first-class handling of operators whose routes share trunk track, so an incident is only ever flagged on the lines it actually affects.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
A personal UK rail companion: line-status aggregation in the TfL-Unified-API
style, individual train tracking, accounts, and ticket/Delay-Repay support.
It has first-class support for operators with multiple parallel
routes that share trunk track (SWR, Southeastern, Northern, etc.) — knowing
the difference between an incident on a shared trunk (which should
propagate to every line using that trunk) and an incident on an *exclusive
segment* (which should not) is this project's original core and still its
real differentiator.Read the full README ↗Distant Signal is a personal UK rail companion. It shows the status of every line, tracks your trains and journeys as they run, plans trips and helps with Delay Repay claims.
Use it at ds.cursed.solutions.
The screenshots come from the e2e test fixtures, not real users' data (see Screenshots).
Distant Signal is a set of small Rust services around one Postgres
database, with a Next.js frontend. Producers write to Postgres directly or
to Redis streams, which ingest-writer applies. The api serves the
frontend and the public API. The workers derive line status, enrich
incident text and send notifications.
graph LR
subgraph producers[Producers]
pollers["pollers<br/>incidents, departures, stations,<br/>operators, TfL, Ireland, transit"]
trust["movement-relay and the<br/>TRUST consumers"]
sched["schedule-ingest,<br/>schedule-reference"]
end
streams[("Redis streams<br/>ds:ingest:*, movement-events")]
writer[ingest-writer]
pg[("Postgres")]
agg["aggregator,<br/>enricher"]
notifier[notifier]
api["api<br/>(axum)"]
fe["frontend<br/>(Next.js)"]
browser([browser])
pollers --> pg
pollers --> streams
trust --> streams
trust --> pg
sched --> pg
streams --> writer --> pg
pg <--> agg
pg --> notifier
pg --> api
api --> fe --> browser
notifier -. "Web Push" .-> browser
DESIGN.md has the full design: the data sources, the domain
model and the reasoning behind each choice.
Every line comes from the curated catalogue in ds-core's
lines/, one TOML file per passenger route
(lines/SCHEMA.md has the format). Each station on a line belongs to a named segment. A segment name
that appears on several lines is a shared trunk: an incident there shows on
every line that uses it. An incident on a segment unique to one line shows
only there. That distinction, for operators with parallel routes over
shared track such as SWR, Southeastern and Northern, is the project's
original core.
The matcher grades each incident-to-line match, from an exclusive segment
(most confident) down to an operator-only match, which is capped at Minor
Delays and dropped when a more precise match exists. Severities follow
TfL's scale, with two National Rail additions; DESIGN.md §5 has the
details.
The project is split across these repositories (the repo split,
docs/specs/repo-split.md):
| Repository | Role |
|---|---|
distant-signal (this one) | The frontend, the project's front page, docs and dev stack. It owns all issues. |
ds-core | The shared crates, the database schema and migrations, grants, the stream envelope and the line catalogue. |
ds-api | The api, the trip planner and the timetable services, with the generated API types and changelog. |
ds-ingest | ingest-writer, the Kafka relays and the TRUST movement consumers. |
ds-pollers | The pollers. |
ds-workers | aggregator, enricher and notifier. |
ds-deploy | The Helm charts and the deploy tooling. |
ci | Shared workflows, actions and the Renovate preset. |
.github | The organisation profile, the security policy, the contributing guide and the issue forms. |
| DS-MCP (hosted elsewhere) | An MCP server for Distant Signal. It consumes the public API. |
The repository holds the Next.js frontend (frontend/), the docs, the
dev stack and Python tooling (scripts/, managed with
uv). The frontend's API types come from the
api image frontend/api-image.txt pins; the Rust services are in the
repositories above.
This is the beginning of the README. Read the rest at the original. Read the full README ↗