Counselor.software · Early access · the engines are built, the caseload product is not finished

Five engines, one consent gate, and a name that redacts before it decides.

A counselor's day is not one screen. It is a check-in that might be nothing or might be a crisis, a discipline referral with a student's name attached, a college list with a deadline next week, and a risk tier that moved overnight — and every one of those crosses a different consent line before anyone should be allowed to read it.

This is five small, tested engines that already sit on the one student graph: a SEL check-in scorer whose crisis item can never be averaged away, a referral state machine that refuses an illegal move, an early-warning risk tier over attendance and behavior and grades, a discipline consent gate with a wall a consented adviser still cannot cross, and a college-and-career tracker whose transcript send rides the platform's real credential issuer. Each one is its own module. None of them is a caseload database pretending to be a person.

And there is no clinician here, no filed mandated-reporter report, and — today — no login built just for a counselor. Those are the first three rows of our own comparison table below, and the category wins all three.

10engines registered and reachable behind a fail-closed consent gate — a check-in scorer, a referral state machine, a risk-tier engine, an IEP handoff, a discipline gate, and a college-and-career tracker among them
156test blocks measured by grep across the twelve domain-module test files this page cites — a call-site count, not a claimed pass/fail run
0clinicians employed or licensed by this product. The teletherapy-partner lane is config, born disabled, with nothing wired
10named gaps — a counselor role, an ASCA-aligned report, a filed mandated-reporter act, and more — listed under “built, not live” rather than implied to already work

The honest frame

What this is, and what it is not.

School counseling software has a specific way of being dangerous: it is asked to hold the most sensitive record a school keeps — a child's mental-health check-in, a discipline note that might name a victim, a family's consent choice about who gets to know any of it — and it is usually built by widening a gradebook or a roster tool that was never designed to redact anything by default. So this product started from the redaction, not the dashboard.

It is a consent-gated workflow layer. A SEL check-in, a wellness referral, an early-warning risk tier, a discipline record, and a college-counseling request all already exist as rows on the platform's one student graph. This product is the set of engines that score, transition, and gate those rows — each one pure, each one tested in isolation, each one behind the SAME two-part consent chokepoint: a resolvable consent context, and a currently-granted disclosure basis, checked in that order, fail-closed on either miss.

It is not a caseload database. There is no single, persisted “my students” table. What a counselor sees is assembled live from three sources — open wellness referrals, Tier 2/3 assignments, and open counseling requests — and each is independently consent-checked on the way out, every time it is read.

It is not a clinical or therapy-delivery platform. No clinician is employed or licensed here. The teletherapy-partner configuration exists in the code and is born disabled; an escalation records the intent to hand a student to licensed care and the licensure constraint that applies, and stops there.

It does not file a mandated-reporter report. A critical check-in item raises a crisis signal and hard-escalates a referral. Filing the actual legal report to a state child-welfare authority is a human act this software does not perform, on purpose — detection is not the compliance act.

And it is early access. The engines below are written, tested in isolation, and reachable through a registered route. The surface around them — a dedicated counselor account role, a wired clinical partner, a published ASCA-aligned report — is not finished, and we would rather you read that here than infer it from a quiet pilot.

Reachable today

Ten engines a registered handler actually calls.

“Reachable” is a source-layer claim: a registered Fastify route calls this function. It does not mean a tenant has switched the module on, and it does not mean a counselor role exists to log in and use it — the roles section below is exact about that gap.

Daily check-in and screening scoring

The check-in scorer — a structured signal in, a concern band out, and a crisis item that cannot be averaged away

A daily check-in or a structured screening instrument reports a 0-to-4 mood score, a count of distinct distress indicators, and an optional 0-to-100 SEL competency rating — never free-text narrative. Those fold into a single 0-to-100 concern score, which maps to a closed band: ok, monitor, elevated, or urgent. One field overrides the whole composite: a critical-item flag — a self-harm, harm-to-others, or abuse disclosure item — hard-escalates the check-in to urgent regardless of the arithmetic, because a crisis answer sitting next to three calm ones should never average out to “monitor.” The engine reads structured signal only, runs in the tenant’s own VPC, and calls no cloud model and no in-VPC model either — it is a deterministic, SME-configurable rubric, not a diagnosis.

