τ
Self Shelf
Clinician Dashboard

Notifications

Practice invitations, session reminders, and other updates.

Loading…
Clinician Dashboard

Welcome back.

Here's your practice at a glance.

Today's Sessions
Loading…
Active Clients
Loading…
This Week's Hours
Loading…
Monthly Earnings
Loading…

This Week

Full schedule

Recent Notes

All notes
Loading recent notes…

This Week's Sessions

Full schedule
Loading…

Action Items

All tasks
Loading…

My Clients

View all
Loading…
Today's vista · a quiet horizon

"Between stimulus and response there is a space. In that space is our power to choose our response."

An invitation

Your Schedule

Loading…

Day Notes

Select a day
No day selected

Click any day on the calendar to view and edit notes.

Private
Roster Your Clients
Coming Soon

Prescription Module Coming Soon

We're standing up DEA EPCS certification, Surescripts integration, and state-by-state PMP checks before opening prescriptions to clinicians. Sessions, assignments, and clinical notes are unaffected.

Video Calls Your Sessions
New Session Lobby
Today
Loading today's schedule…
Past Sessions
Loading sessions…
Documentation Clinical Notes

Your Files

Connect Google Drive

Create and edit Docs, Sheets, and Slides without leaving the hub.

For HIPAA compliance, use Google Workspace ($6/user/mo) with a signed BAA.

Billing

Total collected
Loading…
Total invoices
Loading…
Outstanding
Loading…
Standard rate
Per 50-min session

Practice Team

Loading practice…

Active members
of — seats
Team revenue (30d)
collected across members
AI actions (pooled)
of —/mo
Pending invitations
awaiting acceptance
Loading members…

Practice Settings

Professional Information

This is shown to clients on your public profile.

Used to auto-bill clients: this rate × the actual session length, invoiced automatically when a session ends.
Clinical focus areas — comma separated.
Modalities you practice — comma separated.
Comma separated.
Comma separated.
Comma separated. Leave blank if out-of-network only.
Saved

Clinical Framework

Tailor how the Self Shelf AI analyzes sessions, journals, and client patterns. The AI adapts its vocabulary, what it listens for, and how it reads facial and vocal signals to match your modality.

Saved

Public Profile Page

Customize your public-facing profile. Visitors can book consultations and learn about your practice.

Preview Public Page
Saved

Certifications & Training

Trainings, certifications, and credentials shown on your public profile. Self Shelf can verify any credential — upload the supporting document and we'll review it. Documents stay private; visitors only see a Verified badge.

# File What it creates Status
1
supabase-setup.sql
Base schema
profiles table with role, display_name, bio, onboarded, avatar_url
handle_new_user() trigger — auto-inserts a profile row on every new auth signup
Applied
2
002_profiles_rls.sql
Profiles security
Row Level Security on profiles — users can only read/edit their own row
is_admin() SECURITY DEFINER function — used by all downstream admin policies
Applied
3
001_hipaa_rls_audit.sql
HIPAA layer
therapist_verifications — degree, NPI, DEA, license data + approval status
verification_audit_log — append-only log of every status change (who, when, before/after)
credential_documents — tracks uploaded credential file paths in Storage
Private credential-documents Storage bucket — signed URLs only, no public access
Applied
4
003_phi_notes_tables.sql
Clinical notes
session_notes — therapist session notes keyed per client
client_notes — client-visible notes
day_notes — daily journal entries with mood, energy, and free text
Applied
5
004_therapist_clients.sql
Connection system
therapist_clients — links therapist ↔ client with status (pending / active / declined / ended) and relationship_type (primary / consult)
touch_updated_at() trigger — timestamps every status change
is_connected_therapist() SECURITY DEFINER — lets therapists read connected client profiles without RLS recursion
Adds verification_status column to profiles · profiles_therapist_public_read policy · profiles_connected_therapist_read policy
Applied
6
005_invite_tokens.sql
Invite links
Adds invite_token text UNIQUE column to profiles
Unique index on invite_token for fast connect.html?t= lookups · no new policies needed (covered by existing profiles_therapist_public_read)
Applied
7
006_admin_system.sql
Admin accounts
Adds admin_granted_by and admin_granted_at audit columns to profiles
profiles_no_admin_promotion RLS policy — blocks browser clients from ever setting role='admin' (service_role / SQL Editor bypasses RLS and can still promote)
profiles_role_check constraint — restricts role to client | therapist | admin only. To promote: UPDATE profiles SET role='admin', admin_granted_by='you@...', admin_granted_at=now() WHERE id='uuid';
Applied

All migrations are idempotent — safe to re-run. Run them in the order shown via Supabase Dashboard → SQL Editor.

