Stats

Everything here is counted at build time from the entries themselves, so it goes stale only when the site is rebuilt. Word counts strip markup and count whitespace-separated tokens, which is close enough for a sense of scale and not precise enough to be worth arguing about.

1.0At a glance

Whole corpus
Entries 101
Words 89,768
Topics 31
Median length 675 words
Range 58–4,117 words
Span 21 Mar 2013 to 8 Aug 2026

2.0By year

Entries & words
Year Entries WordsBy month scaled within year Volume across years
2013 3 896 2013: words per month, scaled to this year. Busiest Jun with 536 words. 3 of 12 months active.
2014 2 1,563 2014: words per month, scaled to this year. Busiest Jun with 1125 words. 2 of 12 months active.
2015 1 151 2015: words per month, scaled to this year. Busiest Jan with 151 words. 1 of 12 months active.
2017 6 3,453 2017: words per month, scaled to this year. Busiest Oct with 1411 words. 4 of 12 months active.
2018 7 4,866 2018: words per month, scaled to this year. Busiest Jan with 1753 words. 4 of 12 months active.
2019 5 4,314 2019: words per month, scaled to this year. Busiest Nov with 3170 words. 3 of 12 months active.
2020 5 4,738 2020: words per month, scaled to this year. Busiest Dec with 2442 words. 4 of 12 months active.
2021 4 2,299 2021: words per month, scaled to this year. Busiest Aug with 1587 words. 2 of 12 months active.
2025 32 19,664 2025: words per month, scaled to this year. Busiest Sep with 6126 words. 7 of 12 months active.
2026 36 47,824 2026: words per month, scaled to this year. Busiest Apr with 11352 words. 7 of 12 months active.

3.0Map of the corpus

101 entries · 70 links

Every entry placed by what it is about, not by tag or date. Two entries sit close together when the language model that powers the site's semantic search puts their text in a similar place; a line is drawn where a pair is genuinely close. Hover a point for its title, or click through.

