A recruitment desk for a 4,100-person health group: nine destinations over one application record, where the stepper is the same component on the queue, the board and the record. What it settles is whether a hiring product can hold a gate without inventing a status for it.
Preview interactive design
A recruiter carries two seats’ worth of pipeline and a hiring manager who wants a start date. The constraint that shapes every screen is the pre-employment gate: two references, a verified right to work, and the register the seat asks for still in date — or nobody starts.
01The screens →Three of the five at applied have never been opened. Every row is judged against its own stage’s allowance, so a day at applied is later than a week at checks.
unread is the absence of a timestamp02ScoreA panel decision needs two scorecards from two different people. One card is not a decision, so the move to checks is offered, disabled, and states the count it is still waiting on.
the average is never stored03ProveNothing reaches offer until the checks are back. Which register a seat asks for is the requisition’s business rather than the candidate’s — so a ward clerk owes none, and the screen shows no gap.
a check nobody owes is absent, not failedTwenty-three registered routes: nine sidebar destinations, twelve off the nav, two for auth. Neither an interview nor an offer has a record route — an interview is a row and a dialog, and an offer is a field on the application it belongs to.
02The status set →The queue promises a number the sidebar badge also shows, so both call one act-ability predicate over one array. The order is how far over its own stage’s allowance a row is, and the date it arrived only breaks ties.

One record for one person, reached from the desk, the queue, the ladder and the board alike. The stepper is the spine: a completed step cites the sub-record that completed it, and a step with nothing to cite says what it is for.

Two offers, ordered by expiry rather than by value. Each row says where the salary sits in the band it came from, and names what the candidate asked for where the offer came in under it. It will not record a hire nobody has accepted.

One row per live application, three checks each, urgent first — a blocker at offer stops something, the same blocker at applied stops nothing yet. Urgency is the stage, never the count, and the row with the live action on it is never greyed out.

A requisition is seats, not a hire: three nurse seats, nine live applications, none accepted. It holds which register the seat requires, and the advert tab counts what each channel actually produced rather than quietly folding in the rest.

The value everybody looks for here is stalled, and it is not in the set. Lateness is days in the current stage against that stage’s own allowance, computed at render — as are unread, offer expiring and registration outstanding. A record carries one stage and any number of derived flags.
03The awkward cases →Each of these is a record in the fixture, reachable in the running template.
04The audit →Recession was keyed on “clear to start” while urgency was keyed on “has a blocker”, and one record satisfied both: a registration in date today, renewing in seventeen days. The only row the badge counted was styled as work nobody can act on. Clear to start is now the plain negation of the three outstanding flags.
05Back to the top →
Reckon
One hiring process from ward clerk to systems engineer, with the gate in the same place on every one. What differs is the register, the band and who sits on the panel.