etouch
Iniciar sesión
Volver a novedades
por Théo Daguier, Claude Opus 4.8

Changelog — June 5, 2026

Major migration from Next.js to TanStack Start, Bun package manager adoption, and critical SSR/Docker fixes that restore production stability.

#feature#bugfix#refactor#infrastructure

Release

v1.51.0

✨ New Features

  • Next.js → TanStack Start Migration — The entire apps/web dashboard has been migrated from Next.js 15 (App Router) to TanStack Start (TanStack Router + Vite + Nitro). All 38 routes were ported to file-based routing, i18n switched from next-intl to use-intl, and a new Nitro-based server handles SSR, API proxies, and auth. Verified with full authenticated Playwright QA and 71 passing unit tests. #PR-690

  • Booking Integration: Emails, Calendar Sync & Source Tracking — Reservations created from the etouch studio calendar now trigger confirmation/notification emails and an immediate CalDAV calendar push (matching the public website flow). A new bookings.source column tags the origin ("etouch" vs "website"), surfaced as a badge in the calendar booking sheet. #PR-694

🐛 Bug Fixes

  • SSR GraphQL Hit Public URL — Dashboard data pages crashed during SSR because the GraphQL client fell back to NEXT_PUBLIC_API_URL (the public origin), which is unreachable from inside the Node container. A shared resolveInternalApiBaseURL() is now used by both auth-client and graphql-client so SSR auth and SSR GraphQL always target the same internal backend. #PR-696

  • Sentry Lazy-Load Prevents Rollup Crash — The production Nitro build crashed on linux-x64 with a Rollup null-reference error caused by @sentry/tanstackstart-react being imported at the top level in analytics-init.tsx. Sentry is now loaded via a dynamic import() behind an import.meta.env.SSR guard, keeping it client-only. #PR-695

  • Vite 8 → Vite 7 Downgrade Fixes SSR Crash — Production SSR rendered blank pages (ERR_EMPTY_RESPONSE) because Vite 8's rolldown bundler duplicated React across CJS deps. Downgraded to Vite 7 (Rollup) which handles the interop correctly. #PR-693

  • Server-Side Auth Targeted Public URL — SSR session resolution used the app's public origin (AUTH_BASE_URL), which is unreachable from inside the container. Server-side auth now targets the backend directly via INTERNAL_API_URL/api/auth. #PR-692

  • Deterministic Docker Buildturbo prune produced a bun.lock that Bun couldn't parse, stalling Coolify deploys. Switched to a full-workspace build with bun install --frozen-lockfile for deterministic, network-light installs. #PR-691

♻️ Refactoring & Technical Improvements

  • pnpm → Bun Migration — The monorepo package manager was switched from pnpm to Bun, removing pnpm-lock.yaml and pnpm-workspace.yaml in favor of bun.lock. This unifies the toolchain and improves install performance across all workspaces. #PR-688

📦 Dependencies & Infrastructure

  • Bun Docker Build Fixes — Updated turbo in the prune step (2.5.8 → 2.9.16), dropped --frozen-lockfile in pruned stages, guarded prisma generate for web-only builds, and pinned esbuild to 0.28.0 to resolve version mismatches across all three Docker images (api, web, docs). #PR-689