Harry Roberts
banner
csswizardry.com
Harry Roberts
@csswizardry.com
🚀 Independent Web Performance Consultant • Speaker • Google Developer Expert, Web Performance • Accepting new clients • https://harry.is/for-hire
Pinned
🧑‍💻 I wasn’t going to mention this until next week but it’s Friday—treat yourself!

I’ve just launched a members-only subscription: screencasts, Q&A, mentoring, discounts, and more.

👉 csswizardry.gumroad.com/l/subscribe
Subscribe
I’ve been writing or creating content in some form or another since 2009. Some of you have been with me since the very beginning. That over 15 years!The articles and research I publish on csswizardry....
csswizardry.gumroad.com
I’ve spotted a @developer.chrome.com bug a few times in the wild, but today I finally caught it in the act. Pages hanging for 5+ minutes! CrBug raised here: issues.chromium.org/issues/57632...
Chromium
issues.chromium.org
October 22, 2026 at 4:37 PM
Two of my favourite opening slides from my ongoing work with LEGO. Sometimes, site-speed really is a *them* problem. It’s a function of your work and your audience, and one, both, or neither can move the needle.
October 7, 2026 at 9:04 AM
It’s a real shame that folk a decade ago weren’t warning developers against utterly insane things like CSS-in-J —  oh.
October 5, 2026 at 8:43 AM
🇬🇧 ✈️ 🇳🇱
Just landed in Schiphol ready for @fronteers.bsky.social Dark Mode tomorrow!
October 1, 2026 at 6:39 PM
#WebPerfWednesday 11 is out, in which we fix a longstanding bug in @speedcurve.com, and Safari gets network throttling! csswizardry.com/2026/09/web-...
Web-Perf Wednesday 011 – SpeedCurve’s INP Observer Missed Its Threshold – CSS Wizardry
A long-standing lux.js bug left Event Timing on its 104 ms default, while browser releases improve testing and rendering performance.
csswizardry.com
September 30, 2026 at 9:49 AM
Tomorrow, I’m starting a new project with LEGO. Look how excited I am!
September 28, 2026 at 5:18 PM
What is Time to First Byte and what can you do about it? csswizardry.com/2019/08/time...
Time to First Byte: What It Is and How to Improve It – CSS Wizardry
Just how much does TTFB matter when it comes to front-end performance?
csswizardry.com
September 17, 2026 at 2:21 PM
Are you getting the most out of your Speculation Rules? Probably not! csswizardry.com/2024/12/a-la...
A Layered Approach to Speculation Rules – CSS Wizardry
The new Speculation Rules API is incredibly powerful, but we can do so much more! By taking a layered approach, we can add more progressive functionality.
csswizardry.com
September 14, 2026 at 10:15 AM
If you’re tracking your Core Web Vitals with synthetic, you probably also want to track your Total Blocking Time window: csswizardry.com/2026/06/fron...
Front-End’s Missing Metric: The TBT Window – CSS Wizardry
The TBT Window is the FCP-to-TTI interval used to calculate Total Blocking Time. If FCP or TTI moves, TBT can change even when long tasks do not.
csswizardry.com
September 11, 2026 at 1:04 PM
Over the last day or so, Codex and I have been working on adding a proper taxonomy and associated categories and tags to the blog. Finally, @csswizardry.com has a proper archive! csswizardry.com/blog/
CSS Wizardry Blog Archives – CSS Wizardry
Browse the full CSS Wizardry archive of articles on web performance, Core Web Vitals, caching, CSS architecture, and front-end engineering.
csswizardry.com
September 10, 2026 at 2:45 PM
Another day, another compelling use case for `No-Vary-Search`! csswizardry.com/2026/05/bett...
Better Browser Caching with No-Vary-Search – CSS Wizardry
No-Vary-Search lets HTTP caches ignore irrelevant query parameters such as UTM tags, while still keeping meaningful ones like product variants in the cache key.
csswizardry.com
September 10, 2026 at 9:03 AM
I have ChatGPT read my `.vimrc` and send me a daily #Vim tip to read with my morning coffee.
September 9, 2026 at 10:03 AM
I’ve always had a very good habit of `[TAGGING]` things like calendar events or Jira titles and the like — it makes it so much easier to find arbitrary topics with simple grep or search. It turns out it’s *incredibly* useful in this agentic world!
September 4, 2026 at 1:25 PM
I’ve been using @talat.app for a few months now and it’s completely changed how I handle meetings. I’ll prime Codex for an upcoming call and what I need out of it, then point it at the Talat MCP and get it to extract the bits that are meaningful.
September 3, 2026 at 6:28 PM
I added BCP 14 rules to `AGENTS.md`. Let’s see if/how that helps when writing spec-like prompts.
September 3, 2026 at 4:39 PM
🗓️ Published! This week’s #webPerfWednesday looks at Chome’s new release cadence, Unattributed Navigation Overhead, and soft navs in DevTools: csswizardry.com/2026/08/web-...
Web-Perf Wednesday 006 – Faster Browser Releases Change Your RUM Population – CSS Wizardry
Chrome and Firefox are moving to two-week releases, making browser cadence part of how teams interpret RUM and plan performance testing.
csswizardry.com
August 26, 2026 at 11:55 AM
Today, I walked around Costco snapping photos of meat labels. I slung them all into my own personal chef GPT, Pierre.

