featureintegrationdatabasegraphql

Changelog — March 26, 2026

Major studio mode release: introduces a full studio view with session, machine, and product management, along with Cal.com, Dropbox, Acuity, and Pennylane integrations.

✨ New Features

  • Studio Mode Switcher — Added a sidebar toggle to switch between postprod and studio modes. Navigation items are filtered dynamically based on the active mode, giving users a focused, context-aware UI. #329

  • Studio Session Management — Full session lifecycle in the studio view: list, detail, creation, event tracking, and Cal.com calendar sync. Studio bookings are now first-class entities with their own DB model and GraphQL resolvers. #329

  • Machine Management — New machines module with list and creation flows, support for timer fields, technician assignment, and pricing configuration. #329

  • Studio Product Management — Product catalog for studio with list and creation views, Pennylane sync for billing, and stock tracking. #329

  • Calendar Integration (Cal.com) — Dedicated calendar page powered by Cal.com integration, enabling appointment visibility directly in the studio view. #329

  • Dropbox Sync — New Dropbox sync service with import dialog and sync button UI. Enables direct asset import from Dropbox into the platform. #329

  • Acuity Appointments Integration — Added Acuity appointments integration for studio scheduling. #329

  • Pennylane Product Import — Import and sync hooks for Pennylane products, enabling financial data consistency between etouch studio and accounting. #329

♻️ Refactoring & Technical Improvements

  • GraphQL Schema & Resolvers — Updated schema and resolvers to cover all new studio entities (sessions, machines, products, time slots, session events). SDK types and Prisma client regenerated accordingly. #329

  • DB Migrations — Added migrations for sessions, machines, products, time_slots, and session_events tables to support the new studio data model. #329

  • Type Safety Fix — Fixed studioSessionTypeResolvers type annotation to correctly use Pick<Resolvers>, resolving a TypeScript inference issue. #329

📦 Dependencies & Infrastructure

By theodaguier