Operational and technical updates to the HR Cluster platform.
Types of changes
AddedNew functionality or modules.
UpdatedImprovements or changes to existing functionality.
CoreMajor architectural, platform-wide, or operational changes.
DeprecatedFeatures scheduled for removal.
RemovedFeatures or functionality removed.
FixedBug fixes and issue resolution.
SecuritySecurity improvements or vulnerability fixes.
2026
— continued
FixedMessagingLocalization
Transactional emails resolve language per recipient
All outbound mail — not just contracts — now picks language from the recipient's preference plus the account default, instead of the sending actor's session language. Closes a long-standing class of mis-localised notifications.
Technical focus: resolve_recipient_lang() • Per-recipient language resolution
UpdatedUI
Form interaction model unified across the workspace
Native browser confirm and alert dialogs replaced with in-app modals (Escape closes, focus returns to the trigger). Every form shows a submit loading state, and submitter values are preserved when validation fails.
SecuritySecurity
Security hardening pass across POST handlers, PIN entry, and signing tokens
Enforced CSRF on every POST endpoint, added per-user PIN throttling, and started logging IP plus user-agent on contract-signing and password-reset tokens. Mail attachments now fail closed when the file is missing, and elevated access is cleared automatically when a user is demoted.
Form submissions grouped by workflow state, reviewed in a dedicated modal
Submissions are bucketed by workflow stage (needs review, approved, rejected) instead of raw lifecycle states. Each opens in its own review modal, keeping context off the main list.
AddedWorkforce
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.
AddedWorkforce
Self-service area for workers • hours, profile, competence, contracts
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.
8 changes · 1 added · 5 updated · 2 fixed
Clockwork 2 · Workforce 2 · UI 2 · Scheduling 1 · Contracts 1 · Forms 1 · +1 more
FixedScheduling
Signup list filters out shifts the worker is already assigned to
Shifts already assigned to a crew member are filtered out of the public signup list, preventing double-assignment from a single signup session.
FixedWorkforce
Enabling Ops grants access to managers, not just admins
Activating the Ops platform on an account now correctly extends Ops access to managers — closing a permission gap that required a manual second step.
UpdatedUI
Module settings page surfaces platform attribution per module
The modules settings page shows which platform — Workforce or Ops — each module belongs to, making the scope of any toggle change immediately visible.
UpdatedClockworkUI
Session cards align time and task lines via mobile subgrid
Session cards on narrow viewports now keep the time and task fields aligned across all rows.
UpdatedMessaging
Radio channels gain mode and signal-type metadata; lists exportable
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.
UpdatedContracts
Voiding fully-signed contracts notifies the recipient
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.
UpdatedClockwork
GPS captured consistently across every clock-in/out flow
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.
AddedWorkforceForms
Food and allergies • dietary data collection module
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.
Users • preferred language no longer corrupted on save
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.
UpdatedContractsGroups
Groups • contract coverage table tidy-up
The contract coverage table on the group detail page no longer shows a redundant Details button; the row itself is the link.
UpdatedWorkforce
Users • import lives in Settings
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.
UpdatedUI
Projects • clearer hierarchy, no empty container rows
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.
UpdatedMessaging
Comms • phone numbers display as +47 12345678
Phone numbers on the Contacts tab and in the printable contact-list PDF now render in spaced international format for readability.
UpdatedInventoryLocations
Items moved into Ops
Items has been recategorised in the sidebar from Workforce into Ops, alongside Inventory and Locations.
FixedContractsInfrastructure
Contracts • emails go out in the recipient's language
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.
AddedContractsScheduling
Contracts • automated signing reminders
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.
AddedLocationsMessaging
Comms • Contacts and Radio Channels
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.
Messaging • group with subgroups no longer drops recipients
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.
UpdatedLocalization
Contacts • translated default list and tighter public layout
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.