Nocturea
← Work

CNRS//FLUX

Client

In-house

Scope

News aggregator

Year

2026

Duration

In-house, ongoing

cnrs-flux.simon256px.deno.net
CNRS//FLUX — cnrs-flux.simon256px.deno.net

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.

CNRS//FLUX — article card, typographic tile
article card, typographic tile
CNRS//FLUX — search console, five facets
search console, five facets

The reasoning

01

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.

02

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.

03

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.

04

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.

05

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.

06

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

01 Dark terminal design system, self-hosted type, no front-end dependency
02 Article card with typographic fallback tile
03 Search console: full-text query, five facets, debounced
04 Sources dashboard: 44 feeds, collection status and volumes
05 Hono API: articles, sources, stats, manual collection
Next project

Nocturea

Open