domain/sel-checkin.ts The band is a triage signal and may be written even for a suppressed student; the narrative is never serialized to one.

Referral to support workflow

The wellness referral state machine — a flag becomes a documented support, never a dead survey

A concerning check-in opens a referral in the open state. From there the only legal moves are the five this engine names: triage (an internal review, no consent boundary crossed), begin_support (an active in-school counseling support — crosses the disclosure boundary), escalate (a clinical-partner or crisis handoff — also crosses it), and resolve. A crisis fast-path lets open jump straight to escalated without forcing an intermediate triage step. The two boundary-crossing transitions are marked requiresConsent: true in the engine’s own return value, so the route verifies the directory_info consent basis before applying either — and an illegal transition (skipping a state, reopening a resolved referral) is refused outright. A client can never drive an arbitrary state.

domain/wellness-referral-flow.ts triage and resolve are internal FERPA education-record actions; begin_support and escalate are consent-gated, fail-closed.

The wellness PII emit gate

One consent chokepoint, three fail-closed arms, and a narrative that is never returned when redacted

Every emit of a student’s wellness name or narrative routes through one function with three arms, checked in order. No resolvable consent context for the student: suppressed. The master-30 do_not_publish kill-switch, read directly off the record: suppressed, on every purpose, no exceptions. The directory_info disclosure basis — opt-in, default-deny, expiry included — not currently granted: suppressed. When any arm fires, the score or tier may still be written and audited as a non-emit triage signal, but the narrative comes back as null, not as a redacted placeholder that still leaks a phrase or two. A prior version of this gate also suppressed on a declined or lapsed school-photo permission — a picture-day form deciding whether a counselor could read a crisis note. That arm is gone; a photo decision no longer governs a health record.

routes/wellness-sel.ts (isWellnessEmitSuppressed, wellnessNarrativeEmit) Fail-closed by construction: an unresolvable context suppresses rather than defaulting to visible.

Early-warning risk score and tier

Attendance, behavior, and grades fold into one composite risk score — and a tier, not a verdict

Attendance rate, a count of behavior incidents, a count of failing grades, and — where available — a GPA and a normalized benchmark-assessment percentile combine into a single 0-to-100 risk score, which maps to Tier 1 (universal), Tier 2 (targeted), or Tier 3 (intensive) against a published cut-point table. That table is stated, in the code’s own comment, as a defensible default, not a per-state truth — a state may mandate different cut points or a different non-response window, and every decision carries an engineVersion stamp so a threshold change is attributable rather than silent. The engine assigns a tier and opens the referral flow below it; it does not invent the intervention content a tier would prescribe — that library is partner-curated and not shipped here.

domain/mtss-tiering.ts A risk-PII emit through this engine is consent-gated the same way the wellness surface is; reps are walled out entirely.

Referral, evaluation, and the IEP handoff

Referred to eligible under a closed law, and the terminal state opens a real special-education plan

A student flagged for evaluation moves through referredeval_consentevaluating → a terminal eligible or not_eligible, and no other order is legal. Two of those transitions stamp an IDEA-clock anchor — eval_consent_received when parental consent for the evaluation is captured, and eligibility_determined at the terminal state, either way. When the determination is eligible, the same transition returns opensIepPlan: true, and the route opens a real special-education plan on the platform’s IEP spine. This module is the handoff into that product, not a second copy of it — the flag becomes a plan on the same student record, never a parallel file.

domain/mtss-referral-flow.ts The clock anchors are legal-timeline evidence; a client cannot skip a state to fabricate an earlier consent date.

College and career counseling

The per-college application ladder, the counseling request queue, and an 8-milestone readiness dashboard

Each college on a student’s list carries its own status — considering, applying, submitted, admitted, waitlisted, denied, deferred, enrolled, or withdrawn — and its own decision plan (early decision, early action, regular, rolling, priority). A counseling request is its own tracked object: a transcript send, a recommendation, a counselor letter, a mid-year report, or a final report, each moving through requested → in_progress → sent, declined, or cancelled. Readiness is tracked as eight named milestones — FAFSA filed, SAT/ACT taken, college list built, essay drafted, recommendations secured, applications submitted, financial aid reviewed, decision finalized — rolled up into the dashboard a counselor actually opens each morning. Access runs through a route-local gate that admits an admin role or the adviser/co-adviser staff role and hard-denies any minor-held session outright.

