The interesting bit
The permission-gating trick
The gated “Life & places” pages aren't protected by hiding a link. Access lives in
the JWT's app_metadata — never user_metadata, which a signed-in
user could edit themselves. The subtlety: the user object's app_metadata can
lag the token, so on sign-in the session is enriched from both and the JWT is refreshed if
they diverge. Once verified, the whole gate is CSS — a class on the root element
reveals content with no JavaScript in the render path.