Per-module access management lives on the module itself
Every module settings page now lists who has access and exposes a typeahead to grant or revoke without leaving the module. Removes the round-trip through global user settings.
Every module settings page now lists who has access and exposes a typeahead to grant or revoke without leaving the module. Removes the round-trip through global user settings.
Workers get a personal area at /me with their hours dashboard, an editable profile, a competence wallet for adding qualifications and proof, and a contract archive. Reduces day-to-day questions reaching account managers.
Shifts already assigned to a crew member are filtered out of the public signup list, preventing double-assignment from a single signup session.
Activating the Ops platform on an account now correctly extends Ops access to managers — closing a permission gap that required a manual second step.
The modules settings page shows which platform — Workforce or Ops — each module belongs to, making the scope of any toggle change immediately visible.
Session cards on narrow viewports now use a two-column subgrid so time and task fields stay aligned across all rows.
Radio channels now carry mode (analogue, digital, DMR, TETRA) and signal type (simplex, duplex). Public contact and channel lists are downloadable as CSV or PDF on a per-list basis.
Fully-signed contracts can now be voided. The recipient receives a notification email when their contract is voided, regardless of opt-out settings — voiding is not optional communication.
Location now logs whether the worker clocks via QR code or a manager clocks them in from the backend. GPS capture timeout is also more reliable on slow connections.
Collect dietary preferences and allergy information from crew. Send request emails individually or in bulk via Groups, track responses, and export a summary. Access grants are per-user so visibility stays controlled.
Editing a user could in rare cases write the literal string "Array" into their preferred language field. The user form now validates the active language before saving.
The contract coverage table on the group detail page no longer shows a redundant Details button; the row itself is the link.
The Import button on the Users page now goes to the canonical Settings → Import wizard, with the old standalone import URL redirecting there. The button is also hidden on mobile, since the wizard is desktop-first.
Project lists now show "Parent / Child" for projects nested inside a container, and container projects with no children are no longer shown as empty rows.
Phone numbers on the Contacts tab and in the printable contact-list PDF now render in spaced international format for readability.
Items has been recategorised in the sidebar from Workforce into Ops, alongside Inventory and Locations.
Contract emails (sent, viewed, signed, declined, reminders) now resolve language per recipient using their preferred language and the account default as fallback, instead of using the sender's language. Cron-triggered reminders translate correctly for each individual recipient even when no admin is logged in.
Recipients with unsigned contracts are now reminded automatically by email. A standard reminder fires 5 days after sending and again 3 days before the recipient's first scheduled shift. An urgent reminder fires when a shift is due within 24 hours and the contract is still unsigned. Each stage only triggers once per recipient, so the same person never gets the same nudge twice.
A new Comms section in the sidebar groups two modules. Contacts (per-account contact lists for emergency, suppliers, crew leads) has moved here from its previous location. Radio Channels is brand new — track which crew or department is on which frequency / channel during the event, with per-channel notes and a printable overview.
Composing a message to a group now correctly resolves recipients via the leaf-only group assignment. Users in subgroups under the selected group are no longer missed when the message is sent.
The default Contacts list seeded when the module is first enabled is now created in the account's default language. The public contact-list page also renders denser cards on small screens.
Tokens for personal info verification and registration links now stay valid for 72 hours instead of 24, giving people more time to act on the email before the link expires.
Importing contacts from a CSV used to throw a server error when groups were involved. The import handler has been corrected to match the leaf-only group schema and now imports cleanly.
A shared modal system now powers most dialogs across Users, Items, Contacts, and the verify flow. Pressing Escape closes the open modal, the page underneath stops scrolling while a modal is open, and clicking outside the dialog no longer dismisses it — only the X, Cancel, or Escape close a modal. Behaviour is now consistent across the workspace.
Spacing, padding, and footer layout are now consistent across notice modals in the admin area, so add and edit dialogs frame their content the same way as the rest of the workspace.