Dev Roadmap

Live Now
NPI Verification — CMS NPPES Registry
Federal database · Free · Automatic
Live

Every US healthcare provider is required by law to hold an NPI. The Edge Function hits the live federal NPPES API, confirms the number is active, cross-references the registered name, and validates that the taxonomy code matches a mental health specialty (LCSW, LMFT, PsyD, PhD, MFT, etc.).

File: supabase/functions/verify-therapist/index.tsverifyNPI() + isMentalHealthTaxonomy()
OIG LEIE Exclusion Check
HHS Office of Inspector General · Free · Automatic
Live

Checks the federal List of Excluded Individuals/Entities. Providers on this list are legally barred from participating in Medicare, Medicaid, and all federal healthcare programs. Hard rejection if a match is found. Falls back to manual review if the API is unreachable.

File: verify-therapist/index.tscheckOIGExclusion() · API: api.exclusions.oig.hhs.gov
DEA Checksum + License Expiry + Duplicate NPI Guard
Math validation · Free · Automatic
Live

DEA number checksum catches typos and fake numbers. License expiry compares the submitted date against today. Duplicate NPI guard prevents the same federal provider number from being used across multiple accounts.

Next — Free to Add
SAM.gov Debarment Check
System for Award Management · Free · Requires API key
Next

SAM.gov is the federal register of debarred contractors and sanctioned parties. Catching a debarred provider is rare but a serious compliance win. The API requires a free registration.

  1. Register at sam.gov → Account Settings → System Accounts → Request API key
  2. Add secret SAM_GOV_API_KEY to Supabase Edge Function secrets
  3. Add checkSAMExclusion(npi, lastName, firstName) to verify-therapist/index.ts, calling https://api.sam.gov/entity-information/v3/exclusions
  4. Include result in audit log event_detail
Free (federal API)
Admin Review Interface — admin-verify.html
Manual review queue for pending/flagged applications
Next

The Edge Function already routes unreachable-API cases and taxonomy mismatches to status='pending'. This page gives admins a queue to review those cases, view uploaded credential documents via signed URLs, and approve or reject with a reason.

  1. Create admin-verify.html (outlined in the HIPAA plan)
  2. Query therapist_verifications WHERE status='pending'
  3. Generate 5-min signed URLs for each credential_documents record via supabase.storage.createSignedUrl()
  4. Approve → UPDATE therapist_verifications SET status='approved' + write to verification_audit_log
  5. Reject → same, plus store rejection reason and trigger Resend email
No cost — uses existing Supabase + Resend
When Scaling — Paid Services
State License Verification — Medallion or Certemy
Automated verification of LCSW / LMFT / LPC / PsyD licenses in all 50 states
Paid

There is no free national API for state mental health licenses — each of the 50 states runs its own licensing board database. Medallion and Certemy maintain integrations with all 50 state boards and can verify a license number in real time.

  1. Sign up at medallion.co or certemy.com
  2. Add provider via their API using NPI + license number + state
  3. Receive webhook when verification completes (usually <60 sec)
  4. Update therapist_verifications.license_verified = true on webhook receipt
  5. Set up ongoing monitoring webhooks to catch revocations and renewals automatically
~$2–5 per verification · ongoing monitoring included
Background Checks — Checkr
Criminal history, sex offender registry, identity verification
Paid

For a platform where clients are in a vulnerable therapeutic relationship, criminal background checks are standard practice. Checkr has a healthcare-specific package and a clean REST API.

  1. Create account at checkr.com → apply for healthcare package
  2. Add CHECKR_API_KEY to Supabase secrets
  3. After NPI is approved, call POST /v1/invitations to email the therapist a consent + background check form
  4. Listen to Checkr webhooks → on report.completed → update verification status in Supabase
  5. Store checkr_report_id in therapist_verifications for audit trail
~$25–50 per check (one-time per therapist)
DEA Live Registry Lookup
Confirm DEA number is actually registered (not just valid format)
Paid

The DEA doesn't publish a public API — the checksum validates format only. To confirm a DEA number is genuinely registered, you need a third-party data provider like Veridian or LexisNexis Healthcare.

  1. Contact Veridian or LexisNexis Healthcare for DEA verification API access
  2. Relevant only for therapists who can prescribe (psychiatrists, NPs) — most LCSWs/LMFTs won't have a DEA number
  3. Replace the existing validateDEA() checksum call with a live API call in verify-therapist/index.ts
~$1–3 per lookup · only needed for prescribers
CAQH ProView Integration
Standard provider credentialing for insurance network participation
Future

