A denser, sharper surface for counselors managing a real caseload. Same data as the overview, presented as a working tool rather than a dashboard.
The student product is deliberately soft and playful. A counselor showing this to a principal needs the opposite. The console applies a separate visual layer, tighter radii, flatter surfaces, denser type, neutral colour, real data tables, while reusing the same components underneath, so both products stay in one design system.
Sortable and filterable, with these columns:
Any row expands into the full picture: the per-category meters, every weakness with its evidence and explanation, and the raw numbers the old columns used to carry (GPA, colleges, essays, recs asked). Sort by name, readiness, Δwk, risk or last-active. Filter by cohort, by risk level, or by “Weak in” a category. The legacy flags, no safety school, thin list, recs missing, missing GPA, live on in the flag dropdown with their thresholds unchanged; the risk levels absorbed their tiles, not their filters. And the weekly brief reads the same roster as a narrative: who improved, who declined, who needs intervention.
Tag students with the groups you actually think in, first-generation, ED applicant, needs full aid, athlete recruit, arts portfolio, IEP/504, at risk. Six colours, custom names, and eight suggested tags to start from. Filter the roster by any of them.
Select any number of students, pick an opportunity from the library's next 120 days of deadlines, and push it to all of them as a dated reminder. It prefills the message and the link; you edit before sending. Each lands on the student's dashboard as a counselor task.
This is the feature that replaces the all-staff email nobody reads.
A private to-do list for the counselor, optionally linked to a specific student and due date. Students never see it. It exists because the roster tells you what to do and there was nowhere to write down that you did it.
Upload a roster export from Scoir, Naviance or a spreadsheet. Students are matched by email; GPA, GPA scale, class year, class rank, class size and school name are filled in where your export has them. Existing student-entered values are preserved when a column is absent.
Column names are matched loosely, so all of these work:
email, emailAddress, studentEmail
gpa, cumulativeGPA, weightedGPA
gradYear, graduationYear, classYear, classOf
rank, classRank
classSize, cohortSizeThe import reports how many students it updated and how many rows had no matching account.
This reads an exported file, it is not a live Scoir API connection. A real-time sync requires a partner agreement and per-district credentials from Scoir. The importer is built so that a live integration can replace the file step without changing anything downstream.
Video walkthroughs of the console live at /schools/tutorials, alongside these written docs. The list is defined in src/data/tutorials.ts: add an entry with a YouTube id and it appears. An entry without one renders as “coming soon” rather than a broken player, so the page can ship before the videos exist.
Embeds use youtube-nocookie.com. A counselor watching a tutorial should not be tracked into an advertising profile for doing their job.
Filed from a student's page in the console. A transcript is the school's record of the student, so students cannot upload one themselves and cannot see or download the copy you file. It does not appear in their document vault. Roster membership is the authorization check on upload, download and delete alike.