DEMO — synthetic data. Higher Education business model (private university, single admissions cycle): the Fall 2026 cycle from open (2025-08-01) through the summer melt window, as of 2026-08-14. Built around the cycle rather than the calendar — an as-of date control rewinds the whole dashboard to any day of the cycle, and every stage is compared against the prior cycle at the same point. Class-target pacing with a projected final class, a cycle stage board (Inquiry → Application Started → Submitted → Complete → Admitted → Deposited → Enrolled) carrying completion rate, admit rate, yield and melt, a pacing curve against Fall 2025, yield drivers (campus visit, discount band, type, residency), a territory and counselor table against target, net tuition revenue and discount rate, program demand versus seats, recruitment spend by source with cost per application and per deposit, an incomplete-application work queue, and page-level attribution traced through to enrolled students. Global filters for type (Prospective Student / Parent / Transfer), territory, program, residency and source. Rows are generated by clients/demo/data-gen/higher-ed.mjs — no real client data.
clients/demo/data-gen/higher-ed.mjs. It models a fictional private university recruiting
one entering class, and is here to show what the dashboard does — not to report anyone's real results.Admissions does not run on a calendar, it runs on a cycle. One class is recruited over roughly thirteen months, against a fixed number of seats and a fixed reply date, and then the whole thing starts again. Three consequences shape every screen here:
The slider at the top is not a date filter — it does not narrow a window. It rewinds the entire cycle to a single morning and shows what the office would have seen on that day: the stage counts that had happened by then, the work still sitting in the queue, the pacing against last year. Drag it back to January and the deposits vanish because they had not been paid yet. The marks underneath jump to the milestones — deadlines, decision release, May 1, the start of term.
The stage bars use a square-root scale. The funnel spans 11,000 inquiries down to a few hundred seats; on a linear axis every stage past the application is an invisible sliver, and a log axis misrepresents the distances. Square root keeps the ordering honest and the small stages readable.
Projected class = net deposits now × (prior cycle's final ÷ prior cycle at this same day). It is a pacing model, not a forecast: it assumes this cycle finishes the way the last one did. It knows nothing about a changed aid strategy, a new competitor, or a bad melt summer. Early in the cycle, when the denominator is tiny, it swings wildly — that is a property of the method, not a bug.
Filters apply to applicants and inquiries alike, so the top of the funnel moves with everything else. The class target follows the Territory filter — look at one region and it is judged against that region's own goal.
One honest limitation: the prior-cycle comparison is stored as daily stage counts split by type only, not by the full detail. So the Type filter moves it, and the Territory, Program, Residency and Source filters do not. That is a deliberate trade for payload size, and it is the kind of thing worth knowing before quoting a number off a filtered view.
Published tuition and fees are $52,400. Discount rate is institutional aid as a share of that — the number a board and a bond rating look at. It moves against yield: every extra point of discount buys students and gives away revenue, which is the tension the yield and revenue sections exist to show. Recruitment spend is cycle-to-date: only months that have fully elapsed by the selected day are counted, so an early as-of date does not divide a year of budget by six weeks of results.
| Residency | Students | % of Class | Avg Award | Discount | Net Revenue | % of Revenue |
|---|
| Page | Volume | Inquiries | Apps | Students | Inq→App | Quality | Inq→Student |
|---|