CAQH is the industry standard credentialing data source used by most US health insurance companies. If you want Self Shelf therapists to accept insurance, CAQH integration is the path. Providers already credentialed with CAQH can authorize your platform to read their profile directly.

  1. Apply for CAQH ProView API access at proview.caqh.org (requires organization vetting)
  2. Therapists authorize Self Shelf to read their CAQH profile
  3. Pull license, malpractice, education, and work history data automatically
  4. This largely replaces the manual therapist-verify.html form for insurance-accepting therapists
Pricing negotiated with CAQH directly
Site-Wide HIPAA Hardening
Move Session Notes + Journal to Supabase
Currently stored in localStorage — PHI must not live on-device
Important

Session notes and journal entries currently live in localStorage. Under HIPAA, PHI at rest must be encrypted and access-controlled. This means migrating to the session_notes, client_notes, and day_notes Supabase tables that already exist from migration 003.

  1. dashboard.html journal writes → INSERT INTO day_notes instead of localStorage.setItem
  2. therapist-dashboard.html clinical notes → already partially wired to session_notes, confirm all writes go to DB
  3. Add a migration to purge any existing localStorage PHI on next login
  4. Supabase AES-256 at rest + TLS in transit covers the HIPAA encryption requirement
No cost — uses existing Supabase tables
BAA Page + Supabase Pro
Legal requirement to handle PHI under HIPAA
Future

Before handling real patient data in production, you need a signed Business Associate Agreement (BAA) with Supabase. This requires Supabase Pro ($25/mo). Resend also has a HIPAA tier for email. The BAA wizard in therapist-verify.html already captures the therapist's agreement on your side.

  1. Upgrade Supabase project to Pro ($25/mo) → Settings → Billing
  2. Request BAA from Supabase → Settings → Legal → Business Associate Agreement
  3. Upgrade Resend to a paid plan and request their HIPAA addendum
  4. Create baa.html — full BAA text reference page for therapists
$25/mo Supabase Pro · Resend paid tier
Assignments Client Assignments

Your Journal

Select an entry or click New Entry to start writing. Open an entry and click Analyze to get AI insights.

Your Files

Connect Google Drive

Create and edit Docs, Sheets, and Slides inside Self Shelf.

Recent Entries

To-Do

All Tasks
Pending
No pending tasks.
Done
Completed tasks will appear here.

Connect

Incoming
Sent

Your Supervision

Loading supervision details…

My Supervisees

Loading supervisees…

Account Settings

Your Profile

This is how you appear to clients and other users.

?

Loading…

@

Letters, numbers, and underscores only — 30 characters max.

Verify your identity first

To view or change your credentials, please re-enter your password.

Security

Manage how you sign in and protect your account.

Sign-in method
Email & password
Two-factor authentication
Not enabled
Active sessions
This device

Privacy

Control who can see your profile in the community directory.

When enabled, other Self Shelf members can find you in the directory and send connection requests. Your clinical data is never shared — only your username, bio, and avatar are visible.

Notifications

Choose what you hear about and how.

Subscription Solo

Your current plan and AI usage.

For solo practitioners running their own practice.

Solo
$49.99/mo

The essential practice platform — no AI features.

  • Unlimited clients & scheduling
  • HIPAA notes & superbills
  • Invoicing & payments
  • Live video sessions
Most Popular
Solo Plus
$99.99/mo

For 15-18 clients/week. Full AI-assisted clinical work.

1,000 AI actions
Chat, journal, transcript, session recap, synthesis
  • AI Coach Chat — 5 therapy modes
  • Unlimited facial & linguistic analysis
  • Full session synthesis & risk scoring
  • Multi-session pattern trends
Solo Pro
$149.99/mo

For 25-30 clients/week. Double the AI for high-volume practices.

2,000 AI actions
Best per-action rate · headroom for heavy use
  • Everything in Solo Plus
  • Cross-client pattern insights
  • Batch analysis across caseload
  • Priority AI response times

New Appointment

A video therapy session with RSVP invites.
$ /hr
The client is auto-billed this rate × the actual session length when the session ends.
All tagged users see this event on their Self Shelf calendar

Write Prescription

Medication
Duration & Refills

Clinician Identity Verification

To authorize this prescription and deter fraud, confirm your license number and NPI. These are verified against your registered credentials. This step is required before every new or edited prescription.

Enter credentials to authorize

Approve Refill

Authorizing refill for

Clinician Identity Verification

Confirm your license number and NPI to authorize this refill. Required before every approval to deter unauthorized prescription activity.

Enter credentials to authorize

Messages

Select a conversation to start
Rename
Duplicate
Delete

Delete this entry?