Sign in

Harry Roberts

@csswizardry.com
6.4K followers 196 following 427 posts

🚀 Independent Web Performance Consultant • Speaker • Google Developer Expert, Web Performance • Accepting new clients • harry.is/for-hire

PostsRepliesMedia
Harry Roberts @csswizardry.com · 14h
#WebPerfWednesday 11 is out, in which we fix a longstanding bug in @speedcurve.com, and Safari gets network throttling! csswizardry.com/2026/09/web-...
csswizardry.com
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.
001
Harry Roberts @csswizardry.com · 28/09/2026
Tomorrow, I’m starting a new project with LEGO. Look how excited I am!
An AI rendering of Harry Roberts as a LEGO man. He’s wearing a pink shirt and dark jeans and is gesturing as though speaking/presenting.
3370
Harry Roberts @csswizardry.com · 17/09/2026
What is Time to First Byte and what can you do about it? csswizardry.com/2019/08/time...
csswizardry.com
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?
0101
Harry Roberts @csswizardry.com · 14/09/2026
Stunning event!
130
Harry Roberts @csswizardry.com · 14/09/2026
Are you getting the most out of your Speculation Rules? Probably not! csswizardry.com/2024/12/a-la...
csswizardry.com
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.
051
Harry Roberts @csswizardry.com · 11/09/2026
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...
csswizardry.com
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.
073
Harry Roberts @csswizardry.com · 10/09/2026
The reason this has been absent for so long is that @csswizardry.com is built on Jekyll which has no first class support for categories and tags, so I’m especially proud of this: csswizardry.com/blog/tags/
000
Harry Roberts @csswizardry.com · 10/09/2026
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/
csswizardry.com
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.
250
Harry Roberts @csswizardry.com · 10/09/2026
Another day, another compelling use case for `No-Vary-Search`! csswizardry.com/2026/05/bett...
csswizardry.com
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.
1223
Harry Roberts @csswizardry.com · 09/09/2026
I have ChatGPT read my `.vimrc` and send me a daily #Vim tip to read with my morning coffee.
040
Harry Roberts @csswizardry.com · 04/09/2026
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!
030
Harry Roberts @csswizardry.com · 03/09/2026
That’s the key feature for me for definite. It’s an almost-hands free process!
010
Harry Roberts @csswizardry.com · 03/09/2026
Too busy stealing ur website xox
010
Harry Roberts @csswizardry.com · 03/09/2026
I really don’t think it’s that deep though man. I’m trying to support an indie builder by gifting something in return for trying to get them some more exposure. It’s an app that I use regularly and really want to see them win.
110
Harry Roberts @csswizardry.com · 03/09/2026
So… you want it or not? 😂
100
Harry Roberts @csswizardry.com · 03/09/2026
It’s not an ad. But the app was made by a friend of mine and I am trying to share and support it. I am fully paid up and I do want to see them win. Gifting a license as a result. It’s $189 and they only do lifetime licenses anyway.
100
Harry Roberts @csswizardry.com · 03/09/2026
Yes?
100
Harry Roberts @csswizardry.com · 03/09/2026
Anyway. This is #notAnAd! I have a fully paid up license and I can literally show you receipts, but! I am also informally giving away one free lifetime license to ONE person. Follow me and @talat.app and quote-post this post with how it would help you.
110
Harry Roberts @csswizardry.com · 03/09/2026
It solves my two biggest on-meeting problems: 1) being distracted in front of a client as I take notes, and 2) not taking good enough notes as I still need to be present.
110
Harry Roberts @csswizardry.com · 03/09/2026
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.
220
Harry Roberts @csswizardry.com · 03/09/2026
BCP 14 is the practice that collates and defined MUST, SHOULD, MAY, etc. www.rfc-editor.org/info/bcp14/
rfc-editor.org
BCP 14 subseries contains 2 RFCs | RFC Editor
BCP14 contains RFC 2119, RFC 8174.
020
Harry Roberts @csswizardry.com · 03/09/2026
I added BCP 14 rules to `AGENTS.md`. Let’s see if/how that helps when writing spec-like prompts.
### Interpret Requirement Keywords Consistently

Interpret requirement keywords in Harry’s input in accordance with BCP 14 when, and only when, they appear in all capitals. Give forms that are not in all capitals their ordinary English meanings. Apply the same rule to third-party input when the context reasonably suggests that the author intended BCP 14 usage. Uppercase keywords do not by themselves make the input contractual or formally normative.

