Retour aux nouveautés
par Théo Daguier
Changelog — July 10, 2026
Major client duplicate-detection & merge workflow, per-organization FTP multi-server model, consolidated user settings, and centralized error handling.
#feature#bugfix#refactor#infrastructure
Release
v1.57.0✨ New Features
- Client duplicate-detection & merge workflow — Introduced a shared client-matching module (SIREN, email, corporate domain, website, phone signals) powering a new
mergeOrganizationsmutation andsuspectedDuplicateClientsquery. Studios now see a "potential duplicates" banner on the client list and can merge clients via a dialog on the client detail sheet. The same resolver is used by the e-do reservation-to-client sync, preventing duplicate creation at the source.#778 - Duplicate-client comparison sheet — Replaced the single-review duplicate banner with a collapsible todolist that opens a side-by-side comparison sheet, letting studios pick a survivor and merge using identifying fields (SIREN, phone, website, createdAt) surfaced from the API.
#782 - Per-organization FTP multi-server model — Reworked the FTP integration from a single install-based config into a first-class
FtpServermodel owned by studio or retoucher orgs. A project-level resolver prefers the assigned retoucher's default server before falling back to the studio's. Includes a new Apps-page FTP manager UI with full CRUD, server test mutations, and proper access control.#781
🐛 Bug Fixes
- Prevented client re-creation on deleted bookings — The e-do booking sync worker no longer re-creates a client that a studio intentionally deleted; it skips client creation on subsequent syncs of an already-imported reservation.
#782 - Fixed client search lag — Memoized client table rows and lazy-mounted the row action menu, resolving search lag across ~2000 client rows.
#782 - Avatar upload hover/focus fix — The avatar-upload hover/focus reveal now keys off
:focus-visibleinstead offocus-within, avoiding a flash on sheet auto-focus.#777
♻️ Refactoring & Technical Improvements
- Centralized error-message handling — Introduced a shared
useErrorMessage()/getErrorMessage()layer to eliminate scattered error formatting logic across the app.#779 - Consolidated profile & security settings — Merged the standalone Réglages › Profil tab into the entity-sheet-based user detail view (with a self-editable account section). Extracted a reusable
PasswordInput(show/hide toggle) anduseSignOuthook to deduplicate logic across auth forms and the sidebar dropdown.#777 - FTP hardening — Added filename sanitization, size caps, per-call import limits, and idempotent re-imports across all FTP sync/import code paths.
#781
📦 Dependencies & Infrastructure
- PR #784 opened — Follow-up PR to add a missing
ClientPricingmigration, further refine the compare sheet, and address remaining search lag and website-client recreation edge cases. Currently open and pending review.#784