routes/college-career.ts, domain/college-career.ts Every read and write routes through resolveCounselingConsent (directory_info, fail-closed) before a name reaches the caller.

Recommendation and transcript send

The send request rides the platform’s own transcript issuer — it never reimplements credentialing

A transcript-send or recommendation request does not mint its own document. It builds a descriptor and hands it to the platform’s shipped, key-gated transcript issuer, which is the single place a credential is actually signed anywhere in this system. An unsigned result — no signing key configured — is honest-off: the request stays in_progress with no issuer reference, rather than a fabricated confirmation. We never mint or fake a credential on this surface, and there is no second, weaker issuance path a counseling request could take instead of the real one.

domain/college-career.ts (buildTranscriptIssuanceRequest, trackFromIssuanceResult) A send that cannot be signed is tracked honestly as pending, not silently marked sent.

SAT / ACT / AP score intake

College-admissions scores land on the readiness dashboard — deliberately never on the risk tier

An inbound SAT, ACT, or AP score is parsed against its own closed range (SAT 200-800 per section or 400-1600 total; ACT 1-36; AP 1-5) and, once valid, marks the sat_act_taken readiness milestone. A score outside its exam’s valid range, an unknown exam, or an exam its vendor does not offer is rejected with a reason, never coerced onto the record — a wrong college score would misadvise a real student. And it is kept structurally separate from the early-warning risk engine on purpose: a college-admissions test is not a risk signal, and this module does not route into the same re-tier a benchmark assessment does, so a strong or weak SAT can never accidentally move a child’s MTSS tier.

domain/college-test-intake.ts The inbound feed reuses the platform's existing signed webhook receiver rather than a second, unaudited intake path.

The crisis and mandated-reporter signal

This raises and records a crisis signal. It does not file the legal report that follows one.

A critical-item check-in trips a shared detection path that also feeds the schoolwide safety system, and a wellness referral’s escalate transition hands off toward a clinical partner or the crisis path. Both are named here in the terms the engine itself uses: detection is not the compliance act. This surface raises the signal and records that it was raised; the mandated-reporter filing to a state child-welfare authority is a human, legal act this product does not perform. The clinical-partner handoff is config that is born disabled — no teletherapy partner is wired, an escalation would record the intended handoff and its student-location licensure constraint, and nothing here books a session or fabricates a clinical service.

domain/sel-checkin.ts (trippedCrisisPath), domain/wellness-referral-flow.ts (escalate) A raised signal is recorded, audited, and handed to a human. It is never auto-resolved and never auto-filed.

The state machine, in full

A referral cannot be pushed into a state it never legally reaches.

Every wellness referral this product opens walks the same closed table — the figure below is the actual transition map, not a simplified retelling of it. Two transitions cross the sensitive-disclosure boundary and are marked as such by the engine itself; the route is required to verify consent before applying either one. Everything else is an internal, FERPA-education-record review that does not need a fresh consent check because it remains role-restricted to the school employees already authorized to see the referral — an access-control claim, not an infrastructure-residency promise.

State → next legal transitionNext state
opena concerning check-in or a staff reporttriage
triagedan adviser/counselor reviewed it — internal, no disclosure yetbegin_support
supportcrosses the disclosure boundary: an active counseling supportescalate · consent required
escalatedclinical-partner or crisis handoff; also crosses the boundaryresolve · consent required
resolvedterminal — support concluded or not warranted

Mirrors the engine's own closed transition table. Two of the five transitions — begin_support and escalate — cross the sensitive-disclosure boundary and are marked requiresConsent: true in the engine's own return value, so the route verifies the directory_info consent basis is granted before applying either one, fail-closed. An illegal move — skipping a state, reopening a resolved referral — is refused before anything is written.

Not one saved list

The worklist is assembled, not stored.

Ask this product for “my caseload” today and you get three live queries, not one saved table — and each is independently redacted before it reaches a screen. We describe it this way on purpose rather than imply a persisted case-management record that does not exist yet.

1

Open wellness referrals

Every referral not yet in the resolved state, read fresh through the wellness emit gate on each request — a lapsed consent grant removes a student from the visible list the next time it loads, not the next time someone remembers to check.

2