If a keyword’s meaning, feasibility, priority, or interaction with another instruction is uncertain, ask a focused clarifying question before proceeding. Name the conflict and its practical consequence; for example: ‘You said `MUST`, but the current API cannot satisfy that requirement. How should we proceed?’ Treat this as an illustrative pattern, not an exhaustive scenario.
120
Harry Roberts @csswizardry.com · 26/08/2026
🗓️ 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-...
csswizardry.com
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.
010
Harry Roberts @csswizardry.com · 22/08/2026
Dry-run. Unreal.
000
Harry Roberts @csswizardry.com · 22/08/2026
The £400 includes the best-guess estimate for supporting ingredients. So only an additional £300 until mid November for the whole menu.
110
Harry Roberts @csswizardry.com · 22/08/2026
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.
ChatGPT prompt detailing exact instructions for designing meals around my calendar.Calendar events that my ChatGPT pal, Pierre, has earmarked for me. Live in Google Calendar.
170
Harry Roberts @csswizardry.com · 21/08/2026
I wrote this up a bit more formally: csswizardry.com/2026/08/how-...
csswizardry.com
How to Find an Exact Gmail Thread with Codex or Claude – CSS Wizardry
Use Gmail’s Message-ID to point Codex or Claude at one exact email and retrieve the complete conversation rather than a plausible result.
040
Harry Roberts @csswizardry.com · 20/08/2026
Inb4 ‘you doxxed yourself!!’: that’s a nonexistent mailbox and the ID is the Base64 for a transparent GIF.
000
Harry Roberts @csswizardry.com · 20/08/2026
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.
250
Harry Roberts @csswizardry.com · 20/08/2026
If you use @speedcurve.com—and you should—then LUX Sidecar is for you! csswizardry.com/2026/08/intr...
csswizardry.com
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.
061
Harry Roberts @csswizardry.com · 19/08/2026
Unattributed Navigation Overhead is one of the biggest things you’re missing out on… csswizardry.com/2026/08/uno-...
csswizardry.com
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.
052
Harry Roberts @csswizardry.com · 19/08/2026
#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-...
csswizardry.com
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.
020
Harry Roberts @csswizardry.com · 17/08/2026
🐛 Safari published an unusually terse bug fix in STP 250 — I looked into It. csswizardry.com/2026/08/when...
csswizardry.com
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.
030
Harry Roberts @csswizardry.com · 31/07/2026
Friday freebie for all you @speedcurve.com fans: LUX Sidecar – Your SpeedCurve Companion gist.github.com/csswizardry/...
gist.github.com
LUX Sidecar – Your SpeedCurve Companion
LUX Sidecar – Your SpeedCurve Companion. GitHub Gist: instantly share code, notes, and snippets.
020
Harry Roberts @csswizardry.com · 31/07/2026
Nah man I’m with you… 👎 ‘We should refactor our code because it will make developers more productive.’ 👍 ‘We should refactor our code because it will save token!’
020
Harry Roberts @csswizardry.com · 31/07/2026
The mission statement should never include instruction or implementation detail—it should be a guiding principle. The end that the means work around.
220
Harry Roberts @csswizardry.com · 31/07/2026
`AGENTS.md` is then told ‘where exact directions are unspecified or unclear, ensure the work aligns with `mission-statement.md`’ as a bit of a fallback/vibe-check. It’s not failsafe or bulletproof, but I have noticed it being invoked a few times recently and… it works!
130
Harry Roberts @csswizardry.com · 31/07/2026
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.
Three vertically stacked Vim windows showing Markdown mission statements for different client engagements. Each document begins with a heading and concise project summary. Client names have been replaced with placeholders and identifying path information is redacted.
2441
Harry Roberts @csswizardry.com · 21/07/2026
Thanks! I’ve tried to encourage developers/clients for the longest time: low-end !== old! There are loads of new but under-powered devices in circulation.
000
Harry Roberts @csswizardry.com · 21/07/2026
🤳 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-...
csswizardry.com
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…
1152
Harry Roberts @csswizardry.com · 15/07/2026
Yeah, poor choice of words from me! Thanks for keeping me honest haha
020
Harry Roberts @csswizardry.com · 15/07/2026
Hmm. Sounds like a bit of a failed standard then 😞
220
Harry Roberts @csswizardry.com · 15/07/2026
Yeah, I recently added this to mine: github.com/csswizardry/...
110
Harry Roberts @csswizardry.com · 15/07/2026
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.
460
Harry Roberts @csswizardry.com · 08/07/2026
It can help but it’s not as good as a dedicated profile!
010
Harry Roberts @csswizardry.com · 08/07/2026
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.
160
Harry Roberts @csswizardry.com · 29/06/2026
I solve the day’s puzzle myself, then when I’ve completed it, I walk ChatGPT through its game by playing on its behalf and pasting screenshots in. It’s fun!
010
Harry Roberts @csswizardry.com · 29/06/2026
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.
ChatGPT screenshot showing a Wordle leaderboard. Of 27 games played, it shows that I’ve spent 103 total guesses (for an average of 3.81/game) to its 107 (3.96 average).
220
Harry Roberts @csswizardry.com · 26/06/2026
My lunch the other day was a chicken sandwich with herby mayo and crispy chicken skin and I miss it so much 😭
020
Harry Roberts @csswizardry.com · 26/06/2026
A great, succinct, informative write up from my pal @matuzo.at! Context-aware headings in HTML: www.matuzo.at/blog/2026/co...
matuzo.at
Context-aware headings in HTML - Manuel Matuzovic
I’m a frontend developer, consultant, accessibility auditor, blogger, teacher, and book author from Austria.
082