v0.9.0

Storage & Security

  • Private S3 media storage — full support for private S3-compatible storage for media files; all uploaded photos and attachments are stored with server-side encryption for secure, access-controlled delivery

Sales & Payments

  • Record payment from sale — new "Record Payment" button in the sale view lets staff process full or partial payments, with running totals of paid and remaining amounts; supports split payments across multiple payment methods
  • Gift cards (Certificates) — staff can create gift cards with a specified amount and optional expiration date; each card gets a unique shareable code and can be redeemed as a payment method during checkout, with balance tracking
  • Sale status badges — sales grid now shows colored status badges (Draft, Partially Paid, Paid, Refunded) for quick visual reference
  • Sold By — each sale now tracks which staff member made the sale
  • Payment history in sale modal — sale detail view shows a timeline of all payments made against that sale
  • Editable service price in sale — clicking the total for a service in the sale modal lets you set a custom price with inline editing
  • Improved sale modal UX — removed unnecessary Quantity column, hide edit/delete actions in view mode, soft-delete with strikethrough and Restore button instead of instant removal
  • Fixed: deleting items from a sale now works reliably on every click
  • Fixed: removing a service from a sale and saving now correctly persists the change
  • Fixed: sale ID copy button no longer accidentally opens the sale modal

Calendar & Events

  • Note indicator on calendar events — events with notes now show a small pencil icon on the calendar grid across month, week, and day views
  • Improved manual date/time picker — date and time are now separate fields with Today/Tomorrow quick-select buttons; start and end times shown side by side
  • Default duration in booking config — widget configuration now includes a default duration field that stays editable regardless of booking mode
  • Fixed: event booking no longer fails when available time slots cannot be retrieved — fixed the root cause of inability to generate slots
  • Fixed: customer visit history now updates immediately when an event is deleted or its status changes

Customer & Media

  • Auto-assign media to customers — photos uploaded to an event are automatically linked to all associated customers; customer profile now shows a thumbnail gallery with fullscreen viewing
  • Clickable social media icons — social media fields now have branded clickable icons that open the corresponding profile in a new tab
  • Inactive staff visual distinction — inactive staff references now appear faded with a red "inactive" label across the app
  • Fixed: birthday datepicker in customer modal no longer gets clipped by the modal boundary

Configuration & Settings

  • Shift times in configuration — shift time definitions (morning, full day, afternoon, evening) are now managed through Settings instead of being hardcoded
  • Multilingual toggle — new setting to enable/disable multilingual support; when off, the language selector and languages column are hidden throughout the app
  • Config grouping from API — configuration sections now use server-provided group definitions, fixing items appearing under wrong tabs
  • Conditional config visibility — settings that depend on other toggles now show/hide automatically
  • Fixed: payment method type (cash/card) dropdown now saves correctly instead of always reverting to the first option
  • Fixed: newly created payment methods now appear immediately without requiring a page refresh
  • Fixed: language preference no longer resets to English after returning to the app

Staff & Salary

  • Shift-based salary rule — new compensation type that awards a bonus after every N completed shifts
  • Service category assignment in modal — category detail modal now shows assigned services with toggle controls for adding/removing services

Bug Fixes

  • Fixed sales grid crashing when an event type reference was missing
  • Fixed private API endpoints being called before user authentication on the login page
  • Fixed unauthenticated bookmark/locale fetch causing 401 errors on login
  • Fixed asymmetric text clipping in the service category performance widget
  • Fixed demo data creating sales for cancelled events
  • Fixed missing Russian translations for inventory milestones menu, important notes block, and service booking module
  • Fixed confirmation modal buttons missing background in dark mode

Other

  • Security improvements (credential handling, session management)
  • Refactored slot picker components
  • Modal content-list navigation pattern implemented
  • UI polish: cursor-tracking glow effect on modal circle buttons, improved config label/description layout