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
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
🤳 I just published the 2026 update to my ongoing research, ‘Low- and Mid-Tier Mobile for the Real World’. What are this year’s target hardware? Find out!

csswizardry.com/2026/07/low-...
Low- and Mid-Tier Mobile for the Real World (2026) – CSS Wizardry
The 2026 update to my real-world device testing recommendations paints a clearer picture than ever…
csswizardry.com
July 21, 2026 at 12:48 PM
Has anyone written/built an `llms.txt` that they’re really happy with? And have you noticed it working/helping?

I recently updated my research agent to check all websites for `/llms.txt` before diving straight into parsing pages of HTML and I’m looking forward to seeing if/how effective it is.
July 15, 2026 at 3:15 PM
If you’re doing any reasonable amount of performance work, ensure you have a fresh browser profile with no ad blockers installed, and ensure this is unchecked (Chrome)! You’re only getting part of the picture otherwise.
July 8, 2026 at 8:56 AM
For the last month or so, I’ve been playing Wordle against ChatGPT and keeping track of our scores. It’s incredibly close, but I’m just winning.
June 29, 2026 at 1:17 PM
A great, succinct, informative write up from my pal @matuzo.at! Context-aware headings in HTML: www.matuzo.at/blog/2026/co...
Context-aware headings in HTML - Manuel Matuzovic
I’m a frontend developer, consultant, accessibility auditor, blogger, teacher, and book author from Austria.
www.matuzo.at
June 26, 2026 at 4:57 PM
It’s true…
June 25, 2026 at 10:12 AM