Tier 2 / Tier 3 assignments

Students whose composite risk score currently maps to a targeted or intensive tier, drawn from the same engine that scored them — not a separately maintained roster that can drift from the score behind it.

3

Open counseling requests

Transcript sends, recommendations, and reports still in requested or in_progress, filtered through the same requireCounselor gate and the counseling PII emit chokepoint as every other read on this surface.

Nothing above is a second copy of the data. Each card is a live filter over rows that already exist on the student graph for other reasons — the check-in that opened the referral, the attendance and behavior counts the tier engine reads, the counseling request a family or student initiated. A worklist assembled from live, independently-gated sources cannot silently include a student whose consent lapsed an hour ago.

The line we will not cross

Detection is not the compliance act.

A self-harm, harm-to-others, or abuse-disclosure item on a check-in hard-escalates the whole check-in to the urgent band, regardless of every other answer — it is not averaged with three calm responses into “monitor.” A wellness referral in any state can fast-path directly to escalated on that same signal, skipping the intermediate triage step a lower-urgency referral would go through.

What happens after that signal is raised is where this product draws a hard, deliberate line. It raises the signal. It records that it was raised, with an audit trail. It does not file the mandated-reporter report a raised signal may legally require, and it does not book a session with a clinician. Both are treated as human acts every time — the first because a legal filing to a child-welfare authority carries consequences a piece of software should not decide alone, the second because this product does not employ or license a clinician to book with.

The clinical-partner handoff is real code, and it is honestly incomplete: the configuration exists, it is born disabled, and an escalation transition would record the intended partner and the constraint that the partner must be licensed in the student's own state — not the school's. Until a partner is actually wired, an escalation stops at that record, not at a scheduled session.

A building-wide event — a lockdown, an evacuation, a shelter-in-place — is out of scope for this product entirely and is handled by a separate, schoolwide incident-command and reunification system a wellness escalation can hand off toward. That system has its own honest gaps worth naming here: no first-responder or 911-CAD data-share connector exists, and no reunification e-signature finalizer exists. Both return a clear refusal rather than a fabricated confirmation.

The Naviance-class surface

College and career readiness, tracked against eight named milestones.

Every college on a student's list carries its own nine-state application status and its own decision plan, so a family can see “submitted, early action” for one school and “considering, regular” for another on the same page rather than one flattened status for the whole list. A counseling request — a transcript send, a recommendation, a counselor letter, a mid-year report, a final report — is tracked the same deliberate way, through requested, in_progress, sent, declined, or cancelled, and a send that cannot be signed by the platform's real transcript issuer stays honestly in_progress rather than reporting a confirmation nothing actually signed.

1FAFSA filed
2SAT/ACT taken
3College list built
4Essay drafted
5Recommendations secured
6Applications submitted
7Financial aid reviewed
8Decision finalized

Inbound SAT, ACT, and AP scores mark the “SAT/ACT taken” milestone through a parser that rejects an out-of-range or unknown-exam score with a reason rather than coerce it onto the record — and that parser is structurally separate from the early-warning risk-tier engine, so a college-admissions score can never move a student's MTSS tier.

Named precisely, because it matters

Who can actually open these records.

There is no “counselor” value anywhere in the role model this product runs on. Access to college-career counseling records is protected by a route-local gate that admits a school or district admin, or a staff member holding the adviser or co-adviser role — the same role the platform's student-publications system (yearbook, newspaper) grants a faculty adviser. A minor-held session — a student, or a student staffer such as a senior ambassador or a student playwright — is denied outright, deny-first, regardless of any other role field, after an earlier version of this gate let exactly that kind of session fall through.

Wellness and discipline records apply the same underlying consent chokepoint but do not carry the adviser-role assumption — they gate on the student's consent status and, for a sensitive discipline incident, on an explicit elevated-read clearance rather than on which staff role a reader holds. A commissioned account representative (the platform's rep role) is walled off every one of these surfaces entirely, at the database policy layer, not only the application check.

In practice today, a district provisioning a counselor's access assigns them an existing role rather than a purpose-built one. We say that plainly rather than let “requireCounselor” — the actual function name in the code — imply a login only a counselor can hold.

Built, and honestly not live

Ten things this page could have quietly implied and did not.

