The idea
Guardian Angles grew out of a thread by the US journalist Ted Alcorn about a tool he'd built called Below the Fold. It charted 25 years of New York Times coverage — reporters, subjects, sections, states, headlines — all searchable and browsable, and it struck a chord widely. When I saw it, I thought: we should have one of these for the Guardian.
What you're looking at is my attempt. Built across a few days and many commits using the Guardian's free Open Platform API, some vanilla JavaScript, and a lot of iteration with a coding assistant called Claude. No framework. No database. No server. Just a set of static files and about a million Guardian headlines, pre-aggregated into a shape that makes this kind of browsing fast and free to host.
How I actually built this
A note that might matter: I'm not a programmer. I've never written a Python script from scratch, I don't use the command line day-to-day, and I couldn't tell you off the top of my head what a gzipped JSON shard actually is.
Every piece of this was built through the Claude Code desktop app — not by me typing code, but by me describing what I wanted to happen in plain English and letting Claude figure out how. "Can we add a view that shows what was dominating Guardian coverage the same week in every year?" "The month pill is getting clipped on desktop — can we fix that?" "Let's add a Time Machine button that jumps to a random week."
Sometimes that's a one-line change. Sometimes it's three new files, a rebuild of the index, and a commit-and-push I don't have to write. Claude writes the code, handles the git, explains what it's doing, flags when I'm wrong. I steer, it drives.
This is also why the How it developed section below reads like a journal. The whole thing is a conversation — every item there started as something I said out loud and Claude translated into code, then we iterated until it felt right. A useful thing to know, because the shape of the tool tells you what kind of back-and-forth made it.
The differences from Below the Fold
Two deliberate departures. First, Ted's tool surfaces individual reporters prominently — you can look up any NYT journalist by name and see their beats, headlines, byline frequency. That's a lot of editorial visibility for individuals and I didn't want that shape for the Guardian, so you won't find it here. Every aggregation in Guardian Angles is at the tag, section, or whole-newsroom level.
Second, rather than a one-page dashboard it's split into four tabs, each answering a different question:
- Trends — how has coverage of a topic risen and fallen? Type a word or pick a Guardian tag, compare up to four. Year-on-year overlay shows the same term across every year at once.
- Subjects — the full tag index. 3,000 subjects, ranked by volume, filterable by section or name, with a sparkline beside each one. Tick up to four and launch them straight onto the Trends chart.
- Newsroom — the Guardian's editorial output over a decade as a stacked area chart. Absolute or proportional. Strip sections out to see the news-only core. Click any month to drill into tags.
- This Week — auto-generated dashboard of the story of the week, fastest risers, fallers, and what was dominating Guardian coverage the same week in every year back to 2016.
How it was built
A daily-ish GitHub Action fetches headlines from the Guardian API and writes them as compact gzipped JSON shards, one per month. A second step aggregates those shards into search-ready indexes at monthly, weekly and daily granularity, plus a 3,000-entry tag catalog. The frontend is a single-page-application-style set of vanilla JS modules, with canvas-based charts, occasional Pretext typography effects, and Guardian colours throughout. The whole thing is a few megabytes of static files served from GitHub Pages, which is free and shockingly fast.
It's open source. Everything that isn't an API key is in the repo.
How it developed
A rough chronological log of what went in when. The newest changes are at the top.
-
Extending back to 2012
I'd been looking at the Newsroom chart and wondering what happens if we could see further back. Specifically, I remembered the Guardian went through a content-reduction moment around 2015 and I wanted it visible. Extended the backfill start date from 2016 to 2012 — covers the start of modern digital Guardian, the 2012 Olympics, Leveson, the Scottish referendum, Gamergate, and that 2015 editorial step-change. 48 extra months. The hourly CI job started chipping away.
-
"Last updated" indicator
A small pulsing green dot and italic "updated 17m ago" under the stat counter on every page. Tells you at a glance how fresh the data is. Hover for the exact timestamp. The relative format walks from minutes → hours → yesterday → days.
-
Mobile polish pass
I was worried the whole thing might not hold up on a phone, so we did a proper sweep. Eight specific fixes: chart axis labels no longer clip at the right edge; four-tag chart titles line-clamp to three lines instead of overflowing; the "Share as image" button goes full-width so the label doesn't truncate; Newsroom year labels switch to short format ('18, '20, '22) when cramped; Subjects article counts no longer lose their "k"; subnav now has a fade-out cue so you can tell there's more to scroll to; the hint copy says "hover or tap" instead of hover-only; the reading panel's CTA shrinks on narrow screens. The chart itself remains readable at 10+ years of monthly data on a phone — dense but not broken.
-
"I feel lucky", proper randomness
The curated recipe list had been firing too often, so I asked for it to feel more like an easter egg. Now 80% of picks are pure random from the top of the index, 20% are pre-baked combinations (including some deliberate odd-one-out comedy — "bread, butter, cheese, crumpet" / "pandemic, outbreak, epidemic, manflu"). The button itself moved to be the first thing you see in the sidebar, in the same styling family as the Compare button rather than a separate novelty card.
-
Name fixes, accent fixes, grammar fixes
A whole category of small embarrassments got fixed: words like "orb", "rgen", "nchez" were appearing in the random pool because the old tokenizer couldn't cross an accent boundary — rebuilt the index so "Orbán" indexes cleanly as "orban" (and a search for "orban" still finds "Orbán" in headlines). Possessives now fold together — "America" and "America's" count as one thing. UK and US section labels finally capitalise correctly. The Newsroom y-axis snaps to round values instead of the slightly awkward 5.1k / 7.6k / 10.2k steps it had before.
-
About page + masthead polish
This page. Cleaner favicon, OG share card redesigned to look like the real masthead rather than a dark blue block. Extra breathing room between the title and the blue/yellow rule on desktop.
-
Every headline becomes a link
Final API refetch across the decade captured each article's canonical URL. Clicking any headline anywhere in the site now opens the original Guardian article. Also shipped: the "I feel lucky" button redesigned to match the Compare button's editorial style; "Time machine" button replaces the random-week emoji.
-
The full decade lands
After a rate-limit saga lasting several days — the Guardian free tier was tighter than documented — a one-off quota bump from an engineer at the Guardian let us backfill the whole 124-month range from January 2016 to April 2026 in a single 25-minute burst.
-
Pre-baked lucky recipes
The "I feel lucky" button became curated. 131 word-based comparisons (from "happy, sad, joy, misery" to "bread, butter, cheese, crumpet") and 69 tag-based ones. Clicking it produces an instantly charted story rather than four random tags.
-
PNG export
Every Trends chart has a Share-as-image button that composites the current view into a branded PNG with the masthead, title, legend, and chart baked in — ready for Slack or social.
-
Year-on-year overlay
New toggle on the Trends chart: Timeline or Year-on-year. The latter overlays each year of a term's data on a shared January-to-December axis, making seasonal patterns and year-on-year shifts immediately visible. The "inflation" YoY view shows 2022 towering above every other year.
-
This Week
A fourth tab with an auto-generated dashboard: biggest Guardian tag this week, all-time peak, sample headline, weekly-sparkline, fastest risers and fallers, and "On this week in …" — the biggest tag in the same week of every year back to 2016. Later additions: arrow buttons to step through history; clickable year cards; a "Time machine" button that jumps to a random week.
-
Newsroom
A third tab: a stacked area chart of the Guardian's publishing output, broken down by section across the whole decade. Toggle sections on and off, switch to proportional view to see share-of-output, click any month to drill into tags. Reveals that Guardian output dropped from ~10k articles/month in 2016 to ~5-6k by 2024, and that World news holds a remarkably stable ~25–30% of output regardless of the news cycle.
-
Subjects
NYT-inspired table of every tag we index, ranked by volume, searchable and filterable. Tick up to four to launch them onto the Trends chart. Uses a dual-thumb year-range slider and section chips for filtering.
-
Word-boundary search
Fixed a subtle bug where the chart and the headline list disagreed. Searching "AI" used to return headlines containing "rain", "again", "Spain" in the explorer even though the chart only counted real "AI" mentions. Both now agree on word-boundary matching.
-
Section filter, rising panel, trending
Added a section filter so you can see "Starmer in Opinion only". The idle reading panel started showing "rising fastest" tags and words based on a 4-week vs 12-week baseline — a newsroom lens for what's spiking.
-
Tags mode
Words were never going to be enough. Switched the default search mode from free-text to Guardian's canonical editorial tags. Donald Trump, climate crisis, cost of living — all resolve to tag IDs that catch every article regardless of headline phrasing. 3,000 top tags indexed with autocomplete.
-
The first shape
Three views: masthead, search box, line chart, reading panel, headline explorer. Word search only. Monthly granularity. 2022–2024 data. Deployed to GitHub Pages. The whole thing was a single HTML file with three JS modules.
-
The first prompt
Before any of that, there was just a question, typed into Claude Code:
I'm interested in building something like the tool shown in this screen capture of an X thread, but for the Guardian and using the Guardian's API and Pretext. The website is here: tedalcorn.github.io/nyt. How hard would this be, and would I be able to build it in a way that was quick to load for a user? The one thing I want to avoid is the emphasis on individual writers: I prefer tags and sections to avoid individuals being exposed for various reasons. I'm kind of picturing a Google Trends / Guardian Trends kind of idea. I don't want a perfect copy of the NYT one. I want it to feel distinct and interesting. But I love the headlines thing and being able to see individual coverage of people. All ideas welcome. Maybe we start with a solid foundation that's achievable and we can build on?
Everything you've scrolled through above is what that question turned into.