Issue No. 01

Your news, in magazine form.

A self-hosted reader that assembles your RSS feeds into finite, curated magazines — shaped by your interests, designed to end.

The problem

News reading today is broken in exactly two ways.

01

The firehose

Most RSS readers dump everything into a single chronological stream. A prolific publication buries a small specialized blog. You feel overwhelmed, behind, and guilty about an ever-growing unread count.

02

The algorithm

Engagement-optimized ranking maximizes time-on-screen, not informed readers. You never feel done because there is always more. The infinite scroll is a feature for the platform, not for you.

The feeling

Remember magazines?

You'd pick one up, read it, reach the last page, and put it down. You felt informed, not anxious. Nobody had engineered it to make you feel behind, or angry, or unable to stop scrolling.

Reading an Edition should feel like settling into a favourite chair with a good magazine — quiet, deliberate, finite.

The experience

A magazine, not a feed.

Every edition has a cover, a table of contents, sections, and an ending. Navigate this demo with arrow keys, swipe, or the controls below.

Editions/Morning Briefing
Tuesday, 11 March 2026
Ars Technica

The quiet revolution in reader design

8 min read
Nature
JWST captures the universe's first galaxies
The Guardian
Europe's new data sovereignty framework
6 articles2 sections12 min

Use ← → arrow keys, swipe, or click Prev / Next to explore

01

Technology

4 articles · 14 min

Section dividers signal a new topic — a visual breath before the next batch of reading.

Article layouts rotate between hero, editorial, and compact — so every page feels curated, not templated.

Ars Technica·11 March 2026

The quiet revolution in reader design

For the better part of a decade, the dominant paradigm in digital reading has been the infinite scroll. But a growing number of designers are questioning whether the stream ever served the reader at all.

8 min read
article image
Podcast·Software Unscripted
🎙️

Building finite feeds: architecture for calm software

45 min listen

Podcast episodes get their own layout — album art, a waveform, and prominent listen time.

~

You're all caught up

8 articles · 14 minutes well spent
End of Morning Briefing

And then it ends. That's the whole point.

How it works

Three steps to calm.

01

Subscribe to sources

Add RSS feeds for your favorite blogs and news outlets. Subscribe to podcasts too — they get a dedicated layout in the magazine view with album art and a waveform player.

📰 RSS feeds 🎙️ Podcasts
02

Define your focuses

Create topic areas — "Technology", "Climate", "Local News", whatever you care about. An on-device ML model reads every incoming article and classifies it into your focuses automatically. Nothing phones home.

Technology Climate Local News Science Culture
03

Build your magazine

Create edition configs — magazine templates with rules. Each section draws from a focus with its own budget. Source budgeting ensures no single prolific feed dominates.

Section Focus Budget
Quick hits Tech News 5 articles, under 5 min each
Deep dive Tech Policy 20 minutes reading time
Indie voices Favorite Blogs up to 10 articles
Intelligence

Smart ranking. Zero cloud.

An on-device ML model classifies articles, generates embeddings, and learns from your votes. All of it runs in a worker thread on your server. Nothing phones home.

Classification

Zero-shot NLI

Every article is classified into your focuses using a local language model. No training data needed — just describe your topics in plain English.

Embeddings

Semantic understanding

Each article gets a 384-dimensional embedding vector, generated locally by MiniLM. This lets the system understand what articles are about, not just what words they contain.

Budgeting

Fair representation

Source budgeting ensures no single prolific feed dominates. That small independent blog gets a fair slot next to The Verge.

It learns what you like.

Upvote an article you enjoyed. Downvote one that missed the mark. That's it — two buttons, and the system starts learning. Your votes don't just affect the article you voted on. They propagate through semantic similarity to shape the ranking of hundreds of articles you haven't even seen yet.

In the feed votes teach the system what kind of articles you want to read — quality, depth, tone
In a focus votes refine topic relevance — "this belongs here" vs "this doesn't, even if the classifier thinks so"
In an edition votes improve future curation — which articles are well-chosen for this magazine format

A few votes on climate policy articles will shift the ranking of every similar piece across your feeds, focuses, and future editions.

Your feedback loop
Relevance
01 Vote on a few articles
02 Signal propagates via embeddings
03 Rankings shift across all feeds
04 Editions improve over time
Principles

Built for readers, not engagement.

Calm

No unread counts. No urgency signals. No red badges.

Finite

Every surface has a natural end. Being done is the feature.

Private

Everything runs on your server. No data leaves. No analytics.

Yours

One SQLite file. Back it up, move it, delete it — you're in control.

The stack

Nothing exotic.

One process, one database file, one Docker container. No external services, no cloud dependencies, no PhD required.

Server
Node.js + Fastify + SQLite
Frontend
React + Vite + Tailwind CSS
ML
Transformers.js — runs locally
Deploy
Single Docker container
Get started

60 seconds to your first edition.

docker-compose.yml
services:
  editions:
    image: ghcr.io/morten-olsen/editions:latest
    ports:
      - "3007:3007"
    volumes:
      - editions-data:/data
    environment:
      - EDITIONS_JWT_SECRET=change-me
    restart: unless-stopped

volumes:
  editions-data:
docker compose up -d

Open localhost:3007 and register — the first account becomes admin.