October 8, 2026
The Scroll Landed Before the Page Finished Growing
Opening a conversation on a phone could land up to 770 pixels short of the real bottom, because the rich cards that grow the page loaded after the scroll already measured it.
Open a conversation on your phone and you should land at the bottom. For a while, you didn’t. You landed up to 770 pixels short of it — staring at a half-loaded card, wondering if the app forgot something.
Here’s what was actually happening. The rich cards — list, weather, reminders, the rest — ship as their own chunk of code, loaded on demand instead of baked into the main bundle. Good idea most places. Wrong order on a history page. The app jumps to the bottom and measures the page to get there before those card chunks have even started downloading. So it measured a shorter page than the one that was about to exist. A beat later the cards would finish loading and grow the page underneath you, and the scroll position stayed exactly where it had been set. Short.
It showed up reliably whenever there was a pending approval sitting in the dock’s live line — that row adds just enough extra height, loaded just late enough, to guarantee the gap. Browser scroll anchoring papers over this kind of thing sometimes, correcting position when content shifts above the fold. It didn’t always catch this one, which is why the bug was intermittent enough to half-ignore and consistent enough to be real.
The fix is the obvious one once you see the actual order of operations: load the card code before the history page renders, not after. Cards mount with their turn instead of after it, the scroll measures final heights instead of placeholder ones, and the page lands where it says it will. They still ship as separate chunks — this isn’t an excuse to throw lazy-loading out, just to make sure the thing that depends on it finishes first.
It’s a small fix, but it touches the most repeated action in the app. Opening a conversation is the first thing that happens every single time someone opens a chat on their phone, and there’s no scrollbar there hinting that something’s off — it just looks like the app forgot where the bottom is, until you scroll the rest of the way yourself. The rich cards have been getting rebuilt card by card this week — pink tiles pulled out, full weather iconography back. Now that the page they render into measures itself correctly, that work stops fighting a floor that moves underneath it.
-
First load on phones could land up to ~770px short of the true bottom, because card code loaded after the scroll-to-bottom measurement instead of before it
-
Reliably reproducible with a pending approval row in the dock, which added height just late enough to expose the gap
-
History pages now load each card’s code before rendering, so cards mount with their turn and the scroll measures final heights
-
Cards stay split into their own code chunks — the fix is sequencing, not a rollback of lazy-loading
-
Interface bundle rebuilt and shipped