Commit graph

6 commits

Author SHA1 Message Date
King Omar
331ad55d80 Wayback fallback: lean best-effort, drop degraded availability API + debug route
Verified archive.org 429s Cloudflare/datacenter egress IPs (same as archive.today),
so server-side archive extraction can't be guaranteed from a Worker. Keep it as a
single fast (6s-timeout) direct-endpoint attempt that succeeds when not throttled and
fails through to the user-side archive buttons otherwise. Removed /wbdebug.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 16:08:17 +10:00
King Omar
85c6cb7b61 Reject HTTP 4xx/5xx bodies in fetchBest; route dead/blocked pages to Wayback
A live 404/paywall stub with >80 words (e.g. a site's '404 - Page Not Found'
page) was being rendered as the article. fetchBest now ignores error-status
bodies and returns null when every crawler errors, so /reader correctly falls
through to the Wayback snapshot.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 16:02:56 +10:00
King Omar
88038a7c0e Wayback fallback: when live site blocks all crawlers, read from a Wayback snapshot
When the multi-crawler fetch can't get article text (FT, WSJ, etc. return
403/JS-only shells to every crawler), fall back to the Internet Archive:
resolve the closest snapshot via the availability API, fetch the raw id_
version, and extract THAT into the Radical Reader with a 'via Wayback Machine,
archived DATE' source note. archive.today can't be used server-side (429 +
captcha on datacenter IPs) so it stays as the user-side button.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 15:54:47 +10:00
King Omar
adc79c7884 Error page: lead with one-click Archive snapshot button for unreachable sites
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 15:37:52 +10:00
King Omar
665cd264cc Multi-crawler fetch: try Googlebot + social crawlers, keep richest copy
Hard paywalls (AFR etc.) block Googlebot by IP but serve full articles to
facebookexternalhit/Twitterbot for link previews. fetchBest() now fetches
several crawler identities concurrently and keeps the copy with the most text,
so the Reader works on AFR (0 -> 2256 words). Also rank archives first for
known hard-paywall domains.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 15:21:36 +10:00
King Omar
c3103e6ecb PaywallFree: read paywalled articles free — Radical reader + proxy + method hub
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 15:02:18 +10:00