Three different kinds of “not live” sit in this one table, and each row says which kind it is: a webhook receiver that is written and registered but functionally disabled pending a secret, a real feature that belongs to a neighboring system this product does not reimplement, and a gap that was never built at all. All three are named here rather than left for a pilot to discover.

WhatWhat it would doWhy it is not live
A dedicated school-counselor account roleWould let a district grant a counselor a login distinct from a teacher, an adviser, or an admin.Does not exist. packages/shared/src/roles.ts carries no "counselor" value in either the UserRole or StaffRole enum. Today, access runs through school_admin, district_admin, or the adviser/co_adviser staff role the student-publications system also uses.
An ASCA National Model aligned outcome reportWould roll caseload activity up into the report format the American School Counselor Association's framework expects.Not built. The readiness-milestone dashboard and the referral/tier counts below are the nearest existing surface, and this page names them as exactly that rather than relabeling them as an ASCA-aligned report.
Teletherapy / clinical-partner deliveryWould connect a student to a licensed clinician for ongoing care.Config is born disabled. No partner is wired. This product does not employ or license a clinician and will not fabricate one; an escalation records the intended handoff and its licensure constraint and stops there.
Mandated-reporter legal filingWould transmit a report to a state child-welfare hotline or agency on a school's behalf.Not performed by this product. Detection is not the compliance act: the crisis engine raises and records a signal; filing the actual legal report is a human, needs-counsel act every time.
Assessment score-feed ingest (benchmark scores)Receives inbound NWEA MAP / i-Ready / Renaissance Star benchmark results that can feed the risk re-tier.The receiver is written and registered, but it is honest-off (a 503) until an operator provisions a webhook signing secret. A disabled feed refuses the whole envelope; it never fabricates a partial one.
Detection-sensor alert ingestReceives inbound weapons / vape / aggression / sound-detection sensor alerts from a campus safety vendor.Same posture as the assessment feed: written, registered, honest-off behind its own signing secret. Census-neutral by design -- it routes a device signal, it does not score a student.
Per-state MTSS/RTI threshold tableWould replace the single default risk-score cut-point table with a state-specific, signed one.Not built. The shipped thresholds are stated in the engine's own comment as a defensible default, needing subject-matter sign-off state by state -- the engine surfaces its version stamp for exactly this reason.
First-responder / 911-CAD data-share connectorWould push an incident-command declaration to a dispatch center automatically.Belongs to the neighboring schoolwide crisis-incident-command system, not this product, and is itself an unprovisioned, honest-off 503 there. No connector exists to any dispatch center.
Reunification e-signature finalizerWould let a guardian's release be finalized with a captured signature during an active-incident reunification.Same neighboring system, same honest-off posture: unprovisioned, returns a 503, and this product does not simulate a signature it did not collect.
A single persisted "caseload" recordWould give a counselor one saved list of the students they are responsible for.Not built as its own object. What exists today is an assembled worklist -- open wellness referrals, Tier 2/3 assignments, and open counseling requests, each read live and each independently consent-gated -- described plainly in the worklist section below rather than implied to be one saved caseload table.

Where we lose, first

Against a full counseling category, not a strawman.

No vendor is named on this page. The category this compares against is a purpose-built, established college-and-career or comprehensive school-counseling platform — and it wins the first three rows outright, because those are true and they are exactly why most districts license one.

