Pages
Teams & Users — Strip Portals

Source: qdash /teams — c67 portal study, 2026-08-15

A visual means the data it summarizes; a portal proves it. This page pushes past the axis study by making every mark a door: the metric switcher creeps back as an Auto lens the data drives, chips open into their people, every aggregate shows its receipts — including the seam where two sources disagree — and the roster and strip light each other up. qdash's honesty stance, made interactive: numbers you can open.

Grammar

When is a mark a door — six laws

1A mark opens what it depicts

The spend bar opens the identities that sum to it; a dot opens that person; "estimated" opens its formula; a lens tag opens its why. Never a generic details panel — the door matches the wall it's in.

2Hover previews, click commits

Preview never moves layout and is never required — every hover destination is also a click destination (touch parity). Commit may move layout and always writes URL state; a portal you can't link isn't one.

3Every aggregate carries its receipt

Opening a number shows its addends re-adding to it. Discrepancies are printed, not smoothed: "$4.02k attributed · $80 unresolved." Reconciliation is the interactive form of "estimated from list prices."

4Negative space is data, data is a door

The unfilled meter is the idle people — clickable. The "+21 more" residual is the largest aggregate on the row — it gets a chip, a bar, and a click. If a region encodes, it opens.

5The descent stops at real data

Sessions are the floor. A level the system can't back with records does not render — no per-team sparklines while the daily series is fleet-wide, not even greyed out.

6One portal open; Esc ascends one level

Opening a door closes the previous one — single-focus invariant. Esc walks back exactly one level (formula → tail → focus), so you always know your depth.

Live

The composed portal strip

214 people · 26 teams. Auto is the resting state — each chip shows the metric where that team has something to say, tagged with its lens and the named comparator that justifies it. Hover whispers, click commits: a chip opens into its people and its receipt, the roster below follows, and dots and rows highlight each other. Try: click Core-Banking, hover its dots; click the $4.1k*-style asterisk on ML-Infra; open the residual chip; Esc walks back out.

Teams

what the data finds notable
23% · 31 peoplespend
26 teams · $18.4k/30d · 74 of 214 running · 5 Crit open — hover a chip for its why, click to open it
Peopleworst first, fleet-wide — click a chip to filter
hover a row while its team is focused — the matching dot rings in the strip (and vice versa) · rows open the v8 person card
Mechanisms

The four portals, precisely

Auto — the data picks the lens

Each chip shows the metric where its team has something to say, tagged in small caps (four bar semantics coexist in one row — the tag is non-negotiable). Selection is deterministic: any Critical → Risk, always; then the largest named-comparator ratio; Spend as the degenerate default — when nothing is notable, Auto IS the baseline strip. Sticky across refreshes (a new lens must beat the incumbent by a margin, not a hair). No z-scores anywhere: "2.7× the fleet median" is a checkable sentence; "z=2.1, n=26" is statistics cosplay, and the brand forbids fake rigor more than it forbids missing features. Under Auto, membership itself is the briefing: chips are the teams with something to say, the residual is the archive.

Focus — attention allocates expressiveness

Click a chip and it expands horizontally into its people card (all five stats at once — inside one team, density is correct; per-team lens tabs were cut as switching nobody asked for). Siblings compress to quiet-chip form in the same row: the axis made dynamic — the focused thing is +3, everything else is −1. Focus and filter are the same gesture: the expanded chip is the header of the filtered roster below, and its dots open v8 person cards. Above ~12 members only stateful dots render, with "+N idle" as a clickable count.

Receipts — every number shows its work

The focused chip prints its reconciliation: addends re-adding to the headline figure. When sources disagree — the by_team unknown bucket vs the client rollup's unmapped set — the seam prints in amber instead of being smoothed away. That line is the most on-brand pixel on the page: honesty as arithmetic. "Estimated" gets a formula popover (list price × tokens, dated). The descent floor is sessions; nothing renders below the data.

The return door — views that light each other up

Hover a roster row and the matching dot rings in the strip; hover a dot and the row highlights. Nearly free (shared hover state, zero layout change) and the most portal-true idea here: it teaches the correspondence instead of captioning it. "felix IS the red dot" stops being a note in a design doc and becomes something you discover with your cursor. Generalizes beyond Teams: any two views of the same entity on a qdash page should highlight each other — a design-system pattern (future /document-pattern).

Lab

Stayed in the lab

The hover panel (peephole)

A ghost profile below the strip on hover: no commit, no URL, no touch story, and it repaints five times as you sweep the row. Demoted to the whisper line — a fixed-height sentence that previews what click will do. Hover is only allowed to whisper.

Per-chip lens tabs

Tabs inside the focused card, switching one team's metric. Inside a focused team there is room for all five metrics at once — the +1 stat-chip failure (kills scanning) only applies across teams. Switching for switching's sake; cut.

Recursive in-chip decomposition

The purest reading of "every number is a door" — and a tree view in a matchbox. By level two it rebuilds the roster and the v8 person card that already exist one scroll below. Survives as two laws (receipts, floor) and one popover instead of a component.

Z-scores

"Payments deviates σ=2.1" on n=26 teams is noise wearing a lab coat. Named comparators only: "2.7× the fleet median $67," "the fleet is 74 of 214." Every claim on the strip must be checkable by a human with the receipt line.

Ship

What graduates, at checkpoint approval

1
Auto as the sixth tab, default — ?teamsBy=auto · lens tags on chips · deterministic selection with Risk precedence + stickiness · membership = notable + residual under Auto
2
The focus gesture — extends v7's chip-click-filter — expansion is the filtered roster's header; quiet-chip compression for siblings; Esc ascends
3
Receipt + seam line — reconciliation under the focused chip; the by_team vs teamRollups() discrepancy printed in amber; estimated-formula popover unconditionally
4
The return door — shared hover state between strip dots and roster rows; then /document-pattern it — any two views of one entity light each other up
5
The residual chip — "N teams · nothing notable · $X" with bar participation; opens the tail (where the matrix treatment belongs, sortable)
The checkpoint's strip question is now three-way: lensed baseline vs people-cards vs this composed portal. One sentence for the argument: 2 decides what the strip says, 3 decides how it opens, 1 only whispers what 3 will do, and 4 is the law they all obey.

Qpoint Brand Style Guide