Andrej Karpathy recently published a visualisation tool at karpathy.ai/jobs that maps every occupation in the US economy against AI exposure.
It is built on Bureau of Labour Statistics data, scored using an LLM, and rendered as an interactive treemap.
Each rectangle represents an occupation. Size means employment. Colour means risk.
It supports four different lenses :
* BLS projected growth outlook
* median pay
* education requirements
* digital AI exposure
That last one that caught most people’s attention. It is a great piece of work. The scoring prompt is published directly on the page and is explicit about what the model is and is not measuring.
That got me thinking.
Could I vibe code a version of this for the UK and EU?
And could I take it one step further?
Not just showing theoretical risk, but showing whether that risk is already showing up in real employment data?
Let’s dig in.
~
## What I Built
The prototype is a .NET 9 ASP.NET Core minimal API with a Highcharts treemap frontend.
It covers two datasets.
* 79 UK occupations drawn from ONS Labour Force Survey data
* 77 EU-27 occupations from Eurostat LFS and CEDEFOP data
You can switch between them with a single toggle. Worth mentioning these are samples, **not** complete coverage.
The 79 UK occupations account for roughly 52% of total UK employment -around 17–18 million of the 33 million people in work. The UI reflects this, labelling the figure “Jobs Covered” rather than “Total Jobs”.
The occupations not included tend to be smaller specialist roles and niche categories that are harder to score reliably.
The broad picture is representative, but it is not exhaustive.
Each occupation carries five pieces of information that matter:
* Employment in thousands
* An AI exposure score from 0–10
* Three-year employment change (2021–2024) from published ONS and Eurostat series
* Median annual salary
* A computed **trend signal** that combines exposure and employment trend into a single verdict
That last one is the part I’m most interested in. More on it below.
~
## The Treemap
The main visualisation is a square-ified treemap rendered using Highcharts.
Rectangle size is proportional to employment. Colour represents the AI exposure score. Green through amber to deep red.
Karpathy’s tool calls this metric specifically “Digital AI Exposure”, which is a useful framing: it measures how much current AI, which is primarily digital, will reshape each occupation.
Physical jobs with no digital work product score low. Jobs done entirely on a computer score high.
We use the same framing for our scores.
Large rectangles like Retail Sales Assistants, Care Workers and Warehouse Operatives dominate the space, which is the point. It forces you to look at where the actual employment is, not just the interesting edge cases.
Tapping or hovering any cell opens a tooltip with the full picture.
The sidebar runs the full Karpathy-style breakdown:
* Total jobs and weighted average exposure
* A histogram showing employment distribution across the 0–10 exposure scale
* Tier breakdown (Minimal through Very High) with employment-weighted percentages
* Exposure by pay bracket
* Exposure by education level
* Wages exposed -total annual wages in high-exposure roles
You can see this here:
Now onto the **Trend Layer**.
~
## The Trend Layer. The Part That Makes It Useful
Here is what the original US version does not have, and what I think makes this more than a forecast.
Every occupation in the dataset has a three-year employment change figure from ONS or Eurostat. I combine that with the AI exposure score to compute a **trend signal** for each occupation.
There are four signals.
* **Confirming** – high AI exposure AND employment already declining. The risk is not theoretical. It is in the data right now.
* **Lagging** – high AI exposure but employment still stable or growing. The disruption is plausible but has not shown up in headcount yet.
* **Diverging** – employment declining but low AI exposure. Something else is driving it. Offshoring, structural change, demographics.
* **Neutral** – moderate exposure or stable employment. No strong signal either way.
The logic in `StatsService.cs` is straightforward:
if (score >= 7.0 && change3Yr <= -3.0) → Confirming
if (score >= 7.0 && change3Yr > -3.0) → Lagging
if (score <= 4.0 && change3Yr <= -5.0) → Diverging
else → Neutral
The thresholds are deliberate choices, not magic numbers. A -3% employment change over three years is meaningful for a stable occupation. Adjusting them is a one-line change.
~
## Interpreting the scores
A few things the AI exposure score does **not** mean:
* **High exposure ≠ job elimination.** Software developers score 8–9/10 because AI transforms almost every part of their workflow – yet demand for developers is growing. Exposure measures how much of a role AI can touch, not whether that role will shrink.
* **The score ignores demand elasticity.** A role can be highly automatable and still grow if the cost reduction unlocks new demand (e.g., cheaper code generation drives more software projects).
* **Regulatory and social factors are excluded.** Healthcare and legal roles face high theoretical exposure but are insulated by licensing, liability, and patient/client expectations.
* **Employment change data has lag.** Labour markets adjust slowly. A “Lagging” signal means the exposure risk hasn’t shown up in the numbers _yet_ – not that it won’t.
The most actionable signals are **Confirming** (high exposure + real decline) and **Diverging** (declining despite low AI exposure, suggesting other structural forces at work).
~
## What the Data Shows
The UK Confirming signal produces 15 occupations. These are not forecasts. They are roles where both the model says the risk is high and the employment data shows it is already declining.
* Cashiers are down 22% over three years
* Bank clerks and cashiers down 18%
* Bookkeeping and payroll clerks down 16%
* Secretaries and PAs down 14%
* Customer service agents down 9%
These are large occupation categories. The numbers are not rounding errors.
The Lagging signal is equally interesting.
* Software developers are at 8/10 exposure but up 12% in employment.
* Data analysts score 9/10 and are up 22%.
* Cybersecurity specialists score 7/10 and up 18%.
* Augmentation is currently winning over displacement in those roles. Whether that holds is the question.
The Diverging signal is a useful correction. Agricultural workers are declining but score low on AI exposure. That decline is not an AI story -it is structural. The tool separates those cases rather than attributing everything to automation.
On the EU side the picture is broadly similar but with some specific differences. Translators and Interpreters are a strong Confirming case in the EU -down 14.7% over three years and scoring 8/10. Content Writers and Copywriters score 9/10 and are down 9.6%. The EU retail picture mirrors the UK – Cashiers down 15%.
~
## The Architecture
The solution is five files and a static HTML page, targeting .NET 10.
AIJobExposure/
├── Program.cs ← 2 minimal API endpoints
├── Models/Occupation.cs ← Records for Occupation, OccupationStats, Trend types
├── Data/UkOccupationData.cs ← 79 UK occupations
├── Data/EuOccupationData.cs ← 77 EU occupations
├── Data/StatsService.cs ← Weighted stats, histogram, signal logic
└── wwwroot/index.html ← Highcharts treemap + sidebar
Two API endpoints:
GET /api/occupations?region=uk|eu ← All occupations with computed trend signal
GET /api/stats?region=uk|eu ← Aggregate stats, histogram, breakdowns
No database. No configuration. Run it and open localhost.
dotnet run --project AIJobExposure
~
## The Caveats
The AI exposure scores are estimates, not measurements.
They are informed by ONS automation probability research, CEDEFOP skills forecasting and related work. The UK uses SOC 2020. The EU uses ISCO-08 and ESCO. Task structures differ, particularly for trades and vocational roles.
* The scores represent a reasonable translation of the research to UK and EU occupational categories. They are not a direct mapping. Treating them as precise numbers would be a mistake. Treating them as indicators is OK.
* The employment trend data is approximate. The three-year change figures are drawn from published ONS and Eurostat series.
* The EU figures aggregate across very different labour markets. A warehouse operative in the Netherlands and one in Romania have the same ESCO description but very different real-world automation exposure.
It is also worth noting that Karpathy makes a similar caveat on his own tool: a high score does not predict a job will disappear.
Software developers score 9/10 in his model because AI is transforming their work but demand for software could easily grow as each developer becomes more productive.
The score does not account for demand elasticity, latent demand, regulatory barriers, or social preferences for human workers. Our tool makes the same point through the Lagging signal.
~
## What This Is and Is Not
This is a conversation starter.
It is useful for workforce planning discussions, policy scoping, identifying sectors to look at more closely, or simply understanding which parts of the labour market are under genuine pressure right now versus which are under theoretical pressure.
It is not a predictive model. The data is static and is not dynamically refreshed.
The “Lagging” signal, high exposure but still growing, is a reminder that augmentation often precedes displacement.
The trend layer shows correlation, not causation.
Where employment is declining in role with high-exposure to AI, AI is a plausible contributing factor. It is not necessarily the primary factor, and the data does not let us isolate it.
~
## How Could This Be Extended?
LLM-scored exposure ratings are the most valuable improvement this prototype could have.
The current scores are research-informed estimates. They draw on published automation probability studies and academic literature, but that literature is built on O*NET, the US occupational classification system. The UK uses SOC 2020. The EU uses ISCO-08 and ESCO. For most occupations the difference is likely small but this could be changed.
Some other ideas:
* Create a console app you adhoc or whenever you decide the scores need revisiting
* Implement time series data rather than a single three-year change figure to show the trajectory of employment change rather than just the net result.
No database, no scheduler, no refresh infrastructure so all very simple.
~
## Summary
This blog post was mainly written by AI and edited by myself. The prototype was vibe coded using Claude Code and Visual Studio.
The data in this project does not tell the whole story but shows visually how AI is affecting the real world and is enough to start a conversation.
Find the source code on GitHub here.
Live demo : https://jamiemaguire.net/jobs/
~
If you have questions or want to discuss the approach, find me on LinkedIn or X.
~
JOIN MY EXCLUSIVE EMAIL LIST
Get the latest content and code from the blog posts!
I respect your privacy. No spam. Ever.
Visualising AI Job Exposure and Risk Across the UK and EU Andrej Karpathy recently published a visualisation tool at karpathy.ai/jobs that maps every occupation in the US economy against AI exposur...
#Community #AI #open #source #Prototyping
Origin | Interest | Match