The 14-day refresh threshold was designed for the old 30-day tokens but the backend now emits 1-hour tokens. The threshold caused every page load to trigger an immediate /refresh-token call, which revoked the old JTI mid-flight while concurrent requests (profile, giftcards, bookings, etc.) were still using it, causing 401 errors. Changes: - Refresh threshold: 14 days -> 5 minutes (matches 1-hour token lifetime) - Interval check: 60 min -> 2 min (must be shorter than threshold) - Race condition: refresh now completes before profile fetch, preventing JTI invalidation during concurrent requests Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>