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 real-time complaint volume from Bluesky 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. But Reddit blocks API access from cloud IPs, so we built a separate service that fetches Reddit data and pushes it alongside the Bluesky results. Bluesky serves as a secondary signal with a free, open API that runs from the cloud just fine.

Data sources

Anthropic Status Page — the ground truth. Provides a system-level indicator (none, minor, major, critical) and per-component status for claude.ai, the API, Claude Code, and more.

Reddit — the primary social signal. Searches r/ClaudeAI (and occasionally r/ChatGPT) for outage and degradation posts. Weighted higher than Bluesky because r/ClaudeAI has concentrated developer discussion with better signal-to-noise for outage complaints. Posts older than 24h are only included if they have 5+ comments (catches active megathreads).

Bluesky — the secondary social signal. Searches for posts containing Claude-related complaint phrases across all five categories (outage, usage, quality, policy, competition). Multi-layer filtering: 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. Post volume and reply depth both contribute to the score.

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

Active megathreads count as 5 posts each. Only counted if data is fresh (<24 hours).

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. Active megathreads with hundreds of comments are weighted heavily. 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.

How data is collected

Data is refreshed every 15 minutes automatically. The dashboard also fetches live status and incident data directly, and auto-refreshes every 5 minutes, so it stays current between data updates.

History is preserved for 7 days. Use the time toggle (24h / 3d / 7d) below the gauge to adjust what window all sections display.

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 picks the most-specific bucket first; vague QUALITY phrases are tried last so they can't preempt a more concrete USAGE or WEAK_OUTAGE complaint.

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 Opus 4.7, 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 RSS button in the header automatically switches between feeds based on your current source filter selection.

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. Use the official status page for actual incident tracking.

Source code

The full source is on GitHub. The data pipeline runs automatically with no external infrastructure.