CLAUDE DEVELOPER MISERY INDEX

How it works

Back to dashboard

What is this?

The Claude Developer Misery Index measures how much developers are suffering during Claude AI outages and degradations. It combines the official Anthropic status page, recent incident history, and near real-time complaint volume from Reddit (the primary social signal) and Bluesky (a secondary one) to produce a single score from 0 (bliss) to 10 (apocalypse).

Status pages are notoriously slow to update. By the time it officially says "Investigating," social media has already posted fifteen "is it just me?" threads. The Misery Index captures that gap — and the uncomfortable truth about how dependent we've all become on AI to write our code.

Reddit is the primary social signal — r/ClaudeAI is where developers go to vent when things break. Bluesky is the secondary signal: far lower volume, but an open API with no IP restrictions, so it keeps working even if Reddit closes its last public door.

This page describes the methodology as of October 2026.

Data sources

Anthropic Status Page — the ground truth. Provides a system-level indicator (none, minor, major, critical), per-component status for claude.ai, the API, Claude Code, and more, and the last 7 days of incidents with their updates. The dashboard reads it live from status.claude.com every time it loads, so the official part of the score is as fresh as your page.

Reddit — the primary social signal. Reddit shut off its unauthenticated JSON API at the end of May 2026, so the index reads Reddit's public RSS feeds instead. Each poll makes two requests, spaced about a minute apart: the newest 100 posts on r/ClaudeAI (the whole firehose, not a keyword search; every post is classified locally) and one r/ChatGPT search for "claude down OR claude outage". A hundred posts covers only about half a day of r/ClaudeAI, so the bot keeps a rolling window in memory: matching posts count for 24 hours, megathreads for up to 7 days. Reddit-only filters skip showcase, guide and benchmark titles ("I built", "tutorial", "comparison"), and a post about the author's own code breaking doesn't count as an outage. RSS carries no upvotes or comment counts, so megathreads are recognized by title keywords alone and every post counts the same.

Bluesky — the secondary social signal. The bot logs in to Bluesky's API and runs a fixed set of searches covering all five categories (outage, usage, quality, policy, competition), keeping posts from the last 24 hours. Post volume and reply count both contribute to the score.

Every post, from either network, goes through the same multi-layer filter: exclusion patterns for past-tense and positive sentiment, a strict AI-context gate so posts about people / fictional characters / films named "Claude" get rejected, and signal tiering with target-named gates for the categories whose phrases are ambiguous in everyday English (details under Post categories below).

The formula

The Misery Index is the sum of five components, capped at 10.

1. Status page (0–8 points)

IndicatorPoints
none0 — all systems operational
minor+2
major+4
critical+6
+ per degraded component+0.5 each (max +2)

2. Reddit (0–5 points) — primary social signal

Posts in the bot's rolling 24-hour window; megathreads count as 5 posts each. If Reddit hasn't been fetched successfully in the last 24 hours, this component drops to 0 rather than scoring stale data.

Effective postsPoints
00
1–2+0.5
3–4+1
5–9+2
10–19+3
20–29+4
30++5

3. Bluesky post volume (0–2 points) — secondary signal

Thresholds calibrated to actual Bluesky-Claude volume, which runs an order of magnitude lower than r/ClaudeAI (typically 1–5 posts/day, even a busy day rarely passes 15).

Posts (24h)Points
00
1–2+0.5
3–7+1
8–14+1.5
15++2

4. Bluesky reply amplifier (0–1 point)

Any replies at all count — Bluesky-Claude posts rarely get more than 1–2 replies, so even minimal engagement is a meaningful chatter signal.

Total repliesPoints
00
1–9+0.5
10++1

5. Policy spike bonus (0 / +1 / +1.5)

Combined Reddit + Bluesky policy posts in the last 24 hours. Decoupled from the category-share split so a real policy event lifts the total without distorting the per-category breakdown.

Policy posts (24h)Points
0–90
10–19+1
20++1.5

The status page carries the most weight because confirmed outages are the most reliable signal. Reddit is the primary social signal — r/ClaudeAI is a focused developer community where outage discussion concentrates, and a megathread, where a whole subreddit's complaints pile into one post, counts five times. Bluesky provides supplementary coverage but with lower volume and more noise. The policy-spike bonus only fires when an Anthropic policy event (e.g. Opus removed from Pro, pricing change, paywall) generates a real surge of dedicated chatter — not for slow background grumbling.

Misery levels

ALL CLEAR (0–1) Everything works. Suspicious.
MINOR GRUMBLING (1–3) A few posts. Probably fine.
GROWING UNREST (3–6) The complaints are picking up.
FULL MELTDOWN (6–8) Confirmed outage. Devs remembering how to read docs.
APOCALYPSE (8–10) Everything is on fire. The screen shakes.

