NewsFramer

Personal news engine1,700+ deliveries

Six hundred stories in.
Nine that are yours out.

NewsFramer pulls your sources every morning, scores every article from 0 to 10 against the interests and hypotheses you keep, and sends back one brief. It does not care what is trending. It cares what you track.

06:00 JST Telegram11:00 JST WhatsApp
61 sources7 topic bundles

One morning, six stages

Typical run

  1. 01

    Fetch

    ~60061 sources pulled, each on its own freshness window
  2. 02

    Classify

    ~600Labelled time sensitive or worth keeping warm
  3. 03

    Deduplicate

    ~150Five wire copies of one story collapse to the originator
  4. 04

    Analyze

    ~150Every survivor scored 0 to 10 against your own list
  5. 05

    Write

    41Only these clear the cutoff, and become 9 themes
  6. 06

    Deliver

    2Telegram at 06:00, WhatsApp at 11:00, recorded on confirmed send

Solid ticks survived the stage. Faint ticks were dropped. Every number on this diagram is a setting you can change, and all of them are on the console.

Built against five specific annoyances

Twelve feeds, three group chats, and the same story forwarded five times.

deduplicate

Every article is embedded and clustered. Near identical wire copies collapse to the originator, and the cluster stays linked, so how many outlets ran a story still counts as a signal.

News apps rank what everyone else clicks.

analyze

Nothing here is ranked by popularity. Each article is scored from 0 to 10 against the interests and open hypotheses you keep, and only what clears the cutoff is written up.

The loud topic buries the quiet one.

bundle floors

Each topic bundle is guaranteed a minimum presence and capped at a maximum. Crypto cannot take the whole brief, and cybersecurity cannot quietly vanish for a week.

You follow a story for months and never find out whether you were right.

hypothesis check

Your hypotheses are first class. When an article touches one, the brief names it and says whether it aligns with your position or challenges it.

A send that fails but still marks everything as read.

confirmed send

Article IDs are recorded as delivered only after the gateway hands back a real message ID. A failed send leaves tomorrow's brief intact.

Where it stands

deliveries recorded
1,700+deliveries recorded
slots every day
2slots every day
sources on the registry
61sources on the registry
daily disaster cap
$2daily disaster cap

Cheap models do the skimming, classifying and scoring. The one writing grade model runs once, on the finished shortlist. The two dollar figure is a disaster cap and not a target, and a rollup of the real spend arrives after the second slot lands.

tech15geopolitics13investigative13crypto7vc6cybersecurity4pakistan3

Four surfaces you can change

Nothing operational is hardcoded. The console shows all four, live where the engine can be read from a browser and read only where it cannot.

Interests

A signed weight from minus three to plus three on each topic you care about, or want pushed down. The weight becomes a direct nudge on every relevance score.

Supabase tableuser_context

Hypotheses

A claim you are testing, your stance on it, a confidence out of ten, and what would change your mind. The analyst checks each article against these by name.

Supabase tableuser_context

Sources

Sixty one feeds, each with an editorial weight, its own freshness window, a topic bundle, and a bias and factuality tag used to keep one sided coverage honest.

Supabase tablesources

Tuning

Every model choice, threshold, window, cap and floor in the pipeline. Nothing operational is hardcoded, so changing how the brief behaves means changing a value, never the source.

Engine configconfig/models.yaml