Back to Changelog
v1.2.0 · Minor
April update
Multilingual blog, scheduled publishing with RSS feeds, OAuth login fix, and UI polish.
April was the month the blog grew up. Multilingual support, scheduled publishing, RSS feeds, and a handful of fixes that take rough edges off the developer experience.
Blog
- Multilingual posts —
Postnow haslocaleandtranslationGroupIdfields. Each post lives in a single language with its own slug per locale, and translations are linked explicitly via the group ID. Sitemap emitshreflangalternates withx-defaultonly for URLs that actually exist — no more phantom routes. - Scheduled publishing + RSS feeds — set a future
publishedAtto schedule.feed.xmlper locale exposes the feed for readers and aggregators. - Language switcher fix — switching locale from a bilingual post now resolves the sibling slug instead of replicating the current one and 404'ing.
Auth
- OAuth login fix (Google / GitHub / LinkedIn) — added the two missing
Accountfields (accessTokenExpiresAt,scope) Better Auth needs for OAuth callbacks, and fixed the hydration bug where social buttons disappeared after mount becausegetOAuthProviders()was called from the client.SocialLoginButtonsnow receivesprovidersas a prop from the server page.
UI
- Native browser dialogs replaced with shadcn
<AlertDialog>/<Dialog>— everyconfirm()andwindow.prompt()is now a themed component (<ConfirmDialog>and<PromptDialog>) that respects dark mode, i18n, and accessibility. A CLAUDE.md rule prevents the AI from reintroducing native dialogs. - Overscroll bounce disabled — added
overscroll-behavior: noneonhtmlto remove the elastic bounce when scrolling to the page edges.