Changelog

Changelog#

All notable changes to Shiftavo live here. This is the technical record. For user-facing summaries, see What’s new.

The format is based on Keep a Changelog, and this project adheres to semantic versioning.

1.0.0 — 2026-05-09#

First public release.

Added#

  • Multi-tenant foundation: per-tenant data isolation enforced at the database row level; tenant switcher in the header for users with multiple memberships.

  • Account lifecycle: sign-up (creates user + tenant + Owner membership atomically), email verification, password reset, change password, manage email addresses, invitations with a Set password landing page.

  • Org model: locations (with timezone, work rule, default flag), areas, positions (with color, headcount min/target/max, required skills), skills (certification flag, verification flag, expiry), employment types (with default per-weekday hours), and the MLP (Member–Location–Position) matrix with bulk-generate and per-grouping toggles.

  • People management: list, create, update, deactivate, soft-delete, invite/re-invite, and a detail page with skills and availability summary.

  • Shift calendar with 14 view modes (month, week-timeline, week-blocks, day-timeline, day-blocks, three list views, and six roster views — day/week/month × timeline/blocks).

  • Calendar interactions: drag-create, click-edit, Ctrl/Cmd+click open in new tab, drag-move, drag-resize, Alt+drag duplicate, Alt+resize split (resource view) and person picker (week/day view), Alt+click and Alt+lasso multi-select, bulk edit and bulk delete from selection.

  • Calendar filters and sidebars: filter by location, area, position, person, status; people-hours sidebar; auto-saved view, date, template, and filter state per user.

  • Shift CRUD with locked-period guards, area HTMX cascade on location change, and an eligible-people validator with badges for blocking errors and warnings.

  • Shift recurrence: DAILY / WEEKLY / MONTHLY / YEARLY with interval, weekly BYDAY, monthly day-of-month or weekday-pattern, and never / count / until end conditions. Date-change modals (simple, two-choice, daily-incompatible). THIS / FOLLOWING / ALL edit and delete scopes. DST-safe child generation in the location’s timezone.

  • Shift list (Roster): paginated, sortable, filterable, with bulk select-on-page / select-all-matching, bulk edit, bulk delete, and per-row checkbox.

  • Shift assignment: open from form or modal, MLP-filtered candidate pool, per-candidate validation badges, quick-assign and quick-unassign from the shift block.

  • Publish horizon: bulk-publish every accessible draft up to a cutoff datetime, optionally scoped to one location; cascades to draft assignments unless locked.

  • Schedule templates (week and month) with apply-to-range, undo last apply, dedicated template calendar, and session-persisted selection.

  • Coverage grid: hour-by-hour assigned-vs-required per location/area/position with severity tooltips that separate qualified-but-unassigned from MLP-eligible-but-skill-gapped people. Mode A/B availability gating.

  • Availability calendar (manager) and My availability (self-service) with the same view modes as the shift calendar.

  • Availability list and CRUD: recurring (same RRULE builder as shifts), one-time, unavailable, and leave-typed blocks; THIS / FOLLOWING / ALL scope chooser; create-from-employment-type generator that collapses identical day-patterns into single BYDAY rules.

  • Time tracking: timesheet list with filters, sort, and bulk select; edit clock-in/out; submit / unsubmit (single + bulk); approve / unapprove (single + bulk) with auto-attendance for missing clock times; locked-period UX with HTTP 423 on edit/submit attempts; non-manager 403 gate.

  • Time compensation: ledger view, manual adjustments, auto-accrual on submission of ArG 17b-eligible night shifts, auto-reversal on unsubmit / unapprove / shift deletion.

  • Leave policies: tracking modes (balance, spell, unlimited); aggregation scope; service-year anchor; flat or tiered ceiling with editable tier ladder; EFZG §3 linking window; deduction method (fixed vs average); accrual method (none, monthly, hourly); entitlement, max balance, and carry-over rules.

  • Leave requests: list, detail, review form with approve / decline / revoke gated by current status; EFZG-prior-spell linking checkbox on approval; delete restricted to PENDING / DECLINED.

  • Leave transactions: read-only ledger of grants, accruals, bookings, reversals, carry-overs, and expiries.

  • Holidays: per-country, per-state auto-seeding tagged AUTO; manual entries and edited auto-entries are preserved on re-seed; multiplier override and half-day flag.

  • Work rules: identity, daily / weekly / rest constraints, two daily and two weekly overtime tiers, consecutive-day overtime, Sunday / holiday / night premiums, premium stacking mode, and a Swiss night-work time-compensation block (CH only).

  • Break rules: identity (name, code, priority), eligibility (min shift length, duration, paid, default-cannot-leave-workplace), waivers, trigger (offset or fixed time).

  • Company periods: create, start (initial leave grants prorated by service date), close (carry-over + next-period grants + lock time entries inside the closed range).

  • Budgets per period and optional location, feeding the forecast-vs-actual report.

  • 12 reports: Period overview, Hours summary, Timesheet, Attendance, Overtime / Compliance, Schedule coverage, Payroll summary, Payroll timesheet, Labor cost, Multi-location, Forecast vs actual, My earnings. Each ships CSV, XLSX, and PDF exporters.

  • Payroll summary defaults to the current bi-weekly cycle computed from the tenant payroll anchor date; chips for This bi-weekly and Last bi-weekly; payroll-vendor CSV schema.

  • Self-service surfaces for shift workers: schedule, shifts list, availability calendar, my availability, my earnings, personal settings, log out.

  • Personal settings: language, region, timezone, first-day-of-week, slot_min_time / slot_max_time, person-display, world-clock default, tooltip and shift validation strictness, MLP grouping defaults.

  • Tenant settings (Owner / Admin): country, default currency, workweek start day, payroll frequency and anchor date, attendance grace minutes, leave period type, sick-leave defaults and tier ladder.

  • Authentication via OAuth code exchange between Shiftavo MCP and the web app, JWT cookies (access + refresh), proactive and reactive token refresh with per-session refresh lock, coordinated logout across both surfaces.

  • i18n: locale activation per request, region-driven date / time / number / currency formatting (CH, DE, AT, US, GB, FR, IT), shifts rendered in the location timezone with a viewer-timezone toggle.

  • Background tasks (CLI, idempotent, --tenant and --dry-run flags): periodic leave accrual, carry-over expiry, availability-computed extension, holiday extension, recurring-shift extension.

  • Billing: Stripe Checkout, Billing Portal, and webhook handling for subscription lifecycle (trial, grace, suspension, cancellation).