The drawer that let the page slide out from under it
A mobile navigation drawer left the page behind it scrollable, and the fix for that made the page take a 1.5-second tour back to where it started.
A permanent collection of six
Six defects from real project work, with the names taken off. Each one is here as an object you can handle: break it, watch the fix land, then read why it happened and what stops it coming back.
Featured exhibit
Scroll the phone with the wheel, a finger, or the controls next to it.
Five frames after the close
Close the drawer from somewhere in the middle to sample them.
What the page did
Nothing yet — try a control above.
The phone in the case is a scroll container in this page. It runs all three implementations against an element that really does carry scroll-behavior: smooth, so the difference you see between First fix and Fixed is the real mechanism — but the content, the timings and the pixel numbers are this browser's, not a recording of anything.
What you are looking at
The scrim stops clicks, not scrolling — the page keeps moving behind the drawer.
A mobile navigation drawer left the page behind it scrollable, and the fix for that made the page take a 1.5-second tour back to where it started.
Read the whole storyThe collection
Showing 6 of 6 exhibits
A mobile navigation drawer left the page behind it scrollable, and the fix for that made the page take a 1.5-second tour back to where it started.
Asking a circuit breaker whether a request was allowed consumed the one probe that would have let it recover.
A streak counted backwards in fixed 24-hour steps, so the morning after the clocks went forward it skipped a date and declared the run broken.
A React effect listed the state it produced among its own dependencies, so the speech recogniser started, cancelled itself, restarted, and transcribed almost nothing.
Deleting an account in one tab made a second tab notice the missing profile and helpfully recreate it.
A delay before advancing to the next blank left the form live, so a second Enter queued a second timer and skipped a question entirely.
How to visit
Every case has a Broken / Fixed switch, and three of them have a First fix in between. The object in the case really is running that version of the code.
Scroll the phone, fail the requests, press Enter twice. Nothing here is a recording, and nothing runs code you type.
The explanation, the reproduction and the regression test are underneath, each linked to the file in this repository that holds it.