v0.9.4

  • Slot picker redesign — the slot picker now shows the full day grid including already-booked times, greyed out and crossed through; Shift+click on desktop or long-press on mobile lets you force-pick a busy slot (highlighted amber) with a tooltip and legend explaining the override
  • Configurations translated — configuration screen titles, descriptions, and select option labels now follow the app language; config definitions also return a new short localized title alongside the long description
  • Dashboard widget labels translated — analytics metric titles and descriptions on dashboard widgets now switch language instantly with the app locale; stale English strings baked into existing dashboard layouts were cleaned up and labels are rehydrated on every read
  • Locale-aware date formatting — dates across the app (grid cells, event modal, cash shift details, upcoming visits widget) now follow the selected language; dates in the current year hide the year for cleaner layout; tooltip dates on grid cells respect the user's timezone instead of a hardcoded one
  • Customer search by social link — pasting a full Instagram, Facebook, Telegram, or WhatsApp URL into customer search now matches the stored handle; plain handles continue to work as before
  • Configuration descriptions polish — rewrote payment methods and shift times descriptions that were exposing raw schema details, so they now read as normal product copy
  • Added missing translations on the customer card statistics block (Total Visits, Visit Rate, Total Spent, Avg. Spent, Last Visit, Visited, Skipped, Planned) and the Media section
  • Added missing translations across the event modal, slot picker, and Telegram QR strings, with Russian plural handling for "expires in"
  • Fixed available slots request sending yesterday's date for users in timezones ahead of UTC (both in-app slot picker and public booking widget)
  • Fixed TopbarTabs accidentally submitting the parent form when clicked
  • Fixed the current event's own occupation appearing as busy when editing it in the slot picker

Internal

  • Migrated media delivery to our custom CDN for private media, significantly faster than the previous handler and with caching support that makes repeat retrievals lightning fast