v1.4.0 — Idiom Modernization + Forum Localization Fix
This release is an idiom-modernization follow-up to v1.3.0's push-to-newest dependency sweep: code is rewritten to the newest idioms of each already-pinned dependency, all behavior-preserving — with one genuine user-facing fix. The pre-push gate (typecheck, lint, build) and tests are green.
Bug fix
- Forum now displays in your selected language. Post view counts, upvote counts, and relative timestamps were being formatted with the runtime default locale rather than your active one, so they rendered incorrectly in all 7 non-English locales (ru, es, uk, de, fr, ja, zh). All six forum components now format through next-intl's
useFormatter, which binds the active request locale automatically — making the bug structurally impossible to reintroduce. Number, relative-time, and date output is otherwise unchanged, and relative times are now hydration-stable.
Behavior-preserving modernization
Everything below is an idiom upgrade with no functional change:
- Zod 4 — top-level format helpers (
z.url(),z.uuid()) andz.ZodType. - motion — framer-motion imports moved to the mandated
motion/reactentry (93 specifiers, 92 files). - Tailwind v4 —
bg-linear-to-*/oklabgradients (byte-identical oklab interpolation) andsize-*shorthand. - Prisma — dropped three GA'd preview features; kept only the still-required
partialIndexes. - React 19.3 —
useEffectEventadopted where it genuinely fits, eliminating two dependency suppressions. - shadcn/ui — the current
data-slotconvention added across all standard UI primitives (additive only). - Hono — all three Cloudflare Workers migrated to the idiomatic
zValidatormiddleware, with byte-identical 400 responses. - TS7-forward — the advisory
tsgo(TypeScript 7 native preview) typecheck is green again, scoped past the two packages whose Three.js TSL types the native compiler can't yet resolve.
New under the hood
- Real Sentry capture — manual error capture, breadcrumbs, error boundaries, and
onRequestErrornow actually report to Sentry (previously console-only), via a code-split adapter. instrumentation-client.ts— replaces the deprecatedsentry.client.config.ts, which didn't run under Turbopack, restoring client-side error and navigation tracing in dev.
Full changelog: CHANGELOG.md · Compare: v1.3.0...v1.4.0
🤖 Generated with Claude Code