The pixel-art office under the gauge ("Live from the office") acts out the current level. At ALL CLEAR its five staff type, doze and fetch coffee; at MINOR GRUMBLING they shrug and mutter; at GROWING UNREST they pace and facepalm while the trash can smolders; at FULL MELTDOWN they run around in a panic with a monitor on fire; at APOCALYPSE everything burns, meteors cross the window, and the staff flee, collapse or catch fire themselves. With reduced motion turned on, it shows one still frame per level.

How data is collected

Nearly everything comes from one small program: a Discord bot running on Andrew's Mac, on a home internet connection. It has to be a residential IP, because Reddit blocks requests from datacenter and cloud IPs. Every 15 minutes the bot fetches the status page, incidents, Bluesky and Reddit, classifies every post, calculates the score, and publishes three files — current.json, feed.xml and feed-official.xml — to the public GitHub repo aschau/misery-data, on a data branch that is replaced by a single fresh commit on every push.

The dashboard fetches current.json from raw.githubusercontent.com and reads status.claude.com live on top of it, falling back to the bot's copy if the live read fails. It refreshes both every 5 minutes while the page is open.

History is kept for 7 days, one point per poll. The Timeline toggle (24h / 3d / 7d) changes the window for the history chart and the incident list; the score and the Reddit and Bluesky counts always cover the last 24 hours.

Post categories

Every Reddit and Bluesky post is classified into one of five buckets so the "By Type" breakdown bar shows what kind of misery is driving the score, not just how much of it there is. The classifier tries the most specific signals first and stops at the first match, in this order: strong outage, policy, competition, usage, weak outage, quality. Vague quality phrases go last so they can't preempt a more concrete usage or outage complaint.

Reddit megathreads skip the body filters; one the classifier can't place is sorted by its title ("pricing" → policy, "regressed" → quality, "rate limit" → usage, otherwise outage).

The score breakdown is shown in two bars. By Source (Status / Reddit / Bluesky) shows where signals come from. By Type shows the five categories above plus Status, aggregated across all social sources.

AI-context gate

A post that mentions "Claude" near a generic word like broken or got worse isn't necessarily about Claude AI — Claude is also a common given name, a video-game character, and a film/book reference. To filter these without per-post tweaks, every post must contain at least one phrase from a strict AI-context list (Anthropic-specific tokens, Claude version markers like Fable 5.1, Opus 5.5 or Sonnet 5.5, AI/dev terminology like api / llm / coding / rate limit, competitor names, or unambiguous category-specific signals like regressed, rugpull, switched to). Posts that pass the identity check but contain no AI-discourse markers are dropped before any signal classification runs.

Source filter

Use the All Sources / Official Only toggle below the gauge to switch between the full misery score and one based solely on the official Anthropic status page. In "Official Only" mode, the social chatter cards (Reddit and Bluesky) are hidden entirely and the breakdown shows only the status page score. The status card expands to full width for a cleaner layout focused on confirmed outage data.

RSS feeds

Two RSS feeds are available, matching the source filter modes. Both update every 15 minutes and include recent incidents alongside the current score. The score item only changes when the level does, so your reader isn't pinged every 15 minutes.

The RSS button in the header automatically switches between feeds based on your current source filter selection.

Discord bot

The bot that collects the data also lives in a Discord server, where slash commands answer on demand: /misery (score, thermometer, status and post counts), /incidents (recent incidents), /social (top Bluesky complaints) and /reddit (top Reddit complaints).

It also posts an alert when the misery level changes, coalesced so a score sitting on a boundary doesn't spam the channel. A new level has to hold for two polls in a row before it's announced; then the channel gets an hour of quiet, with at most one catch-up alert when the hour ends if the level is still different from the last one announced. A move of two or more levels at once (say, MINOR GRUMBLING straight to FULL MELTDOWN) skips the quiet hour.

Limitations

This is a fun side project, not an SLA monitor. Keyword matching is imperfect — some posts are about general slowness rather than outages, and some genuine complaints use different phrasing. The 15-minute polling interval means short blips might be missed entirely.

The index also doesn't distinguish between "Claude is down for everyone" and "Claude is slow for some users." Both generate social posts, but the severity is very different, and every matching post counts the same: with no upvotes or comment counts in Reddit's RSS, a thread with a thousand angry replies weighs no more than one with none. Use the official status page for actual incident tracking.

The Reddit window lives in the bot's memory. After a restart, megathreads are restored from the last published data but regular posts aren't, so the Reddit count reads low for about a day until the window refills. If the bot is offline, the dashboard still shows live official status, but the social numbers freeze at the last push and Reddit's share drops out once that data is more than 24 hours old.

Reddit could restrict RSS the way it shut off the JSON API. If that happens, the Reddit component goes dark and the index runs on the status page and Bluesky alone.

Source and data

The source code is private, but the data isn't: current.json and both RSS feeds are published to the public aschau/misery-data repo on GitHub (on its data branch), and anyone can fetch them.