Ten report screens over 847 employees, where the design problem was never the charts — it was deciding who is allowed to see whom.
An attendance report for 847 people across six branches is easy to draw and almost impossible to trust. A manager needs their own team. An admin needs their department. A Super Admin needs the country. Give everyone the same screen and it is either useless to the manager or a surveillance tool for everyone else.
The build I inherited had one more problem: a left sidebar carrying ten report destinations, on screens where the report itself needs every pixel of width. Reports are wide. Sidebars are not negotiable real estate — they're just a habit.
So the work was a permission model with a visual grammar, and a shell that gets out of the report's way.
The obvious move is to hide the Location report from anyone who isn't a Super Admin. I kept it in the tab strip, greyed, with a padlock and a not-allowed cursor. An Admin who can't open it now knows it exists and who to ask — instead of a menu that silently rearranges itself per person and leaves everyone guessing what they're missing.
Overview, Attendance, Workforce, Analytics. Ten destinations is too many to scan flat, so the grouping does the work the removed sidebar used to — without eating 240px of report width.
Crimson Super Admin, blue Admin, violet Manager, green Employee — the same four colours on every avatar, chip and tier label, so you always know whose view you're in.
A toast confirms “Switched to Manager view” and the drill path resets. A silent scope change is how people misread a report and act on it.
This is the real prototype. Switch the role in the top bar and watch Location lock, open Hierarchy to drill from Admin to Manager to team, then click any person for the detail panel.
The original model had three states: present, absent, on leave. But of the 847 people, 67 are working from home, 38 are on client visits, 14 are travelling and 11 are at an event. Under three states, all 130 of them read as some flavour of “not here” — and a manager acts on that number. Ten states cost a bigger legend and settle the argument permanently.
Work From Home, Outdoor, Travelling and At Event total 130 people who are working. A three-state model files every one of them under absent, and the daily number a manager reads becomes wrong by 15% of headcount.
Each state carries a fixed background, text colour, border and dot — one token set, applied identically in the summary tiles, the table rows, the hierarchy cards and the detail panel. A status never looks like two different things in two places.
Ten tabs is one or two too many. Late & Absent is arguably a filtered state of the Attendance report, and Outdoor & Travel overlaps it too. I shipped them separately because each was a named ask from the brief — but a designer's job includes pushing back on a tab count, and I didn't push hard enough.
On a reporting product, permissions are the information architecture. Deciding who sees whom determined the navigation, the default drill depth, the colour system and the empty states — every visual decision downstream came from that one model.
Joining lifecycle with a field-level audit trail.