v2.25.0
Fixed
Creator Studio was unreachable in a real browser (#1203)
fetchFlagFromDbCached caught its own rejection inside unstable_cache, so a 500ms timeout became indistinguishable from "no such row" and that null was cached for an hour. checkFlag then fell back to NEXT_PUBLIC_STUDIO_ENABLED, unset in production, resolving the flag to false while the studio_enabled row still read true.
The symptom was invisible to curl: /studio?demo=1 answered HTTP 200 while emitting <meta http-equiv="refresh" content="1;url=/">. curl ignores a meta refresh; every browser obeys it. Six of six measured loads bounced to the landing page.
A failed lookup now degrades for that request only and caches nothing, so the next call retries and picks up the real row. Verified in production: 5/5 real-browser loads stay on /studio?demo=1, with zero meta-refresh and zero NEXT_REDIRECT markers.
A locale-segmented page could receive the wrong dictionary (#1201)
app/[locale]/page.tsx hardcoded en as "the non-default locale" when choosing the client dictionary. Correct only while the default was 'es'; after the flip it would have handed the Spanish landing page the English dictionary. It now derives the dictionary from locale.
Changed
English is the default locale when a request carries no locale signal (#1201)
DEFAULT_LOCALE moves from 'es' to 'en'. A chapa-locale cookie or an Accept-Language header still wins ahead of it, so a Spanish visitor keeps Spanish. Only the signal-less case changes, and that case covers every un-qualified embedded badge, the statically-built shells, and the warm-cache cron's pre-warmed badge.
Verified in production: /u/:handle/badge.svg renders "Verified metrics", and ?lang=es still renders "Métricas verificadas".
Full changelog: v2.24.1...v2.25.0