

When we talk about making an open feel fast, the conversation usually goes to the backend. That matters, but it is not the whole story.
This post is about the client. The choices between a thumb on a card and the first honest pixels decide whether dual open feels slow even when the server is fine.
On our feed, a card is a thought, research, spotlight, ... about an article. In Philonet a feed tap often opens two pages together.
Two pages. Two definitions of ready. One gesture. The backend can shrink the wait. The client stages it.
Most social platforms (Reddit, X, Instagram) open one page family, a post, maybe with comments. Reddit’s listings default to limit 25 (max 100). Comment trees arrive truncated and expand on demand. Their iOS client has been seen warming on-screen post details (and comments for the first post) before the tap.
Substack is closer in spirit (a real article) but lighter. One reading open, not a live room beside it on the same tap. We take the social playbook for the room. We still stage the heavier reader next to it.
Jakob Nielsen’s limits (from Miller) still hold. ~0.1s feels instant, ~1s keeps thought in flow, ~10s is about the attention ceiling. Past one second people notice the machine. A blank pause is the worst version. The reason for the delay does not matter to them. Progressive structure beats a spinner that only says “still waiting.”
So we do not wait for both pages to finish. We load in variation. Something true first, denser layers while attention is already moving. Two clocks we refuse to merge.
Card blurbs are often only a few hundred characters. Treating them as the article makes the reader clock lie. Holding the room for every insight makes the room clock pay for the reader’s weight.
Deep reader enrichment costs real money, and opening two pages on one tap makes it easy to fetch more than you need. At our stage we keep that under control on the client. We warm what the next tap is likely to need, instead of precomputing everything up front the way a much larger feed product might.
jump_to_latest, 60s stale), reader JS onceThat is cost-effective. Warm the probable tap, not every heavy reader path on screen. It does not replace a fast API. It decides whether the same network budget feels like progress or a stall.