Cutting down on Postfix spam relaying — cloud infrastructureMuliple IPs on an Ubuntu EC2 VPC? Yes, please! — cloud infrastructureA model for better content, better readers, better journalism — content strategyUX success story: Doubling conversion rates, sales — UX designHow to install Lyra the graphical visualization environment — data visualizationBetter corporate design through information architecture — information architectureA new site for little reason — career reflectionFluid IA to enable user discovery, prepare for change — information architectureFive highlights from EuroIA 2017 — information architecture8 Video conferencing tips, dos, don’ts — productivityComparing IBM Plex and Fira Sans — typographyThe Content-Action Model origin story — content strategyIntroducing the Content-Action Model for Web Systems — content strategyUX, discovery, analysis + the CAM — content strategyMigrating to Zurb Panini 2.0 — static sitesWhat if: A web font for data — typographyInside the Content-Action Model — content strategyFaster scientific websites through reusability — design systemsEMBL-EBI Day: Visual Framework 2.0 outreach — Visual FrameworkIntegrating Eleventy with gulp, upstream JS — EleventyFractal and Eleventy: Getting static sites closer to the design system — EleventyBuilding your first page with the Visual Framework 2.0 — Visual FrameworkPublishing since the 2000s — career reflectionMoving from Panini to Eleventy — EleventyLerna monorepos with fewer tags — developer toolsUsing Nunjucks templates with React — JavaScriptEMBL.org: Empowering users to navigate a large scientific organization — information architectureEnabling a more dynamic EMBL online — design systemsSomething new for 2022 — career reflectionIt’s been 3.5 years — career reflectionDrupal delayed by Azure MySQL — DrupalMaking PDFs more viewable — PDFA simpler, faster site: moving to pure Eleventy v3 — EleventyRecursion: it’s fonts all the way down — typographyGo-go-go … I missed EmbedPDF — PDFExposing HTML: The No-JS nudist CSS toggle — CSSPredictable, token-based filenames with Eleventy Image — EleventySacrificing knowledge in the name of data — AIIndividualism is the flavor AI chatbots can't stomach — AIA stop-gap Drupal module to kill Word Junk in CKEditor 5 — DrupalThoughtful AI integration beats bolted-on Clippy — AIThe power of the pause: How planning beats prompt tuning — AIEmbracing px and rem for CSS — CSSDevelopers are becoming context technical writers for AI — AIContext engineering beats prompt tricks for AI agents — context engineeringIt's true, short disruptions costs lots of time — productivityOutput: An HTML-native tag once again saves JS befuddling — web developmentIntroducing a "Work" section — career reflectionPlenty to learn from Fedora's approach to AI code — AIWhy AI can't be debugged like traditional software — AIMaking sense of Microsoft’s many AI Copilots — AIMeasuring success beyond the page view — analyticsLarge projects need large communicating — project managementDigest videos into sketchnotes through AI — AIURLs are the state management you should use — web developmentHow to measure impact when analytics lie — analyticsVR Productivity finally almost surpasses physical displays — productivityDigital transformation for complex organizations (Parts 1-2) — digital transformationThe practitioner's guide to planning digital transformation (Parts 3-4) — digital transformationYour browser utility wants to be a floating palette — retro computingPDF-A-go-slim: a browser-based PDF optimizer — PDFFeedback buttons without JavaScript, using a 1990s web pattern — web developmentTwo-way communication beats another shipped feature — project managementCollaborate on any webpage with a bookmarklet and URL state — web developmentSite search without a search service — searchSemantic search on a static site, no API keys required — searchBlog art that belongs — AIAI coding tools turned my once-a-year hobby project into a daily habit — AI11ty is dead, long live Build Awesome — EleventyContent architecture: the delivery problem — content architectureComprehension debt, when AI-generated code outpaces human understanding — AIThe ladder was always context — software engineeringWhy context engineering was always the job — context engineeringGo schema-first and skeleton loading stops being a problem — content architectureFour gears of AI-assisted development: from coding to context — AIThe right answer has to be woven — context engineeringEmDash won't beat WordPress. Drupal just needs to wait — DrupalHow to write one skill for both Claude Code and GitHub Copilot CLI — AILet AI worry about the code, you worry about the work — AIWhy 'reviewed' should be a protected verb — AIStop converting SVG text to outlines — typographyEye-tracking heatmaps in your browser, no lab needed — open sourceMy daily routine assumes the internet survives the disaster — digital transformationBuilding a virtual garage for hobby projects — cloud infrastructureA data font, from the inside out — typographyCADI: a prescriptive path for slop-free AI in content work — AI13 words to turn a rumor into AI fact — AIField notes on Mac OS 9.2, New World ROMs, and Apple Silicon — retro computingA fresh coat of paint and making information actionable for 24 years — career reflectionImproving AI chatbots with an editorial handbook from your best content — AICreating warm, dappled light with CSS and SVG — CSSScaling Drupal e-commerce for 150,000 satellite-connected customers — DrupalBuilding a component library adopted across 50+ scientific properties — Visual FrameworkUntangling an 80-link footer into scannable navigation — information architectureDecoupling content from platforms across 80 properties — content architectureReclaiming three weeks of editorial time every month — editorial workflowTurning vague content guidelines into measurable AI-ready standards — content strategyMaking disaster economics compelling for global policymakers — data visualizationRecovering platform performance after a cloud migration failure — DrupalDesigning analytics infrastructure that measures audience quality, not just traffic — analyticsPutting GA4 where the work happens: an in-browser analytics overlay and its MCP bridge — analytics
The axes mean nothing. Only relative distance does, and only roughly.
The strongest pairs, as text
  1. The Content-Action Model origin story 0.9 Introducing the Content-Action Model for Web Systems
  2. How to measure impact when analytics lie 0.9 Designing analytics infrastructure that measures audience quality, not just traffic
  3. Measuring success beyond the page view 0.89 How to measure impact when analytics lie
  4. EMBL.org: Empowering users to navigate a large scientific organization 0.85 Untangling an 80-link footer into scannable navigation
  5. Digital transformation for complex organizations (Parts 1-2) 0.85 The practitioner's guide to planning digital transformation (Parts 3-4)
  6. Introducing the Content-Action Model for Web Systems 0.84 UX, discovery, analysis + the CAM
  7. What if: A web font for data 0.83 A data font, from the inside out
  8. Measuring success beyond the page view 0.83 Designing analytics infrastructure that measures audience quality, not just traffic
  9. Making PDFs more viewable 0.82 Go-go-go … I missed EmbedPDF
  10. Introducing the Content-Action Model for Web Systems 0.81 Inside the Content-Action Model
  11. Why context engineering was always the job 0.81 The right answer has to be woven
  12. Thoughtful AI integration beats bolted-on Clippy 0.8 Improving AI chatbots with an editorial handbook from your best content

4.0Method

How these are counted
  • Entries are everything in the writing register: blog posts, digesting notes and project notes. Pages like this one are not counted.
  • Word counts strip HTML and count whitespace-separated tokens. Code blocks are included, so technical posts read longer than their prose alone.
  • Length uses the median rather than the mean, and the range names the shortest and longest entries rather than a standard deviation, which would imply a normal distribution the corpus does not have.
  • The two marks in the year table use different scales on purpose. The monthly sparkline is scaled to its own year's busiest month, so it shows the shape of that year: which months were active and how the writing clustered. The bar beside it is scaled across every year, so it shows how the years compare. A tall sparkline in a quiet year does not mean a busy year; the bar is the one to read for that.
  • Every number is printed beside its mark, and each sparkline states its own busiest month and active-month count on hover and to assistive tech. See the colophon for how the related-entry suggestions are derived.