Design: the live feed

Design, 27 October 2026, step 2 of Mark's site notes. This document is the contract between the game dev session (which builds and owns the endpoint) and the website session (which builds the feed on the home page).

Why

"Right now in the galaxy" on the home page is worked out entirely from the clock when the page loads, so it feels static, and every news line has to say "may be over by now". Real commanders do things worth showing: they bring a world's data home first, share clips, heart each other's clips. The feed puts those beside the galaxy's own events, so the page feels lived in.

Honestly, for now nearly every real event will be Mark's (CMDR Jameson). The page shouldn't dress that up: no invented commanders, no padding. When there's nothing real in the last 48 hours the commanders' half is simply empty and the galaxy's events carry the feed.

Who does what

GET /feed

GET https://space.witchspace.org.uk/feed        public, no sign-in, cached 60 s

{
  "events": [
    { "kind": "clip",  "t": 1761550200000, "id": "a1b2c3d4e5", "title": "JAMESON: fighting Krait at Lave", "system": "Lave", "hearts": 3 },
    { "kind": "first", "t": 1761550000000, "callsign": "JAMESON", "galaxy": 0, "system": 7, "body": "moon0" }
  ],
  "flying": { "now": 1, "today": 2 }
}

events is newest first, firsts and clips together, at most 40 (up to 20 of each).

Firsts

From the firsts table in server/src/accounts.ts: the first commander to bring a body's data home.

Clips

From the clips database in server/src/clips.ts.

Flying

Counts only, never names.

Privacy

Nothing that isn't already public elsewhere: callsigns and firsts are on the galaxy chart, clips and their hearts are on their pages, and the counts are totals. No emails, no account ids, no network data, no clip's owner beyond what its title already says.

Caching and CORS

As built on the home page

Later

Think something here should change? Say so on the ideas board, where others can vote it up, or email hello@witchspace.org.uk. If you code: this page is docs/design/live-feed.md on GitHub, open to pull requests.