Changelog — April 10, 2026
A massive release day shipping v1.30.4 through v1.31.7 — featuring a new retouched-version guard for client validation, mobile app UX overhaul, watermark concurrency fixes, preview deployment auth hardening, and broad TypeScript/lint cleanup.
Release
v1.31.7✨ New Features
-
Retouched version guard (API) — The hard guard that blocks transitioning a project to CLIENT_VALIDATION when any selected asset lacks a retouched version has been re-enabled. This prevents incomplete deliverables from reaching client review.
#PR-368 -
Mobile app UX overhaul — Comprehensive improvements to the etouch mobile app: sheet scrolling fixes, header action menus for session management, consumable add/remove flows, Plus buttons across all screens, and new ColoramaFormSheet. Replace iOS-only ActionSheetIOS with cross-platform BaseSheet components and add StepperSheet for multi-step wizards.
#PR-368 -
Image format negotiation (API/Web) — The API now reads the
Acceptheader to automatically serve AVIF (~50% smaller) or WebP (~30% smaller) based on browser capabilities. Next.js image optimization configured with AVIF/WebP formats and a 7-day cache TTL.#PR-368 -
Deep health check endpoint —
/healthznow pings the database and Redis connection, returning a 503 degraded status when either is unavailable instead of always returning 200.#PR-368
🐛 Bug Fixes
-
Watermark logic & concurrency —
shouldApplyWatermark()now correctly returns true only for unauthenticated or client-only viewers; studio/retoucher/admin users receive unwatermarked images.getWatermarkedImage()now properly acquires the transform semaphore, and load shedding returns 503 withRetry-Afterinstead of silently serving wrong content.#PR-376 -
Upload queue null guards — Replaced non-null assertions with safe null guards for
uploadQueueRefacross three code paths to satisfy Biome linting and improve runtime safety.#PR-375 -
Vercel preview auth — Added
*.vercel.appwildcard totrustedOriginsso Better Auth accepts requests from preview deployments.#PR-374 -
Password reset on preview — Fixed the auth proxy endpoint path from
forget-passwordtorequest-password-reset(Better Auth v1.5.6). Also fixed relativeredirectTopaths and origin rewriting so reset email links work correctly from preview domains.#PR-370,#PR-372,#PR-373 -
Auth proxy rewrite conflict — Removed the
/api/authrewrite innext.config.mjsso the Route Handler proxy takes over correctly.v1.30.6 -
TypeScript Control type assertions — Fixed
Controltype assertions in create-guideline, create-project, create-retoucher, create-studio, and session-to-project dialogs.v1.30.4 -
Biome lint formatting — Applied
biome check --writeacross all packages to fix line wrapping, import ordering, and trailing newlines that were causing CI failures.#PR-369
♻️ Refactoring & Technical Improvements
-
Remove
ignoreBuildErrors— Fixed all TypeScript errors inapps/websotsc --noEmitpasses cleanly, then removedtypescript.ignoreBuildErrorsfromnext.config.mjs. Includes SDK type fixes, Zod v4 migration, GraphQL codegen type alignment, and proper null handling.#PR-368 -
Structured logging — Replaced
console.*calls with pino logger instripe-client.tsandannotation-pdf-generator.tsfor better observability with structured fields.#PR-368 -
Remove unsafe
as anycasts — Added optionalidfield toProjectAccessInfotype and usedreadonly string[]tuples forArray.includes()instead of casting values toany.#PR-368 -
Zod validation on webhook route — Replaced unsafe
ascast with Zod schema validation on the workflow webhook payload.#PR-368 -
Sharp corners UI enforcement — Removed all rounded corners from dashboard donut chart, sync buttons, FTP import dialog, and team dropdown per project design constraints.
#PR-368 -
Mobile consistency refactor — Created
useThemeColors()anduseStackScreenOptions()hooks, replaced hardcoded French time slot labels with i18n, harmonizedplaceholderTextColor, converted inline styles to Tailwind, and removed dead code.#PR-368
📦 Dependencies & Infrastructure
-
Docker build optimization — Added
--ignore-scriptstopnpm installin Docker to skip heavy postinstall scripts, then explicitly runsprisma generateafterward for faster, more reliable builds.#PR-368 -
10 releases published — v1.30.4 through v1.31.7 released via automated semantic-release pipeline.