Goodbye WordPress

🔗 **Source:** [Goodbye WordPress](https://nolanlawson.com/2026/09/30/goodbye-wordpress/)
> [!note]+ Document Notes
> tags: [wordpress-migration, static-site-generators, astro, self-hosting, coding-agents]
> author: Nolan Lawson
> source: nolanlawson.com
> reference: https://nolanlawson.com/2026/09/30/goodbye-wordpress/
> date created: 2026-10-01 10:11
>
> > [!info] Generated analysis — not the author's words. Sections below are machine-written
> > from the captured source. Only text inside `> [!quote]` blocks is verbatim from the author.
> > Do not quote or attribute any other line to the named author.
>
> # 🏷️ Title: Goodbye WordPress
>
<!-- deep-read:sections start -->
## 🧭 Table of contents
- [📝 Summary](#-summary)
- [📖 Main content](#-main-content)
- [🗒️ Notes](#️-notes)
- [📚 References](#-references)
- [🗣️ Paraphrase](#️-paraphrase)
- [📰 Newsletter](#-newsletter)
- [✅ Action items](#-action-items)
- [🧪 Hypotheses](#-hypotheses)
- [📊 Methodology](#-methodology)
- [❓ Questions](#-questions)
- [🔮 Future research](#-future-research)
- [💡 Implications](#-implications)
- [🧠 Learning styles assessment](#-learning-styles-assessment)
- [📊 Accessibility assessment](#-accessibility-assessment)
- [🌍 DEIB assessment](#-deib-assessment)
- [✅ Logical validity](#-logical-validity)
- [🛡️ DARVO analysis](#️-darvo-analysis)
- [🎯 Conclusion](#-conclusion)
- [🔄 Refactor appendix](#-refactor-appendix--goodbye-wordpress)
## 📝 Summary
- **What happened.** Nolan Lawson published "Goodbye WordPress" on nolanlawson.com on 2026-09-30. The first line says the blog "has moved from WordPress.com to self-hosting" (¶0), and the closing line says goodbye to WordPress (¶20). The captured text carries no byline. The author is recorded as Nolan Lawson because the domain and the first-person text point to that name, so the byline is inferred.
- **The claim.** The author gives three reasons for leaving after 15 years on WordPress (¶1): "recent drama" that eroded confidence in WordPress as a long-term bet (¶2), the editor drifting away from plaintext Markdown toward Gutenberg, which the author never enjoyed (¶3), and a $110 per year charge for something that "could be hosted for free on Cloudflare with a static site generator" (¶4). A fourth, broader argument in ¶13 says coding agents make self-hosting easy enough that WordPress incumbents "should" be nervous.
- **Why it matters.** It's a first-person exit account from a long-time WordPress.com user who is also a developer, with a specific stack, specific losses (comments, followers, theme) and specific gains (cost, performance, accessibility fixes). The reasons split cleanly into technical, cost, and confidence-in-governance categories, which maps to work different WordPress teams own.
- **Key stakeholders.** The author. Readers who follow via WordPress.com (the author says there are "a few hundred followers there," ¶7). WordPress.com, WordPress.org core, the Gutenberg editor team, the plugin ecosystem, and anyone assessing why individual bloggers leave.
- **Risks and tradeoffs.** This is a personal blog post, not research. One blog and one author sample nothing. The WordPress-related claims (drama, CVEs, plugin marketplace risk, Markdown export limits, WordPress adopting LLM code) are the author's claims and weren't checked here; the text links sources for some of them (see References). The author reports losing comments, pingbacks, WordPress followers, and a 15-year-old theme (¶6 to ¶8), and reports that the migration needed a custom script, Markdown conversion fixes, and feed setup work (¶14). Hosting is described as self-hosted; the captured text doesn't name the host or the new running cost.
- **Bottom line.** The post gives a concrete, replicable migration path (WordPress export, Astro rebuild by an AI agent, REST API script for Markdown, matched RSS/Atom feeds) and a candid list of what was lost. The part most relevant to WordPress teams is the stated reasons, which are mostly about confidence, editor direction, and cost rather than missing features. The "WordPress should be nervous" conclusion is opinion built on one case.
## 📖 Main content
**The announcement and the reader instruction.** ¶0 tells followers on WordPress that the blog now lives at a self-hosted address and that they should point an RSS reader at nolanlawson.com/feed. That one instruction is how the author handles the audience move. The text doesn't describe 301 redirects at the HTTP level; it does mention "a small legacy URL redirect" in JavaScript (¶10) and RSS/Atom feeds set up "so that feed readers wouldn't notice a difference" (¶14).
**Reasons for leaving, as stated.** Three are listed in ¶1 to ¶4. They differ in kind:
- *Confidence in governance or direction.* ¶2 cites "recent drama" and an "eroded" confidence in WordPress as a long-term bet. The text doesn't say which events, which people, or which decisions. The drama is the author's characterization and is left undefined.
- *Editor and technical experience.* ¶3 says the interface "keeps nudging" the author away from the old plaintext Markdown editor, which "remains excellent," and that Gutenberg's click-and-drag experience was slow and clunky. This is a usability and workflow reason, stated as personal experience.
- *Cost.* ¶4 says WordPress charges $110 per year for something that could be hosted for free on Cloudflare with a static site generator. The $110 is the author's figure; the plan name and what it covers aren't given.
- A later technical and security argument (¶13) says an "aging blogging technology" still deals with "critical CVEs in its templating engine" and has a "wild-and-woolly plugin marketplace." Both phrases carry links (see References). The author presents this as a reason incumbents face pressure, not as the direct cause of this move.
**What the author gave up.** ¶6 comments and pingbacks (low value to the author, who runs a Mastodon instance and links to threads there or on Lobsters and Hacker News; spam was "a constant battle," with bots made more convincing by LLMs). ¶7 WordPress followers (a few hundred; the author hopes some readers move to plain RSS and "avoid tying themselves to one vendor"). ¶8 the "Spring Loaded" theme from the early 2010s, which needed recurring CSS tweaks for font size, layout, and accessibility.
**What the author gained.** Lower cost, a modernized style, a dark theme, and what ¶9 calls a "radical (near-)zero-JS and zero-tracking vision." ¶10 lists the exceptions: JavaScript runs only the dark mode switcher, a small legacy URL redirect, search through astro-pagefind, and lite-youtube-embed for YouTube. Images are lazy-loaded except early ones, the font is the system font, old tweets are pre-rendered, and speculation rules speed navigation. ¶11 explains dropping analytics: blockers distort the data, tighter referrer policies made it less useful, and watching spikes is bad for the author's anxiety. ¶12 describes the design (larger fonts, no gradients, drop-shadows, or tag cloud) and accessibility fixes: consistent heading levels, a skip link, and fixes after an Axe audit.
**How it was done.** ¶13: Claude did most of the work from a prompt along the lines of "Here's a WordPress export, rebuild it in Astro, go nuts." ¶14: WordPress exports HTML, not the author's Markdown, so a small script pulled the Markdown from the WordPress API. Astro and WordPress convert Markdown to HTML slightly differently, which needed fixes. RSS and Atom feeds were rebuilt to match. ¶15: the agent also found broken links, missed spam comments, and OpenGraph image problems. ¶16: Astro enabled proper ES6 syntax highlighting, with a custom Shiki theme. Claude artifacts were used to compare designs.
**The stance on LLMs.** ¶18 keeps a personal rule against LLMs touching prose, while letting agents build the design. ¶19 argues that avoiding LLM output entirely is no longer possible because WordPress, social platforms, browsers, and operating systems all ingest it, and credits Claude with details such as listening for localStorage events in the theme picker, forced-colors handling, and RSS formatting.
**Uncertainties.** The reasons are stated, not evidenced. "Drama" is undefined. Cost savings aren't computed against the new setup. No performance numbers appear for before or after. No mention of other bloggers leaving WordPress appears in the text.
## 🗒️ Notes
#### 📄 ¶0 Where the blog went
- The blog moved from WordPress.com to self-hosting.
- WordPress followers are told to use an RSS reader at nolanlawson.com/feed.
#### 📄 ¶1-¶4 Reasons for leaving
- 15 years on WordPress. The author says it's "time to move on."
- Reason one (¶2): recent drama left a bad taste and eroded confidence in WordPress as a long-term bet. No specifics given.
- Reason two (¶3): the interface nudges away from the plaintext Markdown editor, and Gutenberg felt slow and clunky.
- Reason three (¶4): $110 per year versus free static hosting on Cloudflare.
#### 📄 ¶5-¶8 What the move costs
- Comments and pingbacks: never felt valuable. Mastodon, Lobsters, and Hacker News threads replace them. Spam from LLM-made bots was a constant fight.
- WordPress followers: a few hundred. The author counts a switch to pure RSS as a win.
- The "Spring Loaded" theme: nostalgia, and recurring CSS upkeep for font size, layout, and accessibility.
#### 📄 ¶9-¶12 What the move gains
- Saved money, a refreshed style, a dark theme, and a near-zero-JS, zero-tracking site.
- JavaScript only for dark mode, a legacy redirect, astro-pagefind search, and lite-youtube-embed. System font, lazy-loaded images, pre-rendered tweets, speculation rules.
- Analytics dropped on purpose: blockers, referrer policy, and mental health.
- Design: larger fonts, no gradients or drop-shadows, no tag cloud. Consistent headings, a skip link, and Axe-audit fixes.
#### 📄 ¶13 The tooling bet and the parting shot
- Claude did most of the rebuild from a one-line prompt: WordPress export to Astro.
- The author argues easy self-hosting should make WordPress "incumbents" nervous, citing critical CVEs in the templating engine and the plugin marketplace.
- Closing line of the paragraph: "I wish them the best of luck, but I'm stepping off the train."
#### 📄 ¶14-¶15 Migration problems and what the agent found
- No Markdown export from WordPress. A small script pulled Markdown through the WordPress API.
- Markdown-to-HTML differences between Astro and WordPress needed fixes.
- RSS and Atom feeds rebuilt so feed readers see no difference, with a note about blogs that dump old posts into feeds after a migration.
- The agent found broken links, missed spam comments, and OpenGraph image issues. The author cleaned up minor styling and links and left old posts largely alone.
#### 📄 ¶16-¶17 Syntax highlighting
- Astro enabled proper ES6 highlighting, which the old theme lacked.
- A custom Shiki theme matches the page style. Claude artifacts let the agent pitch several designs.
- ¶17 is a sample JavaScript code block showing the colors (a class named Yolo). It carries no argument.
#### 📄 ¶18-¶19 The LLM-built design question
- The project was a long-held idea made possible by coding agents.
- Rule: no LLMs touching prose. Design is "just meh" to the author, who often uses Firefox Reader Mode on other blogs.
- Argument from inevitability: WordPress, social platforms, browsers, and operating systems all use LLM output now.
- Claude is credited with minor accessibility and compatibility details (localStorage events, forced-colors, RSS formatting).
#### 📄 ¶20 Sign-off
- "Goodbye, WordPress," with thanks for 15 years of hosting. The author notes some content may still be moving.
## 📚 References
The link list from the captured markup has 18 entries; I read it before writing this section. The linked pages weren't opened for this analysis, so descriptions come from the anchor text and the sentence around it. The two image links have empty anchor text.
- [nolanlawson.com/feed](https://nolanlawson.com/feed/): the RSS feed readers are told to use (¶0).
- ["Spring Loaded" theme](https://managewp.com/wordpress-spring-themes/#:~:text=Spring%20Loaded): the early-2010s theme the author used (¶8).
- [Image: compare.png](https://nolanlawson.com/wp-content/uploads/2026/09/compare.png) and [image: sidebyside-optimized.png](https://nolanlawson.com/wp-content/uploads/2026/09/sidebyside-optimized.png): two images uploaded to the old WordPress media path. Their placement and alt text aren't in the captured text. Likely old versus new comparisons, but that's inferred from the file names.
- [astro-pagefind](https://github.com/shishkin/astro-pagefind): the search integration (¶10).
- [lite-youtube-embed](https://github.com/paulirish/lite-youtube-embed): the YouTube embed (¶10).
- [Speculation rules](https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API): the navigation speed-up (¶10).
- [Referrer policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy): background for the analytics argument (¶11).
- [Axe](https://github.com/dequelabs/axe-core): the accessibility audit tool (¶12).
- [Critical CVEs](https://thehackernews.com/2026/09/wordpress-issues-patch-for-critical.html): the linked source for the "critical CVEs in its templating engine" claim (¶13). The page is the primary source for checking what was patched and in which component.
- [Wild-and-woolly plugin marketplace](https://patchstack.com/whitepaper/state-of-wordpress-security-in-2025/): the linked source for the plugin marketplace claim (¶13). Patchstack sells WordPress security products, so read it as an interested party's report.
- [Doesn't export my Markdown files, only HTML](https://shkspr.mobi/blog/2024/08/liberate-your-markdown-posts-from-jetpack-in-wordpress/): a 2024 post linked for the Markdown export limit (¶14).
- [You can just choose how many bugs you want now](https://nolanlawson.com/2026/08/16/you-can-just-choose-how-many-bugs-you-want-now/): the author's earlier post on agents and bugs (¶15).
- [Shiki theme](https://shiki.style/): the syntax highlighter (¶16).
- [Claude artifacts](https://claude.com/features/artifacts): the design-comparison feature (¶16). Anthropic is the vendor; the author states no commercial relationship in the text.
- [LLMs touching my prose](https://nolanlawson.com/2026/08/31/on-not-becoming-a-cyborg/): the author's own post on the prose rule (¶18).
- [Firefox Reader Mode](https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages): the Mozilla help page (¶18).
- [forced-colors](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/forced-colors): the media feature behind high-contrast handling (¶19).
- Claims with no link in the captured markup: the "recent drama" (¶2), the Gutenberg experience (¶3), the $110 per year charge (¶4), the few hundred WordPress followers (¶7), and WordPress "eagerly gobbling up LLM code" (¶19).
**Would need verification (author's claims about WordPress.com, WordPress.org, Automattic, or the WordPress project; no network was used here):**
- Which events "the recent drama" refers to, and whether they involve WordPress.com, WordPress.org, Automattic, or the project (¶2).
- The $110 per year figure and the WordPress.com plan it corresponds to (¶4).
- That WordPress.com's follower system is "quasi-RSS" (¶7).
- That the WordPress editor interface "keeps nudging" users away from a plaintext Markdown editor, and whether that describes WordPress.com, self-hosted WordPress, or both (¶3).
- The "critical CVEs in its templating engine" claim: which CVE, which component, which release fixed it, and what was exploitable (¶13, linked).
- The plugin marketplace characterization against the Patchstack report (¶13, linked).
- That WordPress "doesn't export" Markdown and that an API script was needed (¶14, linked to a 2024 Jetpack-related post).
- That WordPress itself is "eagerly gobbling up LLM code" (¶19).
## 🗣️ Paraphrase
After 15 years the author moved the blog off WordPress.com to a self-hosted Astro site and told followers to use the RSS feed. The stated reasons are doubts about WordPress after "recent drama," dislike of Gutenberg compared with the old Markdown editor, and a $110 yearly bill. The author lost comments, WordPress followers, and an old theme, and gained a faster, tracker-free, more accessible site with a dark theme. Claude did most of the rebuild from a WordPress export. A custom script pulled Markdown through the API, feeds were matched to the old ones, and the agent found broken links and image problems. The author keeps a rule against LLMs writing prose, accepts LLM-built design, and closes with thanks to WordPress.
## 📰 Newsletter
One long-time blogger's exit from WordPress.com made the rounds on 2026-09-30, and it's worth reading for the details rather than the headline. Nolan Lawson moved a 15-year-old blog to a static Astro site, kept the RSS feed stable, dropped analytics, and fixed heading levels and added a skip link along the way. The reasons given are plain: confidence, the editor, and a $110 per year bill. The loss list is plain too: comments, followers, a retro theme. Read the original at https://nolanlawson.com/2026/09/30/goodbye-wordpress/. If you work on WordPress, the useful questions are in the migration notes: what a Markdown export should look like, and what a departing user can take with them. The author's WordPress claims are the author's. Check the linked sources before you repeat them.
## ✅ Action items
#### DevRel
- Developer advocacy: write a "leaving WordPress without losing readers" checklist from the ¶14 migration issues (Markdown export, Markdown-to-HTML differences, feed parity). It helps both people who stay and people who go.
- Education: run an office-hours session on exporting WordPress content to a static generator, using the ¶13 prompt and the ¶14 script approach as the worked example.
- Developer experience: note that the author wrote a script to pull Markdown from the REST API (¶14). Document the endpoint and fields a user would need, and test whether the content is recoverable as authored.
- Developer marketing: don't cite this post as evidence of broad churn. It is one author's account (¶1 to ¶4) with no usage numbers.
- Community management: when sharing the link, label it as a personal opinion piece and keep replies to the stated facts. The tone is thankful (¶20), and replies can match it.
- Internal/external/cross-project: collect public accounts of why users leave, including this one, and track the stated reasons by category (governance confidence, editor, cost, security).
#### OSPO
- Policy and governance: ¶2 names "drama" as a reason without specifics. If you own a project, record what a maintainer would need to publish so outsiders can tell a governance dispute from a settled decision.
- License compliance: none from this source. The post names no licenses for Astro, Shiki, astro-pagefind, or lite-youtube-embed, though it links each.
- Security management: the ¶13 CVE and plugin marketplace claims link to The Hacker News and Patchstack. Read both and check the claims against official advisories before relying on them.
- Software inventory: the author's JavaScript list in ¶10 is a short, auditable dependency inventory. Compare it to a typical WordPress site's plugin and theme inventory.
- Developer support: a user whose migration depended on an agent (¶13) needs a clear export path. Check whether support channels can explain one.
- Community engagement: none directly.
- Strategic alignment: add "reasons users leave" to an annual roadmap input list and use ¶2 to ¶4 as three example entries.
#### Community
- Maintainers: the ¶3 editor complaint and the ¶2 confidence complaint are separable. A maintainer roadmap clinic can address them separately.
- Contributors: a first-issue candidate is verifying the ¶14 claim that WordPress doesn't export Markdown, and filing the exact gap if it holds.
- Sponsors: none from this source.
- Ecosystem: a cross-project drill: take one WordPress export, rebuild it in Astro, and record the differences. The author reports Markdown conversion differences and feed work (¶14).
#### WordPress
- Core: ¶3 and ¶14 both involve content portability. Triage whether Markdown-as-authored can be preserved on export, and whether the REST API returns it. No claim here that the gap exists beyond the author's report.
- Core Performance: ¶10 describes a near-zero-JS site, with lazy loading, system fonts, and speculation rules. Use it as a reference point for a lightweight front end. The post gives no before and after numbers.
- Core AI: ¶13 and ¶19 describe an agent rebuilding a site from an export, and the author's view that WordPress is itself absorbing LLM code. Decide what guidance the project can give on agent-driven exports and migrations.
- **Core Program Team:** note the ¶2 "drama" comment for the next retrospective and decide whether a plain-language summary of recent events would help outsiders. The text defines nothing.
- Mobile: none.
- Playground: build a Playground blueprint that loads a sample export so people can test migration scripts without a live site.
- Community: none directly. The author posts to Mastodon, Lobsters, and Hacker News instead of using comments (¶6); local meetups could ask whether that's common.
- Training: add a lesson on moving content out of WordPress, with the ¶14 issues as the content: export format, Markdown conversion, feeds.
- Marketing: don't answer ¶13 with a counter-claim. The post is thankful in tone (¶20). A short, factual response on what has changed in the editor and export would serve readers better than a rebuttal.
- Support: be ready for questions that follow the ¶0 pattern, from WordPress.com followers about feeds. Prepare a short answer on how to follow a site by RSS after it leaves.
- Design: ¶3 describes the Gutenberg drag-and-drop experience as slow and clunky and the author's misclick frustration. Add a UX research item on drag interactions and undo.
- Documentation: publish a plain guide to exporting posts and getting Markdown out, since ¶14 says the export is HTML only and the author needed a workaround.
- Photos: none.
- TV: none.
- Polyglots: none from this source.
- Accessibility: ¶8 and ¶12 report ongoing accessibility fixes (font size, heading levels, skip link, Axe audit). Check whether the retired theme shipped those gaps, and whether current default themes pass an Axe run.
- Meta: ¶7 mentions WordPress followers as a "quasi-RSS system." Check how follows are documented and what a site owner can tell followers when leaving.
- CLI: a WP-CLI command that exports posts as Markdown would remove the ¶14 workaround. Check what exists and what's missing.
- Hosting: ¶4 sets $110 per year against free static hosting. Hosts can publish what the plans include, so comparisons rest on the same facts.
- Tide: none.
- Openverse: none.
- Themes: ¶8 reports 15 years of CSS tweaks to one theme for font size, layout, and accessibility. Theme review can ask whether defaults cover those points.
- Plugins: ¶13 calls the plugin marketplace "wild-and-woolly" and links the Patchstack report. Read it and check whether the plugin review team's current process addresses its findings.
#### The WPOCC
- Programs: none directly.
- Projects: a documentation sprint on exporting and portability, using the ¶14 issues as the backlog.
- Funding experiments: fund a small, verifiable "export to Markdown" tool or test suite and publish the results. The need comes from one report; confirm demand first.
### FAIR
- Technical independence: ¶7 hopes readers will "avoid tying themselves to one vendor." Portability of content and subscriptions is a FAIR-aligned concern. Check what the project could offer to keep follows and feeds working when a site moves.
- Policies and covenants: none from this source. The post doesn't discuss package distribution.
- Productized governance artifacts: a scorecard row for "can a user take their content and subscribers with them" comes straight from ¶0, ¶7, and ¶14.
## 🧪 Hypotheses
1. A WordPress.com user who exports and rebuilds a Markdown-authored blog in a static generator hits the same two problems the author reports: no Markdown in the export, and Markdown-to-HTML differences (¶14).
2. A feed built to match the old one's structure and identifiers keeps feed readers from re-flooding old posts after a migration (¶14).
3. A site with JavaScript limited to the items in ¶10 loads faster than the retired WordPress theme on the same content and the same host.
4. Users who cite governance or "drama" as a reason for leaving (¶2) would stay at a higher rate if the events were explained in plain language, compared with users who cite cost (¶4).
5. The $110 per year cost gap in ¶4 shrinks or disappears for a comparable static setup once domain, search, and maintenance time are counted.
6. An AI-agent rebuild finds link, spam, and OpenGraph problems (¶15) in most long-running WordPress blogs of similar age.
## 📊 Methodology
- **H1.** Take five WordPress.com and five self-hosted blogs that author in Markdown. Export each, rebuild in a static generator, and log which content survives as Markdown and which HTML differences appear. Publish the logs and the scripts.
- **H2.** Run a feed validator and three common feed readers on the old and new feeds for ten migrated blogs. Count duplicate or re-posted items. Compare with a control group migrated without feed parity work.
- **H3.** Measure Largest Contentful Paint, total JavaScript bytes, and request counts for matched pages on the old and new sites with WebPageTest or Lighthouse. Use the same host and cache state where possible.
- **H4.** Survey people who left WordPress in the last year. Code stated reasons into governance confidence, editor, cost, security, and other. Run an experiment with two explanation formats for a governance event and measure change in stated intent to stay.
- **H5.** Build a cost table for 20 comparable blogs: WordPress.com plan, domain, hosting, search, backups, and time estimates for both setups. Report the median and range.
- **H6.** Run an agent audit on 20 blogs older than ten years and count broken links, missed spam, and OpenGraph problems per 100 posts. Verify each finding by hand.
- **Controls throughout.** Fix the content and host across arms, pre-register the metrics, and record who did the migration work, human or agent.
## ❓ Questions
- Which events does "the recent drama" (¶2) refer to, and does the author mean WordPress.com, WordPress.org, Automattic, or the wider project?
- What exactly does the $110 per year (¶4) cover, and what does the new setup cost in domain, hosting, and time?
- Is the Markdown export limit in ¶14 a WordPress.com limit, a self-hosted limit, or both?
- What did the author see in the editor that "nudges" away from the plaintext Markdown editor (¶3)? Is that a default or a plan feature?
- How many of the few hundred WordPress followers (¶7) moved to RSS?
- Which component had the "critical CVEs in its templating engine" (¶13), and what did it affect?
- What does the host cost, and which host runs the site? ¶4 and ¶11 mention Cloudflare as an option, and the text doesn't state the final choice.
- Does the author expect the 301 or JavaScript redirect in ¶10 to cover every old URL, and has it been tested?
## 🔮 Future research
- A public, categorized dataset of stated reasons for leaving WordPress, built from first-person posts, with each reason coded and linked.
- Content portability scoring across CMS platforms: export formats, Markdown preservation, feed and subscriber continuity.
- Agent-assisted migration studies that record what the agent got right, what it missed, and what humans fixed. ¶15 gives one example.
- The performance and accessibility difference between block themes and static sites for personal blogs, measured with the same content.
- Whether comments move to social platforms (¶6) and what happens to the conversation archive.
## 💡 Implications
- **Practice.** Portability is a product feature. The author's workaround (¶14) is a script, and a script is a barrier for non-developers.
- **Policy.** A governance dispute with no plain-language account (¶2) leaves outsiders to fill the gap with their own stories. The text offers no details, so there is nothing to respond to except the feeling.
- **Security.** ¶13 pairs CVEs and plugin risk with the argument for static sites. The sources are linked and checkable; they should be checked before the claim is repeated.
- **Education.** The post is a usable teaching example for static migration: export, convert, redirect, feed parity, audit.
- **Funding.** The cost argument in ¶4 is concrete. Funding or sponsorship models that rely on hosting revenue face the "free static site" comparison from developer users.
## 🧠 Learning styles assessment
- **Reading level estimate.** Flesch-Kincaid Grade Level of roughly grade 9 and Flesch Reading Ease near 60, estimated from the sentence length and vocabulary of the prose paragraphs; computed by eye, not by a tool. The text uses plain first-person prose with a few product terms (Astro, Shiki, Axe, speculation rules).
#### 👀 Visual learners
- Present: two uploaded images appear in the link list (compare.png and sidebyside-optimized.png), and ¶17 is a code sample showing the theme colors. Neither image is described in the captured text.
- Improve: caption the comparison images and state what changed between old and new. A before/after table of page weight would help.
#### 🔊 Aural learners
- Present: no audio version is referenced.
- Improve: a short audio summary of the migration steps.
#### 🗣️ Verbal learners
- Present: plain definitions through context, including a joke about a bad haircut (¶8) and "90's Flash splash screen" (¶18).
- Improve: define speculation rules, Shiki, and Axe on first use.
#### 🧩 Kinesthetic learners
- Present: the prompt wording is given (¶13), and a list of components in ¶10 lets readers try the same stack.
- Improve: publish the Markdown pull script from ¶14 and the feed configuration.
#### 🧠 Logical learners
- Present: reasons for leaving, losses, and gains are separated into lists (¶1 to ¶9), and the analytics decision lists three numbered reasons (¶11).
- Improve: a table of old versus new for cost, JavaScript, and accessibility.
#### 🧑🤝🧑 Social learners
- Present: the post names Mastodon, Lobsters, and Hacker News as the discussion spaces replacing comments (¶6).
- Improve: link directly to the discussion thread so readers can find the conversation.
#### 🧘♀️ Solitary learners
- Present: the author reflects on anxiety, ego, and indulgence (¶11, ¶16), which supports self-reflection.
- Improve: closing questions on what readers would keep or drop in their own blogs.
#### 🌿 Naturalistic learners
- Present: the "zero-JS" and system-font choices reduce page weight (¶9, ¶10), though the post doesn't frame them as an energy or sustainability gain.
- Improve: report page weight in kilobytes before and after and note the effect on data transfer.
## 📊 Accessibility assessment
#### Screen reader semantics
- Present: the captured text keeps paragraph order and meaningful link text (for example "Axe" and "Speculation rules" are short but sit in clear sentences). The author reports consistent heading levels and a skip link on the new site (¶12). Heading elements aren't visible in the capture, so structure can't be confirmed here.
- Improve: two links in the list have empty anchor text (the image links), which means the captured markup shows no alt text for them. WCAG 1.1.1 (Non-text Content) applies if they lack alt text. The ¶17 code block is flattened into plain lines in the capture; check that it renders as preformatted code (1.3.1).
#### Keyboard navigation
- Present: the author reports a "skip to main content" link (¶12) and a theme picker (¶19). Neither is testable from captured text.
- Improve: verify focus order and visible focus on the theme picker and search (2.1.1, 2.4.7).
#### Contrast and readability
- Present: unknowable from text. The author reports a dark theme, larger fonts, and no gradients or drop-shadows (¶9, ¶12), and handling for forced-colors (¶19).
- Improve: check 1.4.3 on both themes and the custom Shiki theme in ¶16, which is a common failure point for code colors.
#### Text resizing and reflow
- Present: the author reports larger fonts and system font use (¶10, ¶12). No layout is visible in the capture.
- Improve: test 200% zoom and 320 CSS pixel reflow on the code block (1.4.4, 1.4.10).
#### Media and captions
- The text mentions lite-youtube-embed for the odd YouTube video (¶10) and two images in the link list. The text doesn't mention captions or transcripts. Embedded videos need captions (1.2.2), and the images need alt text (1.1.1).
#### Forms and interactions
- Present: the theme picker (¶19) and search through astro-pagefind (¶10) are interactive controls. Comments are gone (¶6), so no comment form remains.
- Improve: label the search field and make the theme picker operable by keyboard and screen reader (4.1.2, 3.3.2).
#### Standards reference
- Candidate gaps against WCAG 2.2 AA, each unverified from this capture: **1.1.1** (alt text for the two images and any tweet screenshots), **1.2.2** (captions on embedded YouTube videos), **1.3.1** (code block semantics), **1.4.3** (code theme contrast), **2.4.7** (focus visible on the theme picker), **4.1.2** (names and roles on the search and picker). The author reports passing an Axe audit's fixes (¶12); Axe doesn't cover every criterion.
## 🌍 DEIB assessment
#### Cultural breadth
- Present: the post is English only and draws on a developer audience that uses Mastodon, Lobsters, and Hacker News (¶6).
- Improve: an RSS-first move helps readers with limited bandwidth, but the post gives no localization or translation notes.
#### Inclusive language
- Present: plain, first-person language. Idioms such as "bad haircut" (¶8), "stepping off the train" (¶13), and "wild-and-woolly" (¶13) carry metaphor.
- Improve: replace idioms with literal statements where precision matters, for example "stopped using WordPress" and "has many plugins of varying quality."
#### Neurodiversity support
- Present: short paragraphs, lists for reasons and losses, and a consistent order from reasons to losses to gains to method.
- Improve: add subheadings. The capture shows none, so the middle section moves between design, performance, and tooling without markers.
#### Representation
- Present: one author voice. No other people are named.
- Improve: the post represents a developer on a single blog. Other voices, including non-technical users who cannot write a migration script, are absent.
#### Psychological safety
- Present: the tone is thankful (¶20), and the author hopes WordPress well (¶13). The ¶2 "drama" comment names no people or groups, so it doesn't point at anyone.
- Improve: the vague "drama" language leaves readers to infer who it refers to. Naming the specific concern would reduce guesswork.
## ✅ Logical validity
Source type: personal blog post, first-person opinion and experience report. The author states no sponsor or commercial relationship in the captured text. The author does use and recommend a vendor tool (Claude, ¶13, ¶16, ¶19) and says it did most of the work.
#### Strong reasoning
- **First-hand account, ¶14 and ¶15.** The migration issues are specific and checkable: no Markdown export, Markdown conversion differences, feed matching, and findings from the agent. A reader can reproduce each.
- **Decision criteria for analytics, ¶11.** Three numbered reasons (blocker inaccuracy, tighter referrer policies, mental health) make the decision traceable.
- **Cost framing, ¶4.** A number is named ($110 per year) against a concrete alternative, which makes the claim testable.
- **Honest loss accounting, ¶5 to ¶8.** The author lists what is given up before listing gains, which makes the case more credible.
- **Linked sources, ¶13 and ¶14.** The CVE and plugin claims point to outside pages, which a reader can check.
#### Fallacies
- **Hasty generalization, ¶13.** "The fact that it's this easy to self-host should really make incumbents like WordPress nervous" rests on one personal blog with static content. Fix: scope the claim to a single-author blog and cite data on multi-author or commerce sites.
- **Scope mismatch, ¶4 and ¶13.** Comparing a hosted CMS bill to free static hosting leaves out features a CMS provides (editing UI, comments, multiple authors). The author's own use case doesn't need them. Fix: state the use case in the comparison.
- **Vague appeal, ¶2.** "Recent drama" is offered as a reason with no event named, so readers can't assess it. Fix: name the event or say the details are omitted on purpose.
- **Appeal to inevitability, ¶19.** "If you're touching a computer, you're interacting with LLM output these days" is used to dismiss concern about LLM-built code. The premise (WordPress "eagerly gobbling up LLM code") has no link in the capture. Fix: cite the WordPress claim and separate "can't avoid" from "doesn't matter."
- **Unsupported comparison, ¶13.** "Aging blogging technology" and the CVE claim set one vulnerability next to the static-site alternative without comparing patch speed or exposure. Fix: compare the same exposure on both sides, including the risks of agent-built code.
- **Self-assessed quality, ¶19.** "The agents do a better job than me" is an unmeasured opinion. Fix: show the audit results.
#### Tone of voice
- Warm, candid, and self-deprecating, with sharper edges in ¶13 and ¶18. Humor does much of the work ("like a bad haircut," ¶8; "insanity," ¶11). The closing line (¶20) is thankful. The author calls the claim about incumbents an opinion by framing it as "I'm not sure" and wishing them luck.
## 🛡️ DARVO analysis
Not applicable to this source. DARVO describes a response to an accusation, and this post is a personal migration account with no accuser or dispute. **Deny:** nothing is denied; the author names losses openly (¶5 to ¶8). **Attack:** no person is attacked. ¶13 criticizes WordPress as a technology ("aging," "wild-and-woolly") and then wishes it luck. ¶19 says WordPress is absorbing LLM code, which is a criticism of the platform and sits next to the same statement about social platforms, browsers, and operating systems. **Reverse victim/offender:** no such move appears. The "drama" in ¶2 is mentioned and not elaborated, so the text doesn't assign blame.
## 🎯 Conclusion
The post is a clear, first-person account of leaving WordPress.com for a self-hosted Astro site. The author gives three reasons: eroded confidence after "recent drama" (¶2), the move toward Gutenberg and away from a plaintext Markdown editor (¶3), and the $110 per year cost (¶4). The migration was done with Claude from a WordPress export, a Markdown pull script, matched feeds, and an accessibility audit (¶13 to ¶15). The losses are comments, WordPress followers, and a theme (¶6 to ¶8).
Most of the WordPress claims are the author's. The text links sources for the CVE, plugin marketplace, and Markdown export points, and has no link for the drama, the cost, or WordPress adopting LLM code. The post names no other "leaving WordPress" accounts.
**Next steps for readers:** if you work on WordPress, read the three linked sources (The Hacker News, Patchstack, and the shkspr.mobi post) before responding, and check what a WordPress.com or self-hosted user can actually export. If you're planning a similar move, copy the ¶14 checklist: Markdown, conversion differences, feed parity.
## 🔄 Refactor Appendix — Goodbye WordPress
> Density: 2–5 Literature atoms (H1 pad), 0–3 Permanent candidates (H4 pad).
> Emitted: 4 Literature, 1 Permanent. Resonance filter applied: the syntax highlighting and
> Shiki details were dropped as minor to the migration and governance thread.
>
> Konik claim-header rules: present tense, declarative, ≤10 words, searchable, unique.
>
> Atomicity: one declarative sentence per atom. "and"/"also" → split.
>
> Tag pool: #bmf · #addendum · #xref · #articleseed · #storystem · #share · #aphorisms
### 📚 Literature Split Pad
#### [H1] Confidence in WordPress eroded before features did
> [!quote] [¶2]
> The recent drama surrounding WordPress has left a bad taste in my mouth and eroded my confidence that it’s a good long-term bet.
**Context & use**:
- ¶2, the first of three stated reasons for leaving, ahead of the editor (¶3) and cost (¶4).
- The text names no event. Useful as a prompt: what would a project need to publish so a long-time user could judge the same events?
**Tags**: #xref #articleseed
<!-- atomicity: 1 idea ✓ -->
#### [H2] A one-line prompt drove the whole rebuild
> [!quote] [¶13]
> The prompt was basically “Here’s a WordPress export, rebuild it in Astro, go nuts.”
**Context & use**:
- ¶13, the method statement. The author says Claude did most of the work.
- The report doesn't give review effort or defects found after launch, only that the agent found other problems (¶15).
**Tags**: #xref #share
<!-- atomicity: 1 idea ✓ -->
#### [H3] The WordPress export loses authored Markdown
> [!quote] [¶14]
> WordPress doesn’t export my Markdown files, only HTML, so I had to write a small script to pull them from the WordPress API.
**Context & use**:
- ¶14, the concrete portability gap, linked to a 2024 post about Markdown and Jetpack.
- Verify against current WordPress.com and self-hosted behavior before treating it as general.
**Tags**: #xref #articleseed
<!-- atomicity: 1 idea ✓ -->
#### [H4] The author permits LLM design but not LLM prose
> [!quote] [¶18]
> I still have a personal prohibition against LLMs touching my prose, but the design, to me, is just meh.
**Context & use**:
- ¶18, the line between content and presentation. It links to the author's own post on the prose rule.
- A usable test for personal publishing: decide which layer carries your voice and protect only that one.
**Tags**: #xref #aphorisms
<!-- atomicity: 1 idea ✓ -->
### 🧠 Atomic Split Pad
#### [P1] Portability decides who leaves quietly
**Claim** (one sentence, Courtney's voice): A platform keeps trust when a departing user can take their content, feed, and followers with them without writing custom scripts.
**Evidence pointer**: [[#H3]] · [[#H1]]
**Scope & conditions**: Holds for authors with a stable audience and content in a format they chose. Breaks when the exit cost is already low, as in a static blog with a small audience, or when the departing user wants features the platform can't offer anyway. The source gives one author's experience, so the claim needs more cases.
**Links**:
- [[Content portability]] — because extends
- [[WordPress export formats]] — because applies-in WordPress.com and self-hosted sites
- [[Governance communication]] — because contrasts on whether confidence or tooling drives the exit
<!-- atomicity: 1 idea ✓ -->
### ✏️ Fleeting Queue
- [F1] Verify the Markdown export gap against current WordPress.com and self-hosted export tools: https://shkspr.mobi/blog/2024/08/liberate-your-markdown-posts-from-jetpack-in-wordpress/ #fleeting #inbox
- [F2] Read the Hacker News CVE report and note the component and fix version: https://thehackernews.com/2026/09/wordpress-issues-patch-for-critical.html #fleeting #inbox
- [F3] Open question: which "recent drama" does ¶2 mean, and who says so? #fleeting #inbox
- [F4] Article seed: "A leaving-WordPress checklist for Markdown authors" built from ¶14 #fleeting #inbox #articleseed
- [F5] Check the Patchstack whitepaper claims on plugin risk before reuse: https://patchstack.com/whitepaper/state-of-wordpress-security-in-2025/ #fleeting #inbox
### → Things 3 (max 2 actions)
- [ ] Read the Hacker News CVE page and the Patchstack whitepaper and note what each supports, WordPress security claims #things
- [ ] Test a WordPress export to Markdown on a sample site and log the gaps against the ¶14 report, WordPress portability #things
<!-- deep-read:sections end -->
📄 **Full text:** [[Full Document Contents/Articles/Goodbye WordPress.md|Goodbye WordPress by Nolan Lawson]]
## Highlights
- - The recent drama surrounding WordPress has left a bad taste in my mouth and eroded my confidence that it’s a good long-term bet. ([View Highlight](https://read.readwise.io/read/01m3vx45ys58vfzfs1sd75jb94))
- Note: [H1] Confidence in WordPress eroded before features did
- Tags: atom/literature/h1
- Of course, because it’s 2026 and I’m incredibly lazy (my blog wouldn’t have kept a 15-year-old theme if I wasn’t), I used Claude to do most of the work. The prompt was basically “Here’s a WordPress export, rebuild it in Astro, go nuts.” The fact that it’s this easy to self-host should really make incumbents like WordPress nervous – I’m not sure how an aging blogging technology that still has to deal with critical CVEs in its templating engine (not to mention a wild-and-woolly plugin marketplace) can compete with a static site whipped up by agents. I wish them the best of luck, but I’m stepping off the train. ([View Highlight](https://read.readwise.io/read/01m3vx499ynh7htaknnrm4nc4d))
- Note: [H2] A one-line prompt drove the whole rebuild
- Tags: atom/literature/h2
- To be sure, there were issues: WordPress doesn’t export my Markdown files, only HTML, so I had to write a small script to pull them from the WordPress API. I also needed to fix some tiny differences in how Astro converts Markdown to HTML versus WordPress, and I had to set up the RSS/Atom feeds so that feed readers wouldn’t notice a difference. (How many times have I seen someone’s blog suddenly dump all their posts into my feed when they migrated from one system to another?) ([View Highlight](https://read.readwise.io/read/01m3vx4cqce4swa0rt5ve7h1g5))
- Note: [H3] The WordPress export loses authored Markdown
- Tags: atom/literature/h3
- Overall, this is basically a project that I had in the back of my mind for years, and which I could finally justify thanks to coding agents. I admit that it gave me some pause to imagine that the design for my website, my entire presence on the web, would now be LLM garbage, but I realized that I just didn’t care. Similar to how, 15 years ago, I grabbed a random WordPress theme and ran with it, I don’t see much harm in having the agents give me the window dressing while I write the content. I still have a personal prohibition against LLMs touching my prose, but the design, to me, is just meh. On many blogs I read I just immediately turn on Firefox Reader Mode anyway, so honestly a lot of people’s designs are just the equivalent of a 90’s Flash splash screen to me. ([View Highlight](https://read.readwise.io/read/01m3vx4f0zfbxyxvej8ay0xjr5))
- Note: [H4] The author permits LLM design but not LLM prose
- Tags: atom/literature/h3