👈 This was my input and
👉 That is their output.

For <£400 all in, I’m eating like a king five days a week up until 19 November.
August 22, 2026 at 5:56 PM
I wrote this up a bit more formally: csswizardry.com/2026/08/how-...
August 21, 2026 at 5:29 PM
Instead of asking Codex to look in Gmail for ‘[subject]’ (risky and prone to duplicates or misinterpretation), head to ‘Show original’ and use the RFC 822 `MESSAGE-ID` (from 1982!) to target an exact specific message. From there, it can surface the entire visible thread.
August 20, 2026 at 8:09 PM
If you use @speedcurve.com—and you should—then LUX Sidecar is for you! csswizardry.com/2026/08/intr...
Introducing LUX Sidecar: Your SpeedCurve Companion – CSS Wizardry
LUX Sidecar is a small SpeedCurve RUM plugin that adds browser and navigation context to your real-user performance data.
csswizardry.com
August 20, 2026 at 7:26 PM
Unattributed Navigation Overhead is one of the biggest things you’re missing out on… csswizardry.com/2026/08/uno-...
Unattributed Navigation Overhead (UNO) Is Underrated – CSS Wizardry
Unattributed Navigation Overhead exposes the part of Time to First Byte that Navigation Timing cannot explain, including hidden cross-origin redirects.
csswizardry.com
August 19, 2026 at 2:34 PM
#webPerfWednesday no. 5 is live! We look at DevTools bug fixes that landed in preview versions of Chrome and Safari, as well as new streamable `fetch` uploads (confusing): csswizardry.com/2026/08/web-...
Web-Perf Wednesday 005 – RUM Needs More Than a Percentile – CSS Wizardry
LUX Sidecar adds context to RUM, while browser-tool fixes show why measurement conditions and small debugging details matter.
csswizardry.com
August 19, 2026 at 8:20 AM
🐛 Safari published an unusually terse bug fix in STP 250 — I looked into
It. csswizardry.com/2026/08/when...
When Safari’s ‘Ignore Cache’ Ignored Cache-Control – CSS Wizardry
Safari Technology Preview 250 fixed a subtle Web Inspector bug that overwrote page-authored Cache-Control request headers when the resource cache was disabled.
csswizardry.com
August 17, 2026 at 8:58 PM
Friday freebie for all you @speedcurve.com fans: LUX Sidecar – Your SpeedCurve Companion

gist.github.com/csswizardry/...
LUX Sidecar – Your SpeedCurve Companion
LUX Sidecar – Your SpeedCurve Companion. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
July 31, 2026 at 1:31 PM
I’ve started including a `mission-statement.md` alongside my project-level `AGENTS.md`. It contains philosophical notes about the project: why it exists, what questions it exists to answer, what ‘good’ looks like, etc.
July 31, 2026 at 10:42 AM