featurebugfixrefactorperformancetooling

Changelog — April 2, 2026

Major mobile app release with complete HeroUI Native migration, full session flows, and significant web refactoring. Several bug fixes for authentication, metrics, and CI tooling.

✨ New Features

  • Mobile App — Complete Feature Set — Full mobile application delivered with profile screens, CRUD operations (products, clients, customers), session flows with live machine timers, consumable management, and technician assignment. Includes language switching (en/fr/es via ActionSheetIOS), dark/light/system theme persistence, and filter chips on studio sub-pages. #PR-358 #PR-354

  • Mobile — Avatars on Entity Lists — Added heroui-native Avatar components with image + initials fallback across all entity list screens (users, clients, customers, home search). #PR-358

  • GraphQL — Server-side Metrics Overview — New metricsOverview query performs COUNT/SUM aggregations server-side, replacing client-side filtering of up to 1000 records. Dashboard layout now pre-fetches studios for super admins. #PR-351

🐛 Bug Fixes

  • Authentication — Better Auth Hardening — Upgraded better-auth from beta (1.3.10-beta.6) to stable (1.5.6). Added Redis-backed session storage, rate limiting on auth endpoints, explicit session expiration, cached platform admin check, and RGPD-compliant user deletion. #PR-358 #PR-354

  • Metrics — Infinite Refetch Loop — Fixed a React Query loop on metricsOverview: stabilized input object reference with useMemo, added auth guard in resolver (returns empty metrics for unauthenticated requests), and disabled automatic retry on error. #PR-357

  • Studios — Incorrect Total Count — The organizations query returns all org types, but the hook was filtering for STUDIO only. totalCount from pageInfo was counting all orgs instead of the filtered result. Now uses the filtered row count. #PR-358

  • Web Dashboard — Hydration Mismatch — Fixed SSR/client mismatch on clients, studio, and guidelines pages by using isPending instead of isLoading to ensure consistent skeleton fallback rendering. #PR-355 #PR-357

  • Mobile — HeroUI Native Setup — Resolved Reanimated invalid color crash caused by custom HSL overrides conflicting with HeroUI's oklch variables. Aligned provider setup with the official heroui-native-example reference. #PR-358

  • Mobile — Metro Config for pnpm — Fixed module resolution for heroui-native and uniwind in pnpm monorepo — extraNodeModules was insufficient due to .pnpm/ hashed paths. Simplified to let withUniwindConfig handle resolution. #PR-358

  • Mobile — Broken Snapshot Test — Removed a ThemedText snapshot test that imported a non-existent ../ui/text component. Added --passWithNoTests flag to avoid CI failure with empty test suites. #PR-354

  • CI / Codegen — Removed Prettier from afterAllFileWrite hook in codegen config (project now uses Biome for formatting). Fixed docs app lint by migrating from next lint to biome check, and excluded .source/ auto-generated directory from Biome checks. #PR-358 #PR-354

  • Deps — @types/react Lockfile Pin — Pinned @types/react to 19.1.9 via pnpm override to fix a broken turbo prune lockfile that referenced @types/react@19.2.14 without a corresponding entry, blocking Docker API builds. v1.24.1

♻️ Refactoring & Technical Improvements

  • Web — Large Component Split — Broke down 4 oversized files into focused, reusable modules: project-details-content.tsx (-50%), project-media-detail-dialog.tsx (-46%), project-media-gallery.utils.ts (-62%), session-calendar.tsx (-61%). Extracted useProjectDownloads, useProjectAssetActions, useEditDialog, useTableSearch hooks; added EntityRow (replacing 10 identical row components); deleted 10 dead files (-2074 LOC) and 12 phantom barrel exports. #PR-351

  • Mobile — HeroUI Native Migration — Replaced all @gluestack-ui/* packages and NativeWind with heroui-native and Uniwind (Tailwind v4). Rewrote 40+ UI component wrappers, migrated the theme system from RGB CSS vars to HSL semantic tokens, and deleted 20+ unused provider files (~70k lines removed). #PR-359 #PR-358

  • Tooling — ESLint → Biome Migration — Replaced ESLint with Biome for linting and formatting across all packages in the monorepo. #PR-351

📦 Dependencies & Infrastructure

  • GraphQL Performance — Reduced all first: 1000 pagination args to first: 100 (actual server cap). Reduced sync polling intervals (Dropbox 1s→3s, FTP 3s→5s, Pennylane 2s→5s). Normalized staleTime (global search 30s→5min, organizations 60s→5min). Created shared useOrganizationContext() hook eliminating viewer→studios→data waterfall in 30+ components. #PR-351

  • Releasesv1.23.0, v1.23.1, v1.23.2, v1.24.0, v1.24.1 published via semantic-release.

  • Note — PR #359 (HeroUI migration) was merged and subsequently reverted on the same day due to a dependency issue (@types/react lockfile conflict). The fix was applied separately and merged as part of v1.24.1.

By Théo Daguier