apple-web-app
Use when implementing, debugging, or auditing how any website or web app looks and behaves on iPhone and iPad — in Safari or…
Look up Elron train times, fares and connections between Estonian (and cross-border Latvian) stations, see live delays and positions of running trains on a map, and check Ühiskaart farecard balances, remembering the user's home station and cards. Use when someone asks about
$ npx -y skills add joe-bell/skills --skill elron --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/elronContext preview
The summary Claude sees to decide when to auto-load this skill.
Look up Elron train times, fares and connections between Estonian (and cross-border Latvian) stations, see live delays and positions of running trains on a map, and check Ühiskaart farecard balances, remembering the user's home station and cards. Use when someone asks about
name: elron description: Look up Elron train times, fares and connections between Estonian (and cross-border Latvian) stations, see live delays and positions of running trains on a map, and check Ühiskaart farecard balances, remembering the user's home station and cards. Use when someone asks about trains in Estonia, Elron departures, the next or last train to or from a station, whether a train is late or where it is, which trains will pass through a station, ticket prices, or the balance on their Elron or Ühiskaart card. metadata: source: hand-maintained by Joe Bell; derived from the public Ridango API behind elron.ee and elron.ee's live map feed reviewed: "2026-10-03 against api.ridango.com and elron.ee/map_data.json" upstream: "https://github.com/joe-bell/skills/tree/main/skills/elron" version: "2026-10-02.5"
Elron runs Estonia's passenger trains. Timetables, fares and farecard balances come from the public Ridango API at `api.ridango.com`; live running data comes from the feed behind the live map on `elron.ee`. Neither needs a login.
Use the bundled script rather than calling either source by hand. It resolves stop names, sends requests in the shape the API expects, remembers the user's settings and prints compact results. It needs Python 3.9+ and nothing else.
python3 scripts/elron.py stops [QUERY] python3 scripts/elron.py trips [FROM] TO [--date YYYY-MM-DD] [--all] [--connections] python3 scripts/elron.py live [QUERY] [--map [PATH]] [--tiles] [--watch [SECONDS]] python3 scripts/elron.py passing STATION python3 scripts/elron.py balance [CARD_NUMBER] python3 scripts/elron.py config [--home STOP] [--add-card N] [--remove-card N] [--clear]
Run it from this skill's directory, or pass the script's full path.
The skill ships with no station and no card. Learn them from the user, once.
("when's the next train to Tartu?"), run `trips TO`. If it reports that no home station is saved, ask which station they usually travel from, save it with `config --home STOP`, then answer. From then on `trips TO` starts there. If they name a different origin, pass both stops and leave the saved one alone unless they ask.
run `balance`. If no card is saved, ask for the number, save it with `config --add-card N`, then answer. `balance` with no argument checks every saved card. Use `--remove-card` when they ask you to forget one; it takes the full number or the last four characters, which is all the output shows.
`~/.config/elron/config.json` (or `$ELRON_CONFIG`), readable only by the user. Where the filesystem doesn't persist between conversations, as in a hosted chat's sandbox, keep the home station in the host's own memory as well and pass it explicitly.
**Never write the user's station or card numbers into this skill's files.** Installs are copied folders: anything stored here is lost on the next update and leaks if the install is shared. Don't repeat a card number back beyond what the answer needs.
Answer in a sentence or two, leading with what was asked. For "when's the next train to Tartu?":
> The next one leaves at 16:21 and gets in at 18:20. After that: 17:37 and > 19:02.
late"). Add the fare, bikes or express only when the user asks about them.
name only stations off the user's stretch, such as a change of train further down the line.
only if asked, and don't describe the script, its sources or its output.
and a unique partial name works too; "Riga" finds Riia. An ambiguous or unknown name lists the candidates; pick one or ask. `stops QUERY` helps when unsure what a station is called.
Europe/Tallinn and hides trains that have already left, saying how many it hid. `--all` shows the whole day; `--date` picks another (convert "tomorrow" or "Saturday" to a date first, in Estonian time).
Rows are trains the user can still catch, allowing for a late train's delay.
single-ticket fare in euros, `bikes ok` when bikes are allowed, `express`, Elron's notices, and `live:` for a train that is on its way right now.
it adds journeys with one change automatically; `--connections` adds them anyway. Each says where and when to change.
left but not yet reached the user's stop under `Already on the way`, with their live status, allowing for delays. `live` lists every running train with its delay, last stop, speed and coordinates; filter it with a line or stop name (`live Tartu`).
through or just went through, stopping or not ("what's the next train through Kehra?", "what was that train that didn't stop?"), run `passing STATION`. "Next train" questions stay with `trips`, which lists trains that stop. `passing` places each running train on its line from its live position and speed, and says whether it stops there.
All times are Estonian local time; say so only if the user may be elsewhere. If no journey turns up even with one change, say there's no Elron train for t
Use when implementing, debugging, or auditing how any website or web app looks and behaves on iPhone and iPad — in Safari or…
Fetch recently watched films from a Letterboxd member's diary RSS feed and render them as a compact markdown list, with first-run…