year


2026

discipline


Product thinking
Vibe coding
Data visualisation

VIZ: Worldwide Attention



Have you ever questioned whether you should place your trust in the overarching narrative laid out by algorithmic news feeds? Here is an interactive data visualisation showing how much of each country’s news coverage goes to eight global topics, refreshed nightly from news in 65 languages. I designed and specified it, then directed Claude Code to build it: work that would normally take a small team.

value


How choices related between nations offers perhaps the most critically interesting insight about globally developing narratives, and by playing with the app, you will be able to draw your own conclusions about some of them. This globe makes the choices made in newsrooms across the world visible. Pick a topic to see what share of each country’s coverage it gets, how that compares with the world average, its tone (for four topics), where a press barely covers it, and which countries’ coverage rises and falls together.

It maps where stories are published, not where events happen, and it never shows a number more confidently than the data allows. A country with too few articles to measure fairly is withheld, and the page says why. A missing reading is never shown as zero, and every figure carries its own date.


view

Share of national news coverage
0%

CountryShareArticlesSentimentReading from


directing the build


The app needed a data engineer, a fullstack developer, an analyst, a designer, and a technical copywriter. I had Claude, and I directed it the way I’d usually run a product team.

A written requirements document was the spec and the source of truth: what’s true now, which rules may never break, and why. Work moved in phases, and none began or concluded without my sign-off. The first phase wrote no production code. It tested GDELT, the public news index behind the app, against its own documentation, and found plenty of gaps to force me to reshape the design multiple times. I eventually had the core pipeline walked through line by line until I could explain it myself, and I remain the only one who manually deploys to production after reviewing code and doing final end-to-end testing passes for any new change.

the feature that didn't ship


The most important decision was a feature I didn’t ship. I had envisioned, designed, and approved arcs showing how news travels: which country’s coverage moves first, and which moves after. Before a single arc was drawn, I had the claim tested. Countries’ coverage does move together, far beyond statistical chance. But measured separately on each half of the year, the answer to “who moves first” couldn’t be told apart from a coin flip. Painting one nation as a global trend leader and the other as a follower would have invented a finding.

So the default view shows the smaller, but nevertheless fascinating, claim that passed the same test for robustness: which countries move in step, with no direction implied. Even the animation grows each link from both ends at once to reinforce this view, so it never reads as flow.

built to keep running


GDELT’s free API turns away about two requests in three, and sometimes stops updating for days. So instead of fetching once and hoping, a nightly job tracks whatever is out of date and works through it until everything is fresh. Readings are archived in a database, which will outgrow the free API’s rolling window, and published efficiently as static files. Browsers only ever download those files, with no database connection and no secret keys anywhere near the page. If the database went down, the app would carry on with its last snapshot. It has run every night since production deployment based on a stack of services and guarded by over 340 automated tests.

Stack: Hugo, Python, GitHub Actions, Supabase (Postgres), D3.js on canvas, Netlify.

designing for honesty


Drawing from my professional experience creating good UX, in this product, design is where the honesty lives. A genuine zero, meaning a press that published nothing on a topic, still gets a colour on the scale, because it’s often the most telling reading. A withheld country is hatched, so it stays distinct in greyscale and to colour-blind eyes. The globe can be steered by keyboard, screen readers get a full data table, and motion respects reduced-motion settings.

next


- Diffusion of news over time once there are have two years of data
- Trace shifts in sentiment back to the articles behind them
- A location-based coverage viewing mode for the app
Oneiros (Working title)

A browser-based, interactive virtual space as an experimental, story-driven funnel for multimedia consumption. Currently in concept stage.

copyright

© Kenneth Itamah

All rights reserved.
2026