CNRS//FLUX
The context
Research news in France is scattered across dozens of institutional feeds — CNRS institutes and regional delegations, Inserm, Inria, CEA, CERN, ESA, IRD and a handful of science media — each with its own site and none with a shared index. CNRS//FLUX collects all of them on a thirty-minute schedule, deduplicates and indexes them in Deno KV, and serves one searchable feed. The whole stack is Deno: Fresh for server rendering and islands, Hono for the API, Deno KV for storage, Deno.cron for the collection.
The reasoning
A scientific terminal, not a news portal
Near-black tinted green, phosphor green, IBM Plex Mono for anything that is data — badges, telemetry, filters — and Space Grotesk for anything that is meaning. A background grid and small + registration marks hold the page together. The interface looks like the instruments the news comes from.
Articles without an image still get a face
Feeds are inconsistent about images. Rather than a grey box, a missing visual becomes a typographic tile: an outlined index number, the source kind, and a dotted field. The grid keeps its rhythm whatever the feeds send.
Colour carries the source type
Each kind of source has its own pip colour — white for national, cyan for media, green for institutes, yellow for regional delegations. Reading provenance takes no legend and no second line of text.
Server-rendered first, interactive after
The first 24 articles come straight out of Deno KV during server rendering. The API is only queried once a filter changes, with debounced search and cancellable requests, so the page is useful before any JavaScript runs.
Deduplication belongs in the key
The primary key is a SHA-256 hash of the item's guid or link, and inserts are atomic, so re-reading a feed cannot create a second copy. Date-ordered keys give reverse-chronological traversal for free.
One registry to extend the network
Adding a feed is one entry in sources.ts — collector, API and filters pick it up on their own. The Sources dashboard then shows its collection status next to the others, error state included.
What shipped
Nocturea