Percentile Trace

The page arrives.
The rows do not.

An authenticated watchlist on Next.js, Vercel and Supabase Postgres. The shell is prerendered and on screen at once. Behind it, one database call holds the stream open. This is the work of finding out which one, and what it costs once it is fixed.

Two requests leave your browser now, one against each version of the policy. Every number that comes back carries the request id that produced it.

The recorded run

From the click on the watchlist link to the expected rows on screen, verified as 50 rows with the first id the request returned, measured by Chromium. No averages anywhere: a mean over a long tail is the one number that describes nobody.

Conditionnp95p99
Membership subquery105479 ms577 ms
Account claim105352 ms479 ms

2026-09-11 13:37 UTC, measured from Asuncion, Paraguay, function in iad1, database in us-east-1. Closed loop, one click at a time, a fresh browser context per observation, link prefetch at the Next.js default. Failed and unverified observations are counted. The raw values, the query plans and the method are in the report.