Human Resources module shell with five route-backed tabs

Featurekamo-internal
Shipped
August 5, 2026 at 6:19 PM UTC
Author
kamo
Commit
37b0aa7

Adds /hr with the accounts-page chrome in its route-backed form (the same one /marketing already uses): a layout owning the gradient hero and underlined tab bar, an index that lands on the first reachable tab, and a page each for Overview, Attendance, Legal & Compliance, Training, and Resources. Two gates, both required. organization.isHrs — the HRS toggle under /settings/account?tab=apps — bounces the route home when the app is off, since with it off /hr is not a place that exists for the org. With the app on, the eleven existing ServiceType.HRS rights decide: a new hasAnyHrRight compound gate joins **************** and each tab carries an OR-group predicate (HR has no single view right the way Marketing does). Tabs the member fails are hidden from the bar and refused on direct URL entry. Registers 'hr' in the nav registry above Settings, defaulting to the primary rail; the home-launchpad card and command-palette entry follow from registry membership. Registry order alone only governs first-run members, though — orderZone appended never-arranged ids, so anyone who had ever touched their nav would have got HR *below* Settings. mergeCanonicalOrder now inserts such ids at the position the registry asks for and useHomeLayout uses the same rule, so the declared placement holds for existing members and every future option too. Tab bodies are placeholders: there is no HR data model anywhere in the backend yet (no employee, attendance, payroll, training or compliance entity in SecurityService, APIService or the shared library), so each tab names itself and what it will hold. Spec in docs/superpowers/specs.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing