← 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

Reactivating a removed user preserves their worker type

When you re-add a user who had previously been removed, their prior worker type is restored automatically instead of defaulting back to Time only. Employees come back as employees, invoice workers come back as invoice workers.

CSV user import supports worker types

The user import CSV now accepts an optional worker_type column. Values: employee, invoice_worker, time_only. Common aliases are normalised — invoice / invoiced / contractor map to invoice_worker; sessions_only / volunteer / unpaid map to time_only. Blank values preserve the existing worker type on update, so bulk re-imports never downgrade users who were already categorised.

Missing-info card prompts for invoice details

When an invoice worker is missing their company name, org/VAT number, or invoice reference, the Missing profile information card on the user page now flags those fields alongside the usual contact/address/ICE items. The worker-facing request email uses the same secure link as before — no login required to fill in what's missing.

Invoice workers • supplier details on the user profile

Invoice workers now have a dedicated Invoice details section on the user profile: company name, org/VAT number, and invoice reference. These fields only appear for invoice workers — payroll employees keep their Payment details card, and time-only users see neither. Switching a worker from one type to another no longer wipes the previous type's data; bank account stays for employees, invoice details stay for invoice workers, in case you switch back.

Worker types • Employee, Invoice worker, Time only

Users can now be categorised as one of three worker types instead of the old Employee yes/no. Employees are payroll staff (rate + bank account apply). Invoice workers are paid by invoice (rate optional, no bank account collected). Time only covers volunteers and attendance-only crew. The existing Employee flag is kept in sync automatically, so existing reports and filters continue to work. Registration forms can also create users as any of the three types.

Missing-info dashboard flags workers without payment details

Employees without a payment_account are now surfaced on the missing-info view so they can be chased before payroll export. A one-off backfill ran to catch existing gaps.

Projects • session filter covers all days and all months

The sessions-per-project view now defaults to all days rather than just today, and adds an "All months" option so a project's full history is one click away. Also fixed a filter binding bug that could error on month selection.

Forms • default project, auto-group, ICE contact relation, approval fix

Registration forms can carry a default project onto new users. New signups are auto-added to the form's linked group. The in-case-of-emergency section has a relation field. Fixed the approval dropdown and payment write path.

Signup flow • approval emails, reliability, clearer copy

Approval confirmation emails now send after the admin approves a signup. The approve flow runs in its own transaction so a flaky email cannot leave the registration half-saved. Copy tightened, and the logged-in assign handler now respects the form's require-approval setting.

Schedule overview • inline assign picker

The assign action on the schedule overview now opens an inline picker directly, rather than a button that opens a picker. Quick-assign rows also align with the assignees indent for a cleaner layout.

Managers can now approve sessions

Session approval — previously admin-only — is now available to managers by default.

Tighter access control for Contracts and Incidents

Access to the Contracts and Incidents modules now requires an explicit permission. Admins — or managers who already hold the module access themselves — can grant it to other managers from the user detail page. Nav links, dashboard cards, user-detail tabs, and attachment downloads for these modules are hidden and blocked for users without access.

Approvals list • mobile checkbox layout

Checkboxes no longer overlap names on the Approvals list on small screens, and the first column's padding now matches the rest of the workspace card-table system.

Schedule • managers can intentionally overbook

Managers can now manually assign workers to a shift that's already at capacity, with a soft warning and an overcap badge on the shift. Useful when you want a backup or a swap without splitting the shift.

Public shift signup • race condition resolved

Two workers grabbing the last seat at the same instant could both succeed, putting the shift over capacity. The signup flow now uses a transactional lock, with regression harnesses to keep it that way. Past shifts no longer appear in the signup picker.

Privacy, terms, and cookie policy refresh

Our legal pages have been updated with clearer transparency for B2B customers: named primary hosting (Hetzner, Helsinki, Finland), a named subprocessor list (including our email and analytics providers), honest international transfer wording with Standard Contractual Clauses where applicable, GDPR legal basis per processing purpose, a stronger security section, and a concrete table of the cookies we actually set. Available in English, Norwegian, Swedish, and Danish.

HR Cluster AS organisation number on all legal pages

The HR Cluster AS Norwegian org. number (937 565 690) is now printed on the Terms, Privacy, and Cookies pages in every supported language, replacing the earlier placeholder.

Safer migration tooling for admins

The migration runner is now CLI-only — no one can trigger a schema change by hitting a URL. Platform admins get a read-only schema status view under Admin → System, plus a pending-migration banner so deploys never miss a step.

Clockwork QR codes reuse a live token per shift

The QR page now returns the existing valid token for a given account, user, and shift instead of minting a new one on every page load. Scanning an older printout keeps working until the token actually expires or is revoked.

Schedule assignee rows • cleaner, mobile-first layout

Expanded shift rows and the assigned-users card on the shift detail page now share one grid pattern: name anchored left, time and group aligned consistently, and actions grouped on the right. Mobile layouts stack cleanly without horizontal scroll.

Schedule assign modal • tighter layout and small bug fix

The assignee row in the shift schedule is a little denser on wide screens, and a stray undefined-variable warning that could appear in the assign modal during approvals has been cleaned up.

Group shift CSV/PDF export 500 error

Exporting group shifts to CSV or PDF no longer errors out. The group-scoping query was missing a join that the export paths needed.

Norwegian: Sessions section renamed to Økter

The Sessions section in the Norwegian UI is now labelled Økter, matching how users actually refer to it in the field.

Duration labels translated into all supported languages

Hour and minute abbreviations in shift and session durations now localise: t and min for Norwegian and Danish, h and min for Swedish, matching the UI language instead of forcing English h/m.

Unified email template for crewlist and group-shift exports

Crewlist and group-shift emails now flow through the same layout as the rest of the transactional email system, and the Norwegian locale is respected so recipient-language delivery works end to end.