Digital Wellness Academy
DWA is SVTech's healthcare flagship: a mental health SaaS that psychiatric practices license to deploy between-session therapy tools their patients will actually use. Provider-led education, 21 standardized clinical assessments, MAIA safety monitoring on every patient message, and a behavioral health software portal that turns scattered patient data into clinical signal between appointments.
Customer product site: digitalwellness.academy ->What DWA delivers to a licensed practice
Three outcomes a psychiatric practice can measure after onboarding DWA. The technical depth behind each is below - but the value shows up in the clinic first.
Structured work between sessions
Between-session therapy tools — provider-assigned lessons, thought records, exposure hierarchies, breathing exercises — replace "eat better, sleep more" with a structured curriculum that generates a patient record the clinician can review.
Signal instead of noise in the patient roster
Assessment trajectories (PHQ-9, GAD-7), crisis alerts within seconds, risk-tiered patient list, and automated pre-session briefs with source attribution. The clinician sees outcomes and exceptions, not raw text.
Differentiation, retention, capacity
A thought-leadership moat via published content. Better between-session engagement reduces drop-off. The same provider can coordinate more patients effectively. One paying partner has already shipped the MVP of this engagement.
A real clinician. A real gap between sessions.
In September 2025, a nurse-practitioner-led psychiatric practice asked SVTech for a paid-ads campaign. We pushed back: mental-health paid media is saturated with interchangeable messaging. The real gap was different - patients making no measurable progress between sessions, where lifestyle guidance lands as vague advice, without structure, quiz, progress signal, or evidence base.
The practice paid the first license fee. The MVP shipped in weeks. Both sides agreed the next version had to be interactive and HIPAA-compliant to cross from education into therapy. That became DWA - and the platform that emerged from building it became SoloFrame.
One boolean wires up the whole HIPAA stack
DWA's manifest declares phi: true. That single setting wires up retention, guardrails, the classifier sidecar, audit trails, and encryption posture automatically at engine boot - so no application code is ever making compliance decisions.
Seven years for PHI-tagged records
Standard clinical retention. GTM-OS runs 395 days on the same engine. Set by manifest, read by the retention policy engine, enforced at the data layer.
never-diagnose · always-988-on-crisis
Enforced at the AI orchestration layer, above the model. Crisis responses are pre-built and clinically reviewed - the LLM never improvises safety-critical content.
Postgres RLS as the v2 isolation target
v1 ships audited application-level tenant scoping on a shared Postgres. v2 moves the boundary into row-level security keyed on a per-request GUC, with a tenantLeakHarness CI gate. Dedicated DB available as a paid SKU for licensees that require it on top of either model.
Every PHI-adjacent write, logged
Append-only audit log with actor, tenant, resource, action, timestamp. Accessible to the tenant's compliance officer via the provider portal, immutable to everyone else.
The rest of this page is a technical deep dive: MAIA architecture, the May 2026 alert workflow, clinical instruments, provider coordination, the in-house fine-tune roadmap, and the data flywheel that makes the moat.
Generic LLM safety filters miss clinical distress. MAIA is purpose-trained to catch it.
Sentinet/suicidality (ELECTRA-base, ~110M params, CC0 baseline) runs on every user-generated message before any LLM sees it. Validated F1 0.93 / crisis recall 1.0 / trap-FP 0 on the May 2026 harness. Classifier stays text-free at inference - hash + label only. The 5-stage retrain pipeline promotes a successor only when it measurably beats the baseline; the classifier that ships on the hundredth practice is not the classifier that shipped on the first.
CPU inference · 3-second hard timeout
- • sentinet/suicidality (ELECTRA-base ~110M params) · FastAPI · Docker Swarm
- • CPU-only sidecar at 22.3 ms/sample (validated May 2026 harness)
- • 3-second hard timeout · failSafe="closed" surfaces 988 if MAIA is unavailable
- • Endpoint: internal
maia-mono:8001 - • Classifier text-free · stores hash, label, model_version only
- • Audit-trailed payload:
{level, confidence, model_version, ts}
None / Mild / Crisis
- None < 60% confidence · no intervention.
- Mild 60–85% · supportive resources surfaced in-context.
- Crisis ≥ 85% · provider notification, 988 Lifeline escalation, UI intervention, further AI chat blocked pending acknowledgment.
Every text-input boundary, gated
Validated baseline · audited promotion gate
MAIA's production baseline is sentinet/suicidality - an open-source CC0 ELECTRA classifier C-SSRS-trained for high-risk suicidality detection (F1 0.93 / Acc 0.94 upstream; crisis recall 1.000 / trap-FP 0 on the May 2026 local validation harness). SVTech-built successor classifiers can join the retrain queue, but a candidate only ships when it measurably beats the baseline on held-out validation, with audited human sign-off. Validation runs on Apple Silicon MPS; production serving stays CPU-bound for predictability.
Inference is the boring, reliable path. Improvement happens out-of-band, audited per model_version.
Clinical instruments, standardized and immutable
Validated assessments are platform-owned. A vertical references them by ID - it cannot fork the scoring logic. That's the contract: if two practices both run DWA, a PHQ-9 score means the same thing on both.
7 standardized + 14 condition-specific
- • PHQ-9 / PHQ-2 - depression severity
- • GAD-7 - anxiety severity
- • PDSS-SR - panic disorder self-report
- • SPIN - social anxiety
- • PSQI / ISI - sleep quality
14 condition-specific self-checks covering OCD, PTSD/PCL-5, bipolar, anger, perfectionism, low self-esteem, grief, trauma, and more. Each assessment crisis-item aware — PHQ-9 Item 9 triggers MAIA regardless of total band score.
77 courses · 922 lessons · three schools on shared identity
Therapeutic school · 39 courses, 316 lessons across anxiety, mood, panic, OCD, PTSD, DBT/CBT/ERP/somatic. Provider-assignable, symptom-gated onboarding.
Optimization school · 19 courses, 375 lessons across five pillars - physical vitality, social connection, mental clarity, emotional resilience, purpose & meaning. Open enrollment, no clinical gating.
Shared auth. Isolated progress at the database-row level - therapeutic enrollments never bleed into optimization analytics.
Not passive videos - clinical-grade interactivity
Each lesson embeds five or more interactive components from a library of 30+ types. Every component persists state to the provider portal.
Screen first. Escalate on the second signal. Dedup per session.
A system that fires on every euphemism gets muted by week 2. A system that mutes its way past the actual signal is worse than no system. The right asymmetry: screen first, err toward firing on the second beat. Urgency tiers ratchet monotonically — never reverse.
- →7 PMHNP-curated response templates, seeded at boot, idempotent
- →
{{officePhone}}and{{aliasCode}}substituted client-side at template-select - →POST
/api/provider/alerts/[id]/respondwritescare_message, closes episode - →Clinical voice and AI voice stay on separate surfaces — patient knows which they're reading
Provider coordination without PHI exposure
Providers see outcomes - mood trends, assessment trajectories, distress alerts, completion velocity, risk tiers. They don't see raw text. That's an architecture choice, not a UI choice.
Automated pre-appointment briefs
Before an appointment, the provider RAG synthesizes a patient's recent activity, assessment deltas, quiz trends, and relevant course material into a short clinical brief. Source attribution on every paragraph - the provider can click through to the specific lesson or assessment cited.
"Three patients need attention this week"
The patient roster is sorted by composite risk score, not alphabetically. Risk is derived from assessment slopes, engagement deltas, distress frequency, and sentiment trajectory - converted into tiers providers can triage against.
Seconds, not hours
A crisis-level classification triggers an immediate in-app UI intervention for the patient, a provider notification via email and dashboard, and a logged audit event. The patient sees 988 Lifeline resources before the chat is re-enabled; the provider sees the alert before the next session.
Assessments + engagement + sentiment, over time
PHQ-9 and GAD-7 trajectories. Engagement rhythm. Daily mood tracking. Sentiment trajectory from journal entries (inferred, never quoted). Rendered as charts the provider can scan in seconds.
Six scoped ML systems, each independently deployable
Every layer of the clinical-analytics moat is GPU-bound: fine-tuning, batch embedding, causal inference, mastery modeling, plus MAIA inference on the hot path. Each line below is a specific, scoped system with a clear metric.
ClinicalBERT second-pass classifier
Categorizes distress into anxiety · depression · stress · trauma response · personality-related. Fine-tuned on platform interaction text with clinical-instrument-aligned labeling.
RoBERTa fine-tuned for MH sentiment
Per-patient emotional progression over weeks. Longitudinal analysis across journal and forum corpora. Output is publishable-grade research.
IRT + BKT + FSRS
Item Response Theory calibrates question difficulty. Bayesian Knowledge Tracing tracks per-skill mastery in real time. Free-Spaced-Repetition-Scheduler picks optimal review timing.
XGBoost composite risk scoring
Features: assessment trajectories, engagement, quiz trends, distress frequency, sentiment. Output: Low / Watch / Elevated / High + contributing factors.
Embeddings + HDBSCAN + causal inference
Forum topic clustering surfaces unmet content needs. Causal content-outcome correlation identifies which specific lessons drive measurable assessment-score improvement.
pgvector + user-facing RAG
Batch-embed lessons by semantic boundary, migrate from JSONB cosine-similarity to pgvector HNSW. Extend RAG from provider-only to user-facing coaching chat.
~394K labeled signals per month at target scale
At 10 practices × 200 patients = 2,000 active users, DWA generates a continuous stream of labeled interaction data that feeds every GPU-bound ML system above. A competitor starting from zero needs 12–18 months of adoption to reach comparable training data; by then, MAIA has iterated 12–18 times.
| Data type | Monthly volume | ML application |
|---|---|---|
| Quiz responses | ~100,000 | IRT calibration · BKT mastery |
| Journal entries | ~30,000 | Distress · sentiment · ClinicalBERT |
| Assessment scores | ~4,000 | Risk stratification · outcome correlation |
| Forum posts | ~10,000 | Topic clustering · content gap detection |
| Lesson interactions | ~200,000 | Engagement prediction · churn detection |
| Coaching messages | ~50,000 | RAG quality · Socratic refinement |
| Total | ~394,000 / month |
This page is a SoloFrame case study
If you're evaluating DWA as a product - licensing terms, RTM billing, clinical content detail, provider onboarding - that lives on the dedicated product site.