Round 1 explored one source and three layouts. These are four different kinds of object.
The Pass, Quiet Emphasis and Sequence all came from a printed airline ticket. They differ in how a page is arranged, not in what kind of thing it is. Round 2 changes the object: what we borrow from, what the marks encode, how time is shaped, and how much air the page gets.
Tokens from the UX_tools remote at 2f75211. Fixture data throughout: six fictional schools, invented numbers. The diverging ramp in section B is new, proposed here and validated in section E.
The school's own paper
We borrowed from an airline. District people read report cards, attendance registers and bell schedules fluently every day, and we never borrowed from any of them. This is the same data as round 1, shaped like a document they already know how to read.
Roosevelt Elementary
The rest of the district, same shape
Every card is the same four subjects in the same order, so a reader who learns one card can read all six. That is the report card's real trick, and it is the same trick as the boarding pass's repeated label-over-value band.
Nearest thing that already exists: Frost/explorations/concepts/evidence-engine.html, a board-memo composer that writes prose over data with numbered citation chips. It is the only place in Frost that lets the product speak in sentences, and it is a concept, not a component.
Where it shines: zero learning curve, and it carries a sentence. The comment line is the only place in either round where the product says something in words a principal would repeat out loud. Where it strains: it is a snapshot, not an instrument. There is no way to ask a follow-up question of a report card, and four subjects is a hard ceiling before it stops being one. What it would take in Frost: a document masthead recipe, the five-rung descriptive rating scale with its marks, and the comment block. The rating scale needs the diverging ramp from section B.
Compared with what
Every chart in round 1 answers "how much?". None answers "compared to what?", which is the question a superintendent actually asks. Four forms do, and all four need a diverging ramp that Frost does not have.
The demand is already on record: the Analytics+ Frost mockup carries a School comparison item in its rail that opens nothing. It has been an unfulfilled promise since that page was built.
1 · Bullet graphs, for a KPI with a target
The stat tile says 197 minutes. The bullet says 197 against a 180 target, inside the range the district usually sits in.
Table view
| Measure | This month | Target | District typical range |
|---|---|---|---|
| Time spent per user | 197 min | 180 min | 150–210 min |
| Logins per user | 24 | 20 | 16–26 |
| Resources used | 59 | 65 | 45–80 |
| Licenses activated | 87% | 95% | 80–98% |
2 · A slopegraph, for what changed
Roosevelt and Lincoln swapped places with Washington. Two schools rose, three held, one fell.
Table view
| School | 2025–26 | 2026–27 | Change |
|---|
A slopegraph is the only form here that shows rank change as a shape. Crossing lines are the finding. Where two schools land too close to label, the label steps aside and a hairline leader keeps it tied to its dot, which is the alternative to stacking labels and detaching them from their lines.
3 · Dot plot against the district
Distance from the line is the story.
Table view
| School | Daily per user | vs district |
|---|
4 · Diverging bars
The same data as round 1's heat table, centered on the district.
Table view
| School | vs district |
|---|
Where it shines: it answers the question people actually bring. A diverging bar centered on the district makes "who is unlike everyone else" a shape rather than a calculation. Where it strains: it needs a defensible benchmark, and a district average is a weak one when an elementary school and a high school sit in the same column. The honest version compares like with like, which means the benchmark is per grade band, and that is a data question before it is a design one. What it would take in Frost: the diverging ramp in section E, a bullet-graph recipe, and a rule that a diverging scale never uses status colors.
The school year
Round 1's cost chart says 2022 through 2026, which are generic periods. School time has shape: marking periods, breaks, testing windows, class periods. A chart that knows the calendar can tell a Thanksgiving dip from a problem.
1 · The year as a register
Usage tracks the calendar, not the month. The two quiet stretches are winter break and spring break. The dip in early October is not.
The one rule that makes this work: a day with no school is blank, not zero. A zero would say the district stopped using its tools. The dashed cell says nothing happened because nothing was supposed to.
Table view, by month
| Month | School days | Avg logins per day |
|---|
2 · The year ribbon
Where we are, and what is coming. Breaks are knocked out; testing windows are marked because usage always spikes into them.
Round 1's five-year cost chart becomes five of these stacked, which shows that the 2026 jump happened in one marking period rather than across a year.
3 · The bell schedule
Period 3 and period 6 carry the load. First period is nearly empty, which is worth asking a principal about.
Where it shines: it removes false alarms. Half of "why did usage drop?" questions are answered by a calendar, and none of our round 1 charts could answer them. Where it strains: it needs calendar data, and we only have part of it. The component library already ships thisSchoolYearPreset() and lastSchoolYearPreset(), so the system knows where a school year starts and ends. It does not know a district's marking periods, breaks, testing windows or bell schedule, and those are exactly what these three displays run on. A wrong calendar is worse than none. What it would take in Frost: a calendar-heatmap recipe with a mandatory "no data day" treatment, the ribbon, and the period grid, all three reusing round 1's sequential ramp. There is a head start on the third: cl-shad-lib already has a day-of-week usage heatmap that shades one hue by alpha and carries a faded array for weekends and holidays. That faded array is the same idea as "no school is blank", already shipped, just never promoted into Frost or given a legend.
The dense end
Quiet Emphasis is generous on purpose. This is its opposite, built to argue with it: the school comparison as an instrument for someone who lives in this screen all day and already knows what every column means.
| School | Type | Users | Daily/user | vs dist | Logins | Res | Lic used | Unused $ | Flag |
|---|
Rows are 36px with 13px text, the figure the tables exploration proposes. The head stays at 44px because shrinking it costs the sort target. In-row buttons are forfeited, which is what makes 36px legal at all.
Where it shines: six schools become eighteen without scrolling, and the analyst stops paging. Every column is comparable because everything is tabular and nothing is decorated. Where it strains: it is unreadable to the audience that matters most. A superintendent opening this once a quarter gets a wall. It is also a Frost exception, not a Frost variant: the 44px row and the card recipe are system defaults, and a density mode has to be scoped and written down or it leaks. What it would take in Frost: exactly the two tokens the tables exploration already proposes, with its scoping rules attached, plus a decision that density is a user setting rather than a screen's choice.
The diverging ramp
Frost has no diverging ramp, and sections A, B and D all need one. This is the proposal, built from hues already in the system and validated rather than eyeballed.
The ramp
Seven steps. Cool pole is Frost blue. Warm pole is the --tenant-mark hue family at H17 to H18, picked because it is native to Frost and is not a status color. Using --destructive for "below average" would say broken, and below average is not broken.
Midpoint is Frost's own --muted, a neutral gray, because a diverging midpoint has to read as "nothing". The dataviz rule that blue to aqua fails is why the warm pole is warm: the poles must read as opposite, not merely different.
This argues with a position already on record. The tables exploration rules that "green and gold stay out entirely: every bar is one blue --bar on a --bar-soft track". This ramp keeps the green and gold half of that rule, since terracotta is neither, but it does break the one-hue half. The case for breaking it: that rule was written for magnitude bars, where a second hue would be decoration. On a deviation scale the second hue is the data, because a one-hue scale cannot show which side of the benchmark a school sits on without adding a second channel anyway.
Validator output
Two candidates were re-stepped rather than accepted: the light blue arm started at #8DBDE2 and measured 2.00:1, just under the 2:1 floor, and the dark warm arm started at #793B20 at 1.92:1. Both moved one step.
One caveat stated plainly: running the pole pair through the categorical checker also reports a lightness-band failure on the dark blue pole. That check exists so categorical slots share a common lightness band, which is the opposite of what a diverging ramp wants. Separation and contrast are the checks that apply, and both pass.
The residual risk. Warm still reads as "bad" to many people no matter what the legend says. The mitigations here are that the legend uses no valence words, the annotation sentences never say worse, and the scale is always labeled with the benchmark it diverges from. If testing shows people read terracotta as failure anyway, the fallback is a single-hue scale with the benchmark drawn as a line, which loses the shape but keeps the honesty.
What to carry forward
Two of the four are ready to become rules. One is blocked on data we may not have. One should stay an argument rather than become a screen.
Compared with what
The biggest gap in round 1. It changes what the data says rather than how it looks, and the ramp is validated and ready. Start with diverging bars in the school comparison and the bullet graph on KPIs that have a target.
The school's own paper
The whole report card may be too much, but the comment line should ship regardless of direction. One plain sentence naming the finding and its dollar value is the most valuable thing on either page, and it works inside Quiet Emphasis unchanged.
The school year
Right idea, dependent on calendar data. Find out whether ClassLink can know a district's breaks and marking periods. If it can, this is the highest-value addition on the page. If it cannot, build nothing: a wrong calendar is worse than none.
The dense end
Its job was to test whether Quiet Emphasis is right, and it did: generous wins for the audience that opens Analytics+ occasionally, which is most of them. Do not ship it as a screen. Do let it settle the density question, which is a user setting and needs the two tokens the tables exploration already proposes.
Candidate rules not accepted · for discussion
Diverging scale
Two opposite hues plus a neutral gray midpoint, never a status color at either pole, and never a hue at the midpoint. Always labeled with the benchmark it diverges from. The legend carries no valence words, because "different from the district" is a fact and "worse" is a judgment.
--div-b1..3, --div-mid, --div-a1..3.Benchmark marks
A bullet graph carries actual, target and the usual range. The range bands are neutral grays, never a stoplight. The target is a single dark tick, not a filled region, so it cannot be mistaken for a value.
No data is not zero
A period with no school, no data or no license gets its own visible treatment and its own legend entry. It is never rendered as a low value on the scale. This applies to calendar cells, table cells and chart gaps alike.
The comment line
Every summary surface carries one plain sentence that names the finding, its size, and what it would take to act. Written at a reading level a parent could follow, which is the bar state report cards mostly miss.
Row density is a setting, and it is not the Density control
Compact is 36px rows with 13px text, body only, head unchanged, no in-row buttons. It belongs to the reader, not to the screen, so it is chosen once and applies everywhere. It is a table row-height token and must be named apart from the library's shipped Density presets, which rescale the spacing ramp across eight components and move nothing in an app.
Frost/explorations/tables/DECISIONS.md Part 1 §2 unchanged, adds the setting-not-screen decision, and adds the naming split.Compare like with like
A benchmark is only honest between comparable units. An elementary school and a high school do not share a baseline, so the default comparison group is the grade band, and the label always says which group it is.
Open questions
- Can ClassLink know a district's calendar: marking periods, breaks, bell schedule? Section C depends entirely on it.
- Is the comparison group the district, the grade band, or a peer set of similar districts?
- Does the report card framing survive contact with a principal, or does any rating read as a grade no matter how it is worded?
- Is row density a user setting, a screen choice, or not offered at all? And does it get a name that cannot be mistaken for the library's shipped Density presets?
- Carried over from round 1 and still open: what "Total" means in the school comparison, and whether to re-step the categorical palette.
Research behind this page
- ExcelinEd, School report cards and the My School Information Design Challenge, which ran the same kind of redesign exercise on school data that the boarding-pass exercise ran on tickets.
- Data Quality Campaign via The 74, most state report cards are easier to find but still written at a college reading level. The source of the comment-line reading-level rule.
- National PTA, A state guide to building online school report cards.
- Tableau, What is a bullet graph, and the bullet graph definition: one primary measure, a comparative measure, and qualitative ranges.
- Better Evaluation, dot plots, bullet charts and slopegraphs; slope chart.
- Vignelli's Unigrid specifications for the National Park Service: one grid that many units fill their own way, with a shared band carrying identity. The closest published precedent for the Frost suite's own problem, and an ancestor of round 1's ink band.
- Internal prior art checked before building, so nothing here is reinvented:
Frost/explorations/concepts/evidence-engine.htmlfor prose over data,cl-shad-lib's day-of-week heatmap for the faded no-data treatment, the library's school-year date presets, the shipped Density presets, and the dead School comparison rail item inFrost/suite/analytics-plus-frost.html. Confirmed absent everywhere: any diverging ramp, slopegraph, dot plot, bullet graph, calendar-grid heatmap, map or school-artifact idiom. Also:Frost/explorations/tables/DECISIONS.mdPart 1 §2 for the density tokens and §6 for the inline bar; UX_tools_contract.scssat2f75211for every token; the dataviz skill's form, color, mark and anti-pattern references and its palette validator.
Roosevelt gets more out of its licenses than any school in the district. Two subscriptions have never been opened, and dropping them would save $7,400 without touching anything teachers use.