Sidebar • Workforce and Ops platform switcher
The platform dropdown in the sidebar is now a segmented Workforce / Ops pill. One tap to swap between the two platforms; the visible module list updates to match.
— continued
The platform dropdown in the sidebar is now a segmented Workforce / Ops pill. One tap to swap between the two platforms; the visible module list updates to match.
Pricing tiers (now Core, Pro, Enterprise — Basic was renamed to Core) and the published changelog are available as JSON at /api/public/pricing and /api/public/changelog. Both respond with proper ETag and 304 Not Modified handling, are stateless (no session, no cookies), and can be consumed by the marketing site or external integrators.
A public status page at status.hrcluster.app shows current uptime and recent incidents for the platform.
13 changes · 2 added · 9 updated · 2 security
The public contract-signing page and the public missing-info request page now require a CSRF token tied to the page's one-time URL token. These pages are accessed via tokenised links without a login session, so they needed their own CSRF mechanism — matching the protection the rest of the app has had.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
Session approval — previously admin-only — is now available to managers by default.
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.
3 changes · 1 updated · 2 fixed
Scheduling 2 · Workforce 2 · Clockwork 1
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.
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.
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.
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.
4 changes · 3 updated · 1 core
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.
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.
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.
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.
13 changes · 3 added · 8 updated · 2 fixed
Scheduling 5 · Clockwork 3 · Contracts 1 · Groups 1 · UI 1
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.