Substrate

AI-Powered News.

The news is broken. Outlets chase outrage, headlines are written for clicks, and the same story gets told ten different ways depending on who’s telling it. Substrate exists to fix that.

We read everything, so you don’t have to.

Substrate continuously ingests news from across the political and geographic spectrum — wire services, papers of record, broadcasters, and specialist outlets. When the same event is covered by many sources, we cross-reference them to find what’s actually true.

We show the bias.

No story is frame-free. Loaded language, editorializing, and speculative attributions are stripped from the rewrite, but the framing that shaped the source coverage is scored and surfaced — so you can see how each outlet angled the story instead of just trusting that it’s gone. Every story tells you how many sources corroborated it and flags any with high framing bias.

The feed is the same for everyone.

No personalization. No recommendation engine. No engagement tracking. No A/B-tested headlines. Every visitor sees the same stories in the same order, ranked by how well-documented they are — not how well they perform.

No ads. No tricks. No agenda.

We don’t sell your attention, we don’t optimize for time-on-site, and we don’t push a worldview. Our only job is to tell you what happened.

Changelog

A running log of improvements to Substrate.

v0.30Apr 8, 2026
Source diversity expansion and Now page ranking overhaul. Added 8 new sources including independent and niche outlets (Rest of World, Semafor, UnHerd, The Dispatch, Bellingcat, Tablet, GB News, ZeroHedge) plus new AI-focused X accounts. Now page ranking rewritten: scores by recency, source depth (logarithmic), confidence, and synthesis quality with guaranteed category representation and a per-category cap to prevent any single beat from dominating. Article ceiling raised from 120 to 225 per refresh cycle. Algorithm page expanded with full pipeline documentation.
v0.29Apr 7, 2026
Quality improvements across the board based on flag review. Auto-hides garbage synthesis ("No Common Facts" and thin content) instead of publishing. Expanded junk-title filter to catch local/regional stories, puzzle answers, and betting promos. Image URL validation at ingest time — HEAD-checks every image before storing to prevent broken images. Tighter duplicate detection with title-similarity boost and lowered clustering threshold. Flag API deduplication prevents spam (same article+reason within 5 minutes is silently merged). Two new flag types: Wrong Facts and Bad Formatting. Unsplash fallback for image search when Wikimedia returns empty.
v0.28Apr 7, 2026
Two new ingest sources for broader article coverage. GNews API added as a third news aggregator (9 categories, different sampling than NewsData/TheNewsAPI). RSS feed ingestion added for 18 direct outlet feeds (CNN, NYT, WaPo, BBC, Reuters, Guardian, TechCrunch, The Verge, Ars Technica, CNBC, Nature, Politico, The War Zone, and more) — these are the outlets' own complete feeds, so articles the aggregator APIs miss still get caught. Also: security hardening (auth-gated 6 mutation endpoints, sanitized error messages).
v0.27.8Apr 5, 2026
Flagged images are now permanently banned. New blocked_images table persists every URL flagged via Replace Image, and that list is merged into the usedUrls blocklist on every refresh cron, every repair-images run, and every future flag swap — so once a photo gets flagged it can never appear on any article again.
v0.27.7Apr 5, 2026
Hardened the Replace Image flag: now passes a usedUrls blocklist (old URL + every image live in the last 72h) into findReplacementImage, so swaps never reintroduce a duplicate or return the same photo that was flagged.
v0.27.6Apr 5, 2026
Image repair digs harder: Unsplash fallback now paginates across pages 1-2 with both a 2-keyword and 1-keyword query (up to ~60 deduped candidates per article) so backfill can find a fresh photo even when the usedUrls blocklist has 500+ entries.
v0.27.5Apr 5, 2026
New minimal favicon: four stacked horizontal bars on black, bottom bar accent orange (#FF3D00). Replaces the old S mark across favicon.ico, icon.svg, and apple-icon.png.
v0.27.4Apr 5, 2026
Added /api/repair-images — a one-shot backfill endpoint that finds articles with NULL image_url in the last 72h, runs them through the fallback image picker (TheNewsAPI → Wikimedia → Unsplash), and writes back the first unused candidate. Populates the usedUrls blocklist from currently-live images so repairs never reintroduce duplicates. Safe to hit repeatedly; ?limit=N to throttle (default 40, max 80).
v0.27.3Apr 5, 2026
Switched the Substrate wordmark from Inter 900 to JetBrains Mono 800 in both the header and footer. Reads as an engineering artifact — consistent with the transparency angle, and it's a face you already had in the stack.
v0.27.2Apr 5, 2026
Moved Archive out of the top nav (still linked from the footer under Transparency). Added /logo-lab — a side-by-side gallery of 13 heavy display typefaces rendering the Substrate wordmark, for picking a less-common face.
v0.27.1Apr 5, 2026
No more duplicate hero images across articles. The refresh pipeline now loads every image URL from the last 72 hours, treats any incoming row with a duplicate image as needing replacement, and passes a growing blocklist through every fallback rung (TheNewsAPI, Wikimedia, Unsplash) so each pick is unique within the batch and across the feed.
v0.27Apr 5, 2026
Original Coverage Comparison panel on every article page. Shows how each source framed the story with verbatim quotes, biased phrases highlighted in red (loaded, editorializing, amplifying, diminishing, speculative, framing), and a short note explaining each signal. Generated during synthesis — Grok produces the neutral article AND flags the bias it removed in one pass. Collapsible per-outlet cards with severity meter (green/amber/red). Old articles backfill on their next synthesis run.
v0.26.7Apr 5, 2026
Finance category now fills properly. Added a post-ingest reclassification pass that promotes any article from a finance-tier source (CNBC, Bloomberg, MarketWatch, Barron's, FT, WSJ, Fortune, Forbes, Business Insider, Fox Business) or a finance-focused X handle (markets/macro/crypto/energy beats — @FirstSquawk, @KobeissiLetter, @CoinDesk, @JavierBlas, etc.) to finance, unless the negative filter flags it as off-beat (sports, celebrity, lifestyle, etc.). Also teaches the cluster categorizer to prefer finance when it's within 1 vote of the leader.
v0.26.6Apr 5, 2026
Article pages now do a direct DB lookup by article_id instead of filtering from the latest-50 feed. With 6 crons/day pushing new stories in, older articles were falling out of the feed window and 404'ing even though they existed in the cache. Shared links stay alive as long as the article is in the DB.
v0.26.5Apr 5, 2026
Wikimedia Commons in the image-fallback ladder. Inserted between TheNewsAPI and Unsplash so articles about named entities (politicians, landmarks, companies) get real CC-licensed photos instead of generic stock. No API key required. Credits the artist + license (e.g. 'Jane Doe / Wikimedia (CC BY-SA 4.0)'). Only picks real landscape photos ≥600×400, skips logos/icons.
v0.26.3Apr 5, 2026
Fatter Finance feed. Domain-targeted articles (CNBC, Bloomberg, MarketWatch, Fox Business, Barron's, WSJ, FT) now default to Finance unless a negative filter (sports, entertainment, lifestyle, celebrity, recipes) kicks them to Business. Finance keyword list also expanded with softer market language — shares, revenue, earnings calls, tariffs, M&A, commodities, upgrades/downgrades, futures, pre-market — so category-based and X-sourced finance coverage gets caught too.
v0.26.1Apr 5, 2026
Cron hardening. Bumped /api/refresh maxDuration to 300s (Pro tier) so ingest + clustering always fits. Cron now catches non-JSON responses (Vercel timeout pages), logs them with a body preview, and retries once before giving up. Refresh is idempotent so retries are safe.
v0.26Apr 5, 2026
Targeted finance-domain fetch. One extra call per API (newsdata + TheNewsAPI) explicitly pulls from CNBC, Bloomberg, Fox Business, MarketWatch, Fortune, Forbes, Business Insider, Barron's, WSJ, and FT so those outlets actually surface in the Finance feed instead of getting buried under the generic business bucket.
v0.25Apr 5, 2026
New Finance category. Markets, macro, Fed, rates, crypto, and earnings coverage splits out from Business into its own feed, driven by keyword classification plus remapped X handles (markets / macro / crypto).
v0.24Apr 5, 2026
Auto-refresh 4x/day on a schedule. Share button fix on desktop, fully clickable story cards, cleaner footer. 'Replace Image' flag now swaps in a better image instead of removing the article.
v0.23Apr 4, 2026
Share flow: native share sheet on mobile, dropdown menu on desktop (X, LinkedIn, Bluesky, Email, Copy link + summary). Shared text travels with a short 'neutrally rewritten from N sources' line so the story carries context wherever it lands.
v0.22Apr 4, 2026
Image fallback: swap out bad hero images (X video thumbs, missing photos) with a topical news photo or stock image.
v0.21Apr 4, 2026
Synthesis model upgrade for better writing quality and a larger context window.
v0.2Apr 4, 2026
New ingest source: hand-curated X (Twitter) handles clustered alongside wire copy.
v0.1Apr 4, 2026
Mobile polish, nav cleanup, homepage sidebar expanded, algo badge links to this page.
v0.09Apr 4, 2026
Volume + freshness overhaul. Homepage 'Now' feed with round-robin across categories. New /archive page.
v0.08Apr 4, 2026
Switched from blocklist to an allowlist of established outlets. Longer, deeper Grok rewrites.
v0.07Apr 4, 2026
Quality filters pass. Blocked aggregators, PR-wires, and stock-pump sites. Stronger junk-pattern detection.
v0.06Apr 4, 2026
Flag feedback made durable and wired into refresh suppression.
v0.05Apr 3, 2026
Newsdata.io upgraded to paid tier (top-domain filter). Local news disabled.
v0.04Apr 2, 2026
Full-article synthesis: Grok rewrites every ingested article, not just the top stories.
v0.03Mar 30, 2026
Expanded trusted-source list and relaxed single-source selection.
v0.02Mar 25, 2026
Introduced token-overlap clustering so coverage from different outlets collapses into a single story.
v0.01Mar 20, 2026
Initial pipeline: two news APIs, trusted-source filter, Grok-powered neutral rewrites.