Skip to content
Safari 27 Fixed top-level await — Retested, and Loading Doubled thumbnail

Safari 27 Fixed top-level await — Retested, and Loading Doubled

Safari’s top-level await bug was reported back in July 2022 (WebKit bug 242740), and by October 2025 it had gotten bad enough that top-level await dropped to “Limited” on Baseline (the cross-browser support signal for web platform features). The fix merged in April 2026, shipped starting with Safari Technology Preview 243 in May, and on September 2 the WebKit team posted the postmortem: Fixing top-level await in Safari. ...

Published date: 2026-09-03 · Reading time: 12 min · Word count: 2555 words · Author: Isaac
When aria-live Stays Silent — Getting ARIA Live Regions Right thumbnail

When aria-live Stays Silent — Getting ARIA Live Regions Right

A green toast reading “Saved” pops up in the bottom-right corner of the screen. It disappears two seconds later. For someone using a mouse, that’s complete feedback. But for someone who isn’t looking at the screen? That toast never happened. There’s no way to know whether the save succeeded or not. This is exactly what live regions exist to solve. Mark a region ahead of time as one whose content can change without a page refresh, and when the text inside it changes, the screen reader reads it out automatically. One line — aria-live="polite" — is all it takes. ...

Published date: 2026-09-02 · Reading time: 17 min · Word count: 3505 words · Author: Isaac
Test Culture, Interviews, and What Comes Next — Wrapping Up the Frontend Testing Series thumbnail

Test Culture, Interviews, and What Comes Next — Wrapping Up the Frontend Testing Series

This is Part 22 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary What do you end up with when you stack tests onto one small app, one layer at a time? This article is the retrospective on that journey — and a map of frontend testing as a whole. The layers we stacked were these: unit tests that check whether a single function does its one job, component tests that poke at the screen the way a user would, real-browser E2E that sweeps end to end, accessibility checks that protect users who never look at the screen, and CI that runs all of it for you on every PR. By the end, we’d even gotten to verifying code and tests written by AI. ...

Published date: 2026-08-08 · Reading time: 11 min · Word count: 2297 words · Author: Isaac
The Traps in AI-Made Code — Missing Accessibility and Edge Cases thumbnail

The Traps in AI-Made Code — Missing Accessibility and Edge Cases

This is Part 21 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary AI-written code is fast, it runs, and the screen looks good. The problem is that it’s wrong in plausible ways. Two spots go empty especially often. One is accessibility — the things people who use the web without looking at a screen need. The other is what happens in moments that rarely come up — an empty search box submitted, a server returning a 500. We call these edge cases. Both fall into “nobody covers it unless you ask” territory. ...

Published date: 2026-08-07 · Reading time: 6 min · Word count: 2831 words · Author: Isaac
Playwright × AI — codegen, MCP, Self-Healing Selectors thumbnail

Playwright × AI — codegen, MCP, Self-Healing Selectors

This is Part 20 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary By now, AI “writing” test code for you feels familiar. Lately, though, it’s gone a step further — AI has started opening the browser itself, clicking through it, and checking whether things work. It’s a neat trick, but ask “so can I actually use this at work?” and the answer gets fuzzy fast. Tool names keep popping up, but there’s rarely a single piece that lays out what each one actually does and how far you can trust it. This article is that map. ...

Published date: 2026-08-06 · Reading time: 7 min · Word count: 3464 words · Author: Isaac
Generating Tests with AI — Verification Stays Human thumbnail

Generating Tests with AI — Verification Stays Human

This is Part 19 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary Can you just ask AI (large language models like ChatGPT and Claude) to write your tests? Yes. Just don’t trust them as-is. AI produces plausible tests in seconds, but tends to quietly skip the boundary, failure, and accessibility cases that matter most. This article is about employing AI properly as a test-writing assistant — from getting good drafts to the checklist that proves the tests actually work. ...

Published date: 2026-08-06 · Reading time: 12 min · Word count: 2489 words · Author: Isaac
Popover, Anchor Positioning, Dialog: Are They Accessible Enough to Use Yet? thumbnail

Popover, Anchor Positioning, Dialog: Are They Accessible Enough to Use Yet?

When we’re deciding whether to adopt a new feature, we usually look at a support table. We check caniuse, see what percentage of cells are green, and once it clears 90%, we think “okay, we can use this now.” But there’s a question the support table never answers: Can you use it with a keyboard? Does a screen reader read it correctly? Those are two different questions. There’s a bigger gap than you’d expect between a browser implementing a feature and that feature actually handling accessibility. Some features quietly replace accessibility code we used to hand-write; others open up brand-new traps. ...

Published date: 2026-08-05 · Reading time: 23 min · Word count: 4820 words · Author: Isaac
How to Read Coverage — and the Metrics Beyond It thumbnail

How to Read Coverage — and the Metrics Beyond It

This is Part 18 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary Open a coverage report and four numbers stare back — Stmts, Branch, Funcs, Lines. Which one matters? This article is about reading that report: which number is honest (spoiler: branch), what to fill in from the red lines, and where to look for the team health that numbers can’t show. If you’ve been following the series, this is the hands-on follow-up to the strategy part’s point that “coverage is a reference, not a target.” First time here from a search? That’s fine too — we use Vitest, but reading a report works the same no matter which tool you’re on. ...

Published date: 2026-08-04 · Reading time: 7 min · Word count: 1354 words · Author: Isaac
Building Test and Accessibility Gates with GitHub Actions thumbnail

Building Test and Accessibility Gates with GitHub Actions

This is Part 17 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary Tests have no power while they’re “something you run locally, sometimes.” They protect a team only once they become a checkpoint that runs on every PR. This article builds that checkpoint with GitHub Actions — a merge gate where unit tests, E2E, and accessibility checks must pass before code can merge — from a single workflow file. Never touched CI? Fine. Three minutes of vocabulary first. ...

Published date: 2026-08-03 · Reading time: 6 min · Word count: 1250 words · Author: Isaac
Visual Regression Testing — Screenshot Comparison thumbnail

Visual Regression Testing — Screenshot Comparison

This is Part 16 of the “Frontend Testing, Done Right” series. Browse the full series · Glossary Ever had every test green while the screen was broken? Logic fine, one CSS rule collapsing the layout? Visual regression testing stores a reference screenshot (the baseline) and compares pixels, automatically catching “regressions only eyes can see.” It’s built into Playwright — one line to start — but there’s a knack to stable shots and an ambush called environment differences. All covered here. ...

Published date: 2026-07-29 · Reading time: 11 min · Word count: 2151 words · Author: Isaac
맨 위로