← HR Cluster

Changelog

Operational and technical updates to the HR Cluster platform.

Types of changes
Added New functionality or modules.
Updated Improvements or changes to existing functionality.
Core Major architectural, platform-wide, or operational changes.
Deprecated Features scheduled for removal.
Removed Features or functionality removed.
Fixed Bug fixes and issue resolution.
Security Security improvements or vulnerability fixes.

2026

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.

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.

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.

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.

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.

Session cards align time and task lines via mobile subgrid

Session cards on narrow viewports now use a two-column subgrid so time and task fields stay aligned across all rows.

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.

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.

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.

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.

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.

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.

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.

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.

Items moved into Ops

Items has been recategorised in the sidebar from Workforce into Ops, alongside Inventory and Locations.

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.

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.

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.

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.

User requests • token validity extended to 72 hours

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.

Contacts • CSV import no longer 500s

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.

Modals • Escape closes, page locks, no accidental dismiss

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.

Admin modal polish

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.