AxisThe established categoryCounselor.software
Runs a licensed clinical caseload with scheduled therapy sessionsYes. That is the advertised product of a clinical caseload / teletherapy platform, and the reason a district licenses one.No. Not built. The clinical-partner lane is config, born disabled, with no partner wired.
Produces an ASCA National Model aligned counseling program reportYes. A published, framework-aligned report is a standard advertised output of an established college-and-career or comprehensive counseling platform.No. Not built. What exists is a readiness-milestone dashboard and referral/tier counts, named as exactly that.
Gives a counselor a dedicated account role, distinct from a teacher'sYes. A counselor-specific login is a standard feature of a purpose-built counseling platform.No. There is no counselor value in the role model. Access runs through an admin role or the adviser/co-adviser staff role.
A disclosure-boundary transition requires a verified consent basis before it appliesNot established. We cannot audit another product's internal enforcement and will not guess at it.Yes. The engine's own return value marks which transitions require consent, and the route verifies the basis before applying -- enforced in the function, not a policy document.
A self-harm or harm-to-others item hard-escalates regardless of the composite scoreNot established. Whether a screening tool lets a crisis answer be averaged away by calmer ones is not something we can read from outside.Yes. A critical-item flag forces the urgent band regardless of the arithmetic. It can never be averaged away.
A college-admissions test score is structurally barred from moving a risk tierNot established as a structural guarantee. A shared or blended data model may or may not keep the two apart.Yes, structurally: the college-test parser is a separate module that does not call the risk re-tier at all, not a filter on a shared one.
A referral cannot be pushed into an illegal state by a client requestNot established. We do not audit other vendors' state handling.Yes. The transition table is closed; a request naming an illegal move is refused before anything is written.
A sensitive incident is withheld even from a consented reader by defaultNot established. We cannot see whether another platform applies a second wall on top of its consent check.Yes. A self-harm, Title IX, or law-enforcement-referred record redacts even to a consented adviser unless the caller is explicitly cleared for that single record.
Every write runs inside the tenant's own row-level security scopeA hosted platform processes your data on its own infrastructure; that is the model being licensed.Yes. Every read and write is scoped to the school by the tenant wall, and a rep/account-manager session is denied at the database policy, not only the application check.

Measured, not estimated

Twelve domain-module test files, 156 test blocks, counted directly.

Each count below is a call-site grep against that one file — the instrument is named so the number is checkable, not a claim of “all green” dressed up as a bigger one.

sel-checkin.test.ts Check-in scoring Mood, distress, and SEL score fold into the composite; a critical item hard-escalates regardless of the arithmetic. 9 test blocks (grep count)
wellness-referral-flow.test.ts Referral state machine Only the five legal transitions apply; an illegal one is refused; the two disclosure-boundary transitions are marked correctly. 11 test blocks (grep count)
wellness-consent-gate.test.ts Wellness emit gate Missing context, the kill-switch, and a lapsed or declined directory_info grant each suppress; the retired photo-basis arm stays gone. 12 test blocks (grep count)
wellness-care-transition-consent.test.ts Care-transition consent The consent basis required to move a student between care postures resolves fail-closed at the specific transition. 12 test blocks (grep count)
mtss-tiering.test.ts Risk-tier engine The composite score clamps into 0..100 and maps correctly across every Tier 1/2/3 cut point. 11 test blocks (grep count)
mtss-referral-flow.test.ts MTSS referral to IEP handoff Only the three legal transitions apply; an eligible determination opens the IEP plan and stamps both clock anchors. 9 test blocks (grep count)
mtss-score-tier-suggestion.test.ts Score-to-tier edge cases The widest edge-case surface of the tiering engine -- boundary scores, missing optional inputs, and version stamping. 24 test blocks (grep count)
mtss-consent-suppression.test.ts MTSS PII suppression A suppressed student's risk-tier PII redacts the same way the wellness and behavior gates redact. 6 test blocks (grep count)
behavior-consent-gate.test.ts Discipline consent gate The extra-care sensitivity wall redacts a self-harm, Title IX, or law-enforcement-referred incident even from a consented adviser absent allowSensitive. 16 test blocks (grep count)
college-career.test.ts College-career ladders The application-status and counseling-request ladders and the readiness compute hold their invariants under every legal transition. 10 test blocks (grep count)
college-test-intake.test.ts SAT/ACT/AP intake An out-of-range or unknown-exam score is rejected with a reason and never coerced onto the record. 21 test blocks (grep count)
counseling-consent-gate.test.ts Counseling PII emit gate The single directory_info basis alone gates counseling PII; the retired publication-basis OR stays retired. 15 test blocks (grep count)

FERPA, not HIPAA, by default

The classification this page will not guess for you.

In the ordinary case — a school counselor, school psychologist, or nurse creating the record as part of a student's education — a wellness or discipline record is a FERPA education record, and this product is built for that case. That classification can shift: a note authored by an outside clinical agency may be HIPAA-protected health information instead, and a substance-use record may carry its own separate federal consent requirement. Which bucket a given record falls into, and what a specific state requires for a minor's own consent to disclose it, are legal determinations for your counsel — this product enforces the wall once that determination is made; it does not make the determination.

