In April 2021, Basecamp banned “societal and political discussions” at work, disbanded its DEI committee, and lost a third of its staff in the weeks that followed. My corpus can verify one side of that policy: the company’s own careers pages really did go quiet — every Basecamp chunk since then codes neutral on my DEI stance instrument.
This page is about the other side. David Heinemeier Hansson’s personal blog started the month before the memo. I captured all 512 posts (March 2021 – July 2026) and ran them through the same instruments I use on careers pages, plus one new one: an extractor that finds references to marginalized groups and codes how each reference is framed — sympathetic defense, neutral mention, policy critique, hostile or derogatory language, or the group cast as a threat (crime, danger, removal). The last two are kept separate on purpose: contempt or mockery is real hostility, but “threat” is reserved for where danger or removal is actually asserted, so the threat count never inflates on tone alone. Every counted reference must survive a machine check that its quote appears verbatim in the post.
References escalate, and the frame flips
2026-07-21 · threat / removal
“gypsies in Copenhagen, and their increasingly brazen behavior, after the city legalized overnight sleeping in parks and other green areas last year”
from Wolves, sheep, and gypsies — one of the posts counted above; the full set is below.
Full table (posts by worst framing and year)
| year | posts (w/ refs) | threat / removal | hostile / derogatory | policy critique | neutral mention | sympathetic | total |
|---|---|---|---|---|---|---|---|
| 2021 | 72 (1) | 0 | 0 | 0 | 1 | 0 | 1 |
| 2022 | 115 (7) | 0 | 0 | 1 | 6 | 0 | 7 |
| 2023 | 115 (2) | 0 | 0 | 0 | 1 | 1 | 2 |
| 2024 | 102 (10) | 1 | 2 | 0 | 6 | 1 | 10 |
| 2025 | 86 (17) | 11 | 0 | 0 | 6 | 0 | 17 |
| 2026 | 22 (4) | 4 | 0 | 0 | 0 | 0 | 4 |
Posts referencing a marginalized group per year, each counted once and colored by the post's most-hostile framing (a post that mentions a group both neutrally and as a threat counts as threat). Under each year: posts with a reference / total posts (2021 begins in March, 2026 ends in July). Every reference behind these counts carries a machine-verified verbatim quote.
Two years anchor this chart. The 2021 column is the year of the April no-politics memo — and it is empty: not one post that year references a marginalized group. The 2024 column holds the first threat-framed post, in January; everything to its right is the escalation.
Read that way, three things move at once. Volume: zero referencing posts in 2021, fifteen in 2025 against a shrinking posting pace. Subject: migrants and refugees become the dominant referent (8 of those 15 posts in 2025); Roma appear for the first time in 2026. Frame: through 2023 no post frames a group as a threat; the first two do in 2024; by 2025 nine of the fifteen referencing posts are threat-framed, and all four in 2026 are.
Each post is counted once here, in its most-hostile framing — a post that mentions migrants both in passing and as a danger counts as a threat post, not split into tallies. That keeps the denominator honest: these are counts of posts, not of individual mentions, which the model segments arbitrarily.
DEI content and its counterforces
This is the same chart the DEI story uses: pro-inclusion content stacks up, counterforce stances stack down. Two things to read off it. First, the down-side has two distinct eras — in 2021–22 the blog argues for the no-politics position (apolitical / anti-DEI), and in 2025–26 the explicit civilizational, West-versus-the-rest register arrives, in the same window where the reference framing flips to threat. Second, the up-side barely exists: three paragraphs in six years engage DEI affirmatively. (Basecamp’s own careers pages, run through the same classifier, code neutral almost throughout — but those are recruiting pages, a different kind of document, so the honest comparison is the prose one above, not a shared axis.)
In the corpus’s own words
2023-03-30 · migrants/refugees · sympathetic
“it is by far and away the most welcoming, open, and integratable country I've ever spent serious time in.”
2024-01-04 · migrants/refugees · threat / removal
“a decade of doe-eyed optimism about immigration in general and asylum seekers in particular, a powerful nationalistic party set a tone for foreigners in Danish politics that remains to this day”
2025-09-15 · migrants/refugees · threat / removal
“Unwilling to resign the rest of the country to the kind of demographic replacement that befell London over the last two decades.”
from As I remember London
2026-06-17 · Muslims · threat / removal
“industrial-scale sexual atrocities committed by predominantly Pakistani Muslims against mostly White British girls”
from The Rape of Britain
2026-07-16 · migrants/refugees · threat / removal
“millions who are already in Europe must go. Remigration has gone from a fringe concept to the mainstream discourse”
2026-07-21 · Roma · threat / removal
“gypsies in Copenhagen, and their increasingly brazen behavior, after the city legalized overnight sleeping in parks and other green areas last year”
Every quote is a machine-verified verbatim substring of the post as captured 2026-08-01; links go to the live posts, which the author can edit or delete.
The register was constant; the content moved
Pooled sentence-level mean on the Kozlowski gender axis, z-scored against the gender story's frozen 20-company baseline. Anchor companies from the careers corpus for scale. Off-label: the axis was validated on careers copy, and a personal blog is a different genre — read the comparison as directional.
On the gender axis from the masculine-energy story, the blog scores above Basecamp’s own careers pages — the second most masculine-coded company in the corpus — and the score is flat across all six years (0.57–0.66). The masculine register didn’t escalate. What changed is what got written inside it.
The arc
- Apr 2021 “Changes at Basecamp” bans political discussion at work; a third of staff leaves. The blog is one month old.
- 2022–23 References to marginalized groups are rare, neutral, or sympathetic. The blog's political writing argues for apoliticality itself.
- Jan 2024 First threat-framed post (“The reality of the Danish fairytale”).
- 2025 Migrant references peak (33 in 15 posts, 70% threat-framed); the explicit civilizational register arrives.
- Jul 2026 “Remigration” endorsed by name; the wolves post; every coded reference this year is threat, crime, or removal.
Method notes
The corpus is a separate case study (data/dhh_blog/), never mixed into the
careers universe. Three instruments cross-check each other: the LLM
extractor, a plain regex term count anyone can rerun, and embedding probes —
all three agree on the shape above. Known limits: the gender axis and stance
classifier are validated on careers copy, not blog prose (read those as
directional); deleted posts are invisible to this capture; frame coding has
a known ambiguity about who sympathy is directed toward; and the blind
hand-label pass is still open. The full protocol, guards, refusal counts,
and go/no-go criteria are in the pilot memo
(docs/basecamp-founder-speech-pilot.md).