Every store read and write on this surface runs inside the requesting school's own row-level-security scope. A rep session — the platform's commissioned account-manager role — is denied at the database's own restrictive policy, not only at an application-layer check, so a rep reads zero rows on any of these tables regardless of what the application code does or does not remember to check.

Questions

What people actually ask.

Is this a therapy or teletherapy platform?

No, and we say so in those words. No clinician is employed or licensed by this product. The clinical-partner configuration exists in the code, but it is born disabled: no partner is wired, and an escalation transition records the intent to hand a student off to licensed care, along with the student's-location licensure constraint, and stops there. If your district needs scheduled clinical sessions, you need a licensed teletherapy partner, and we will say that plainly on a call.

If a check-in flags a crisis, does the platform report it?

It raises and records the signal. It does not file the report. A critical self-harm, harm-to-others, or abuse-disclosure item hard-escalates a check-in to the urgent band regardless of the rest of the answers, and a wellness referral can fast-path straight to escalated on that signal. What happens next — notifying the right adult, and where the law requires it, filing a report with a state child-welfare authority — is a human act. Detection is not the compliance act, and this product does not perform the second half.

Is there a login just for the school counselor?

Not today, and it matters that we are exact about this. The role model in this codebase has no "counselor" value at all. The gate that protects counseling records admits a school or district admin, or a staff member holding the adviser or co-adviser role — the same role the student-publications system (yearbook, newspaper) uses for its faculty adviser. In practice that means a counselor's access today is granted by assigning them one of those existing roles, not a purpose-built counselor account. We would rather you hear that from us than discover it while provisioning accounts.

Does this produce a report aligned to the ASCA National Model?

No. Nothing in this codebase builds one. What exists is a readiness-milestone dashboard (eight named milestones from FAFSA filed to decision finalized) and a set of referral and tier counts drawn from the engines on this page. Those are useful on their own, and we describe them as exactly what they are rather than relabel a milestone dashboard as a framework-aligned program report.

How is a student's SEL check-in kept private?

The check-in engine itself never sees a narrative — it scores structured signal only: a mood rating, a count of distress indicators, an optional competency score, and a single critical-item flag. Whatever narrative a student or staffer does write is a separate, consent-walled field. Every emit of that field routes through one gate that checks, in order, whether the student has a resolvable consent context, whether the family's do-not-publish kill-switch is set, and whether the directory_info disclosure basis is currently granted. If any of those fail, the narrative comes back null — not masked, not partial, null. The concern band may still be recorded as an internal triage signal even when the narrative is withheld, because a school still needs to know a check-in needs follow-up even when it cannot show the words that triggered it.

Can a counselor read a discipline record even if the family hasn't consented to anything?

No. The discipline gate uses the same directory_info basis and the same do-not-publish kill-switch as the wellness gate, and a student with no resolvable consent context is treated as suppressed by default — missing or unresolvable consent redacts, it never defaults to visible. On top of that, an incident flagged sensitive (self-harm, Title IX, or a law-enforcement referral) is redacted even from an otherwise consented, authorized adviser unless that specific read is explicitly cleared for it, which only happens on a single-record, role-elevated view — never on a roster export or a dashboard pull.

What happens when a student is flagged for a special-education evaluation?

The referral moves through a closed sequence: referred, eval-consent captured, evaluating, and a terminal eligible or not-eligible determination. Two of those steps stamp a legal-timeline anchor — when parental consent for the evaluation was received, and when eligibility was determined — and an eligible outcome opens a real special-education plan on the platform's IEP product. This module is the handoff into that plan, not a second, competing copy of it; the same student record carries both.

Does a college-admissions test score affect a student's early-warning risk tier?

No, on purpose. The SAT/ACT/AP intake parser is a structurally separate module from the risk-tiering engine and does not call into it. A strong or weak admissions score updates the readiness dashboard's "SAT/ACT taken" milestone and nothing else. The engines that DO feed the risk tier are attendance, behavior incidents, course failures, GPA, and an optional benchmark-assessment percentile — kept deliberately apart so a college-admissions test can never mis-tier a child's early-warning risk.

What is the early-warning risk score based on, and who set the thresholds?

Attendance rate, behavior-incident count, course-failure count, and where available, GPA and a normalized benchmark-assessment percentile fold into one 0-to-100 composite, mapped to Tier 1, 2, or 3 against a published cut-point table. That table is a defensible default we built, not a state-certified standard — the engine's own comment says a state may require different cut points, and every scored decision carries a version stamp so a future threshold change is attributable rather than silently rewriting history. It assigns a tier; it does not prescribe which intervention a tier should receive.

What does "caseload" mean on this product, exactly?

Today, an assembled worklist, not one saved table. Open wellness referrals, students carrying a Tier 2 or 3 assignment, and open college-career counseling requests are each read live and each independently consent-gated on the way out. We describe it that way rather than imply there is a single, persisted "my caseload" record behind the scenes, because there is not one yet.

Is a transcript or recommendation actually sent when a counselor requests one?

It rides the platform's own transcript issuer rather than a second, weaker path built just for this surface. If the issuer has a signing key configured, the send is issued and the request moves to sent with a real issuer reference. If it does not, the result is honest-off: the request stays in_progress with no issuer reference attached, rather than a confirmation that looks sent but was not signed by anything.

What happens during a building-wide crisis, like a lockdown?

That is handled by a separate, schoolwide incident-command and reunification system, not by this product — a wellness escalation can hand off toward it, but the lockdown-to-reunification lifecycle, the accountability headcount, and the guardian release checks live in that neighboring module. It has its own two honest gaps worth naming here too: there is no first-responder or 911-CAD data-share connector, and no reunification e-signature finalizer. Both are unprovisioned and both return a clear refusal rather than a fabricated one.

Is any of this data shipped to a cloud AI model?

No. The check-in scorer is a deterministic rubric with no model call of any kind — not a cloud model, not an in-VPC one. It reads structured signal, applies fixed arithmetic, and returns a band. Nothing about a student's mood, distress, or narrative leaves the tenant's own substrate to be scored by a language model, because that scoring step simply does not exist here.

Is this a FERPA record or a HIPAA record?

In the ordinary case, FERPA. When a school employee — a counselor, a school psychologist, a nurse — creates the record as part of the student's education, it is a FERPA education record, and this product is built for that FERPA-native case. The exact classification can shift — a note from an outside clinical agency, for instance, may be HIPAA protected health information instead — and that per-record classification, along with any state-specific 42 CFR Part 2 substance-use consent rule, is a legal determination for your counsel, not a switch this software flips for you. What this software does is enforce the wall once that determination is made.

What does it cost?

There is no price on this page and no checkout anywhere on this site. This is early access: the engines are built and consent-gated, and the surface around them — a dedicated counselor role, a clinical partner, a framework-aligned report — is not finished. The honest next step is a conversation about which of these engines would actually help your counseling team's day.

Is Counselor.software a school, a district, or a nonprofit?

No. It is a for-profit software product built by Stanley Studios. It is not a school, not a district, and not a nonprofit, and nothing here is a charitable gift of any kind. This is software a school licenses, and we are precise about that difference because it matters, especially on a page about a child's most sensitive school records.

Where this sits

One student graph, not a separate import.

These engines were not bolted onto a standalone counseling database — they read and write the same student record the platform's attendance, gradebook, and special-education surfaces already use, which is why a flagged check-in can open a documented support instead of a dead survey, and why an eligible MTSS referral can open a real special-education plan instead of a note that says “see the other system.” homeroom.software is the optional full platform these engines already assume as their home; using counselor.software does not require adopting it.

The short version.

Five engines are reachable and consent-gated today: a check-in scorer whose crisis item cannot be averaged away, a referral state machine that refuses an illegal transition, an early-warning risk tier over attendance and behavior and grades, a discipline gate with a sensitivity wall a consented reader still cannot cross, and a college-and-career tracker whose transcript send rides a real credential issuer. Ten things are honestly not live, named by name above, including a dedicated counselor login, a clinical partner, and an ASCA-aligned report. Nothing here diagnoses, delivers therapy, or files a legal report on your behalf.

Talk to us

Two honest ways to reach us.

Ask about early access

Tell us which of these engines matches what your counseling team actually needs today, and we will tell you plainly which parts are ready and which are not.

[email protected]

Read the refusals first

Every gap on this page — the missing counselor role, the disabled clinical partner, the unfiled report — is listed above by name. Read that before a call, and the call will be shorter.

Built, not live →