Skip to main content

Changelog

Follow the latest improvements and updates

How to follow

  • Bookmark this pageand check back when you want to see what's new.
  • RSS feed: Add /changelog/feed to your feed reader (Feedly, Inoreader, NetNewsWire, etc.) to get new entries as we publish them.
Improvement

Safety Check Law Evaluation: confidence scores and stricter filtering

The Law Evaluation lens now shows a numerical confidence score (0–100%) for each potential violation, plus clearer visual badges and stricter filtering to reduce false positives.

  • Confidence scores — every violation displays a percentage (e.g., 87% confidence) with color-coded badges: green for high confidence (≥85%), amber for medium (75–84%), and rose for borderline (below 75%).
  • Stricter 75% threshold — violations below 75% confidence are automatically filtered out and noted in processing notes for transparency.
  • Line citation enforcement — message examples must include a “Line N” citation to be clickable; examples without citations are filtered out.
  • UI polish — confidence badges animate on appearance, violation cards have subtle hover effects, and dark mode styling is more consistent.

These changes make legal assessments more reliable and help you focus on higher-confidence concerns. As always, the Law Evaluation lens is for reflection and possible attorney referral—not legal advice.

Improvement

Safety Check: message examples in Schema and DSM-5-TR lenses now collapsed by default

Quoted message examples in the Schema lens and DSM-5-TR lens now start collapsed (showing the first 4 examples) so the report is easier to scan. Click Show all to expand and view the complete set of supporting evidence for each pattern.

Improvement

Safety Check: softer transparency for quoted message examples

The background panels behind quoted message examples in the Schema and DSM-5-TR lenses now use a slightly transparent fill (70% opacity) so they blend more naturally with the report surface while keeping the blue (What to Say) and red (What to Avoid) accent colors readable.

Fix

Messages: Send invite in Practice link now lands on the correct tab

In the Messages sidebar, clicking Send invite in Practicefor a client without portal access now reliably opens the client's Overview tab (where the portal invite panel lives) and scrolls directly to the invite section.

Improvement

Safety Check lenses: removed per-line “Line N” chips; jump to transcript from quotes or context

Bible, Pastor's Lens, Law, DSM-5-TR (including supporting evidence quotes), and DSM surrounding-message context no longer show the small slate Line N badges above each excerpt. Detected Patterns example cards no longer repeat the line number in the small meta row above each quote (time and sender stay when known). Where line linking is available, use the quoted text (or, in surrounding context, the message body): the same scroll-to-line behavior is preserved, and screen readers still hear the line number on DSM context rows.

Improvement

Safety Check report: clearer high-level overview and summary styling

The report header sits in a softer framed band, a new At a glance strip surfaces severity, confidence, visible patterns, and immediate concern in compact tiles, and Quick summary is elevated as a narrative “next steps” card so the page reads top-down from outcomes to detail. With Patterns only toggled on, the strip is hidden so Detected Patterns stays visually primary, and the report hero compacts (shorter copy, smaller title, slimmer glossary row) so pattern cards come up sooner. Detected Patterns has a stable in-page anchor (#safety-detected-patterns) with scroll margin; the patterns-only blurb links there, and opening the report with that hash expands the section and scrolls it into view.

Improvement

Safety Check: Schema and DSM-5-TR quoted examples match What to Say / What to Avoid styling

In the Schema lens and DSM-5-TR lens, quoted message examples now use the same blue left-border panel as What to Say and the same red panel as What to Avoidin Immediate Guidance—so highlighted transcript lines feel consistent across the report. Bible, Pastor's Lens, and Law message examples keep their existing highlight style.

Fix

reflectwithemily.com stays on the same site (no automatic redirect to another domain)

Visiting reflectwithemily.com or www.reflectwithemily.com now loads the app on that hostname instead of permanently redirecting to another apex. That keeps sign-in, cookies, and the first load on one origin so pages are less likely to hang on a spinner after a domain hop. Production nginx now proxies this host to the same frontend and API as the main site (Next.js legacy host redirects are opt-in at build time only). If a redirect still appears in the browser, check Cloudflare for an extra bulk redirect rule. Deployments that still need a marketing-domain redirect can opt in with documented environment variables.

Improvement

Safety Check: clear choices when the pipeline trims patterns, examples, projected impact, or severity

When analysis notes mention automated guardrails, omitted projected-impact text, or capped severities, the report now shows a short how to proceed panel: continue with the grounded report (scrolls to Quick summary), read the full processing notes, jump to Detected Patterns, or jump to Immediate guidance. After you continue, a slim reminder stays available with links to reopen the choices or open notes.

In Patterns only view, a compact pipeline notice still appears under the severity summary with shortcuts to reopen the full choice panel or jump straight to Analysis & processing notes.

Fix

Clearer message when a request times out or the server returns a generic error

If the server answers with a plain “Internal Server Error” page (common when a gateway times out or the app is still busy), the app now shows guidance that fits Safety Check and other heavy tasks—not only multi-model chat. Retrying after a short wait, sending less at once, or splitting a long Safety Check in the wizard is called out when errors keep happening.

Improvement

Safety Check preview: clearer guidance on timeouts and busy servers

When participant preview hits an HTML error page or an invalid response, the message now matches the rest of the app: retry shortly, avoid overlapping heavy analyses, and use the wizard to split very long threads or send a shorter excerpt when previews keep failing.

Improvement

Safety Check: clearer participant names in the full thread and People section

Generic thread labels (for example You, Me, Them, Other, Person 1, Person 2, and transcript styles like Person 1 (sent) / Person 2 (received) / This person) no longer show a misleading single-letter initial in avatar circles. Names still replace those placeholders when your import includes real participant labels, consistent with how the pipeline treats generic transcript names elsewhere.

Fix

Safety Check: clearer limits, parse help, and fewer mistaken bug reports

Error text for long threads, empty parses, and preview failures now points to the same step-by-step wizard path (/dashboard/safety-check/wizard) for Split into parts. Expected issues (for example paste format or over the per-part character limit) no longer open automatic support tickets. Long streaming runs are less likely to hit a noisy “response already started” server error when the database closes an idle connection.

Improvement

Safety Check: proactive size warning before you submit

When you paste a long conversation, you now see real-time feedback: message count, character count, and estimated parts needed. If it exceeds the single-run limit (~12,000 characters), a warning appears with a direct link to open the step-by-step wizard for splitting. This helps avoid the timeout error and guides you to the right workflow before you submit.

Improvement

Safety Check: upload audio recordings for transcription

The Upload File option now accepts audio files (MP3, M4A, WAV, etc.). Audio is transcribed automatically using Whisper and then analyzed like any other conversation. Useful for reviewing recorded phone calls, voice messages, or any spoken exchange you want to check for patterns.

New

Safety Check: advanced privacy options for sharing

New privacy controls when sharing Safety Check reports let you decide exactly what recipients can see.

  • Hide victim messages — Remove all messages from the victim/survivor (Me/You) so only the other party's messages appear in the shared report.
  • Disable printing — Prevent recipients from printing or downloading the report as a PDF.
  • Selective line redaction — Remove specific lines entirely from the shared conversation, useful for removing sensitive details, names, or locations.
Improvement

Safety Check: upload audio recordings for transcription

The Upload File option now accepts audio files (MP3, M4A, WAV, etc.). Audio is transcribed automatically using Whisper and then analyzed like any other conversation. Useful for reviewing recorded phone calls, voice messages, or any spoken exchange you want to check for patterns.

New

Safety Check: user-verified example corrections

When the evidence guardrail removes ungrounded examples, you can now review and correct them. For each flagged example, choose: fix the line number, fix the speaker attribution, confirm it is accurate (paraphrase), or remove it. Corrections are saved and applied to update your report with verified examples. This helps improve report quality when transcript parsing or speaker labels cause grounding mismatches.

Improvement

Safety Check: glowing highlights on all message examples

Lens Message examples(Bible, Pastor's Lens, Law, DSM-5-TR, Schema) and supporting DSM snippets now use the same pink highlight and soft glow as pattern-card quotes. Pattern cards also add a light outer glow on each cited line row for consistency.

Fix

Analysis loading: accurate privacy note about server storage

The in-progress analysis screen no longer says that no conversation content is stored on our servers. Copy now states that analysis runs for your account and that your report and the thread used for it may be stored for reopen, history, export, or sharing. Multi-provider flows use similar wording about possible retention of submissions and results.

Improvement

Safety Check: Full conversation reads pasted Markdown as plain text

When a message is not a pattern-highlight row, common Markdown noise (headings, **bold**, simple list bullets) is cleaned up for display so verses and notes pasted from chat match how you read them elsewhere. Rows that use phrase highlighting still show the stored text so matches stay aligned. Self-labeled Me no longer shows a redundant M in the avatar circle (same as You).

Fix

Safety Check: Pastor's Lens examples de-duplicated and clearer labeling

Pastor's Lens message examples no longer repeat the same quoted line when several Bible categories cited it; the list explains that quotes match Bible evaluation sources and are shown once per distinct line.

Improvement

Safety Check: Projected impact only when trajectories name your detected patterns

When the report lists detected patterns, the Projected impact block is kept only if the trajectory text actually names at least one of those pattern titles (or the main part of a compound title before an arrow). Generic five-field essays that never say which pattern they refer to are dropped, with a short note in analysis confidence; analyst instructions spell out the same rule.

Fix

Law lens: readable concern titles and message examples

Legal concern rows no longer show model artifacts like HarassmentIowa when the jurisdiction belongs in its own field, and law Message examples drop the redundant Line N (timestamp): wrapper so the quote matches what you read in the thread.

Fix

Safety Check: clearer pattern examples (possessive quotes, no duplicate line label)

Pattern example cards no longer repeat Line N when the timestamp row already shows it, and quoted snippets fix double-quote-for-apostrophe glitches so possessives (e.g. Emily's mom) read naturally.

Improvement

Safety Check classic: optional Reading mode (compact severity + calmer DSM defaults)

On classic results and on shared report pages (token link and one-time verify link), Reading mode hides the large severity gauge in favor of a one-line severity and confidence summary, starts Risk assessment collapsed, and opens the DSM-5-TR lens in matched-criteria-only view. The toggle is saved on this device (local storage) and stays in sync across those views.

Fix

Safety Check: edited party names carry into relationship step and modal

Names typed for Party 1 / Party 2 on the classic form are now used when the participant modal opens (instead of resetting to the last preview-only labels). The "Name or label for this person" field also stays aligned when it still matched the other party's detected name and that name is corrected.

Improvement

Safety Check: pattern and risk text explains what in the thread triggered each finding

Analyst instructions now require each pattern's description to walk through a plain definition, which specific lines or behaviors met the bar for that pattern, and why the severity sits where it does. Risk assessment reasoning is guided the same way—so escalation and physical-risk settings are tied to what actually appears in the conversation. New runs benefit automatically; the judge also prefers reports that make this evidence-to-criteria link clear for non-experts.

Improvement

Safety Check & longitudinal: screen glossary for abuse behavior terms

DARVO, gaslighting, reactive abuse, and related terms now open in a dedicated screen glossary overlay (large type for projectors and shared screens). The dense link list was removed from inside the DSM lens card; official references stay in a collapsed section inside that overlay, and the Help Center glossary remains for full reading.

Improvement

Safety Check: generic “projected impact” trajectories dropped when they repeat the same template

If all five trajectory blurbs read like the same generic essay (lots of “may / further / distress / escalate”) and never name your actual detected patterns, the report now omits that block and notes why in analysis confidence text—so you are not shown copy-paste filler. New checks get this automatically; the analyst prompt also calls out that shape as forbidden.

Improvement

Safety Check classic results: calmer layout and easier-to-read highlights

On the classic Safety Check results view, quote highlights use softer tints instead of full-saturation pink, pattern example panels and role chips use clearer light-mode contrast, the severity hero is a little less heavy typographically, and the page column is slightly wider with a gentler disclaimer callout so long reports are less tiring to read.

Improvement

Safety Check share by email: optional confirmation inbox

When emailing a public report link, you can choose a different confirmation email (the inbox that receives the link you must click before we mail the recipient). If you leave it blank, we still use your account email as before. The API also returns a clear validation error when no confirmation address is available.

Fix

Safety Check: full conversation dates match SMS/chat export wall times

GilApps-style and similar exports combine a date band with local times; those were previously stored as if they were UTC, so the full conversation panel showed the wrong calendar day or clock time. Parsed rows are now wall-clock values serialized without a misleading Z suffix, and the dashboard formats thread times so browsers interpret that shape as local. True UTC instants (suffix Z) still display correctly. The same thread timestamp rules apply to AI Chat safety-check upload responses and Bible Evaluation uploads so those flows stay consistent with the main pipeline. Exports, example line prefixes, and coach / fight-room context use the same local-friendly formatting for thread timestamps instead of raw ISO strings. Additional plain-text export date-time strings from the flexible parser are also treated as wall-clock (not forced into UTC) so they line up with the main transcript behavior. JSON and CSVexports that use non-ISO date strings now fall back to the same flexible parser instead of silently using “now” as the message time.

Fix

Safety Check schema lens: mode-style hints disclaimer matches conversation source

Mode-style hintsunder the schema lens no longer use the YSQ-R disclaimer ( “Based on this questionnaire…” / YSQ-R profile wording). That text applied only to real questionnaire scoring. Hints from detected patterns now say explicitly they are not YSQ-R responses and not a separately administered SMI.

Fix

Safety Check: DSM exhibitor alignment, reactive-abuse wording fix, severity vs line citations

The main report pipeline now forces pattern participant to match role_labeland the assigned victim/abuser sides when the model mixed them up—so abuser-tagged patterns no longer show as “Exhibited by: Me” while the analysis names the other party. The DSM-5-TR lens uses the same rule when resolving exhibitor. Reactive abusetext that incorrectly said the same person's “responses are reactive to” that same person's behavior is rewritten to name the reader reacting to the other party. Severity scores are capped when Evidence support is only low or medium (thin Line N spread), matching the badge logic. Analyst guidance excludes tagging Emotional Withholding for brief polite or spiritual closings alone (e.g. prayer wishes without a punitive withdrawal pattern). The ensemble judge is instructed to reject reactive-assessment copy-paste errors. The Analyst transcripts—the main generate_report thread and multi-perspective specialists—use the same shared speaker resolution as the Law and Bible lenses. Reactive-abuse feature extraction buckets messages with the same rules (e.g. Human / other roles) so classifier inputs match the transcript.

Improvement

Safety Check: clearer “People in this report” portrait labels

When a thread includes an embedded portrait for only one speaker, the other column no longer shows an amber “Initial fallback used” pill (it read like an error). A green Portrait from thread badge appears only for sides that actually have an inline image; initial-letter avatars stay as the default with no extra warning state.

Improvement

Safety Check DSM-5-TR lens: optional AI “broader chapter themes” in UI and exports (host-configured)

When operators set DSM5_TR_THEME_EXPLORATION=true, the DSM-5-TR lens can add a short Optional: broader DSM chapter themes (AI) panel: reflection bullets aimed at mood, anxiety, trauma/stressor, substance, or related non–personality-disorder chapters—written as clinician prompts, not diagnoses or criterion codes. Default remains off (no extra latency/cost). The structured personality-disorder crosswalk is unchanged. When that panel is present, text, HTML, and CSV Safety Check exports include the same disclaimer, bullets, and optional clinical redirect.

Improvement

Safety Check DSM-5-TR lens: Clusters A, B, and C (all ten personality disorders in config)

The single-conversation DSM-5-TR lens now crosswalks to official criterion rows for all ten DSM-5-TR personality disorders in Clusters A, B, and C: paranoid, schizoid, schizotypal, narcissistic, borderline, antisocial, histrionic, avoidant, dependent, and obsessive-compulsive—with disorder-specific numeric thresholds in the UI. Help, export text, and lens picker copy describe this scope; mood, anxiety, and other chapters outside personality disorders are not crosswalked. Many Cluster A/C criteria use conservative pattern mapping so the lens stays excerpt-grounded.

Fix

Safety Check Law lens: stricter harassment calibration and verified line attribution for citations

The Law evaluation lens now uses tighter guidance so ordinary dispute, church-process, or accountability language is not treated as criminal harassment by default. After the model responds, the server drops any example whose Line N does not point to a message actually sent by the evaluated party—so citations cannot silently attach to the wrong speaker. If nothing valid remains, the concern row is removed and summaries reflect that attribution check. When no violation rows remain, overall, victim impact, and liability summaries are normalized so they cannot overstate concerns while the list is empty. Speaker resolution for each line also accepts common alternate roles (e.g. Human/other) and matches explicit per-message labels when role is missing.

Fix

Safety Check Bible lens: same speaker resolution as Law; Line N required; empty list matches summary

Bible evaluation now uses the same shared thread speaker logic as the Law lens (alternate roles and label fallback), formats the transcript consistently, and drops examples that do not cite a verifiable Line N. When no violation rows remain, the overall summary is normalized so it cannot claim findings while the list is empty.

Improvement

Safety Check DSM-5-TR lens: surrounding transcript lines when an example cites Line N

Pattern Message examples that include a line number now show Surrounding messages from your imported thread (several lines before and after the cited line, with the cited line highlighted). That makes cycles and escalation easier to read than a single excerpt alone. Line badges jump to the full conversation when that control is available.

Improvement

Safety Check lens: message examples use a high-contrast highlight panel for easier reading

Bible, Pastor's Lens, Law, DSM-5-TR, and Schema Message examples now sit on a warm highlighted panel with stronger text and borders so quoted lines are easier to read in light and dark themes—including when lens sections appear below the main report.

Fix

Safety Check: full conversation text lines up with names (no stray character to the left)

In the Full conversation panel, message text now sits in the same column as the sender name instead of starting at the far left of the card. That removes the look of a single odd character sitting below and left of the name (often the first highlighted character). Sender labels also strip invisible Unicode from exports, and initial avatars use a full grapheme so emoji names do not split into a broken glyph.

Fix

Safety Check multi-part: parts no longer fail when one stretch of the export is one speaker

For long conversations analyzed in multiple parts, each part now keeps at least one message from you and one from the other person whenever the full thread has both—even when a size limit would have cut a chunk in the middle of a long run from one side, or left a short one-speaker tail at the end. That avoids a false “could not map first and second party” stop on part 2 when you cannot control the export format.

Improvement

Communications Wizard: share and external email stay available after you send

After you send a message, the share panel (copy link, Send in Messages, email link to partner, and share to an external email) no longer disappears automatically. Use Dismiss when you are done. For any message you sent, open it in the list and expand Share this message in the reading pane to use the same options later.

Improvement

Everyday AI Assistant: simpler chat (no copy, regenerate, reactions, or suggestion chips)

The Everyday AI Assistant conversation view no longer shows Copy, Regenerate, thumbs up/down, or follow-up suggestion chips (for example “Summarize that in one sentence”). You can still edit your own messages to resend, use search and export, and adjust options as before.

Improvement

Communications Wizard: share from sent messages, dismissible confirmation, reliable external share

After you send a message, the success notice and share tools stay visible until you dismiss them (they no longer disappear on a timer). On any message you sent, open Share this message to copy the wizard link, send it in Messages, email the link to your partner, or use external email share. External share uses the saved message id for the message you sent, so recipients see the correct content.

New

Emily Chat: New AI assistant with extended thinking and model switching

Introducing Emily Chat — a dedicated AI assistant experience inspired by Claude Sonnet 4.6 Extended Thinking. Emily provides thoughtful, nuanced responses with deep reasoning while remaining conversational and warm.

  • Extended thinking mode — Emily explores multiple angles before concluding and acknowledges complexity in responses
  • Smart model selection — Automatically picks the best AI model based on your question complexity (vision, fast, capable, or premium models)
  • Instant model switching — Type commands like /claude, /gpt4, /deep, /fast to switch AI models on the fly
  • Voice conversation mode — Enhanced two-way voice chat for hands-free interaction
  • Fully responsive design — Optimized for desktop, tablet, and mobile with sidebar navigation and touch-friendly controls

Access Emily Chat from the dashboard sidebar. Type /help in the chat for all available model commands. The existing Everyday AI Assistant remains available at /dashboard/ask-emily.

Improvement

Dashboard: merged Reflections and Check-ins into Self-Reflection section

The AI-Powered Suggestions section on the dashboard now shows a unified Self-Reflection column that combines both Reflection prompts and Check-in ideas. This creates a more cohesive experience for introspective activities, showing alternating reflection and check-in suggestions in a single, streamlined view.

New

Safety Check: upload PDF, Word documents, and images

You can now upload conversations in more formats beyond SMS exports: PDF files, Word documents (.docx), and images (JPG, PNG, GIF, TIFF, WebP, BMP).

  • PDFs — text is extracted page-by-page and parsed as a conversation
  • Word documents — paragraph text is extracted and processed
  • Images — text is extracted using AI vision (Gemini) to read screenshots, scanned documents, or photos of conversations

All file uploads have a 50 MB size limit. After text extraction, the conversation is analyzed just like pasted text or SMS exports.

Improvement

Safety Check: inline help when the thread needs clearer two-party labels

When the server cannot map two distinct speakers, the dashboard shows the guidance in a banner above the paste area (as well as the toast), with Dismiss. Editing pasted text or choosing a new file clears it.

Improvement

Safety Check: polished full conversation view with attachment chips

The Full conversation panel now shows file attachments (images, PDFs, documents) as styled chips with file type icons instead of plain text. Attachment-only messages show a clearer indicator, and rows have improved hover states and visual hierarchy.

New

Safety Check: ensemble judge with confidence scoring and alternative hypotheses

The Safety Check now uses an ensemble judge that analyzes reports from multiple AI models, quantifies confidence for each detected pattern, and flags when models disagree.

New in results:

  • Pattern confidence scores — see how much the models agreed on each pattern (with confidence intervals)
  • Temporal dynamics — escalation velocity and cycle detection for patterns that change over the conversation
  • Alternative interpretations — when confidence is mixed, see other possible explanations (e.g., situational conflict vs systematic abuse)
  • Dissent flags — highlighted warnings when models disagree on severity or interpretation

This provides more transparency into how the analysis was derived and helps you understand which patterns are high-confidence vs. those that warrant additional consideration.

New

Safety Check: multi-perspective specialized analysis and evidence kit export (Premium)

Two powerful new features for premium Safety Check users: specialized analysis and evidence kit export.

Multi-perspective specialized analysis:

  • Forensic Linguist — analyzes control tactics, manipulation structures, and linguistic escalation patterns (DARVO, gaslighting, love-bombing cycles)
  • Trauma Specialist — trauma-informed impact assessment, coping mechanisms, and evidence-based safety planning; non-pathologizing and stabilization-focused
  • Legal Evidence Reviewer — evaluates evidence quality, admissibility, and protective order alignment

Evidence kit export:

  • Tamper-evident PDF with complete analysis and chain of custody
  • JSON export for machine-readable documentation
  • Cryptographic SHA-256 hashes for integrity verification
  • Verification statement for legal proceedings

These features provide professional-grade analysis for documentation, therapy preparation, and potential legal use. Consult a legal professional for admissibility guidance.

Improvement

Safety Check: clearer results layout, richer history comparison, stronger report guidance, optional in-depth on import

The results view now puts Risk assessment right under the severity hero, keeps Immediate guidance easy to find, and tucks longer sections (projected impact, reactive details, coping strategies) behind collapsed panels by default so the page is easier to scan.

History contextgroups past-check notes, comparison bullets (including stable baselines, recurring patterns, and role consistency when data is available), and optional timing detail in one card. Import “Send to Safety Check” can use in-depth analysis when you have premium credits.

Behind the scenes: multi-analyst guidance is merged after the judge, the judge sees both ends of long transcripts, longitudinal summaries are clearer for the models, and prompts emphasize specific next steps tied to your thread.

Improvement

Practice documentation: ICD-10-CM suggestions use an embedded behavioral-health code reference

Treatment-plan and note-based ICD-10 suggestions are cross-checked against a curated set of common mental/behavioral F-codes and Z-codes so descriptions stay aligned with standard terminology for charts, care coordination, reporting, and billing when the model is vague. Always verify codes against the current CMS ICD-10-CM tabular list, your institution, and payer rules.

Improvement

Help: DSM-5-TR clinician guide—differential sequence, criteria elements, APA resources

DSM-5-TR & clinical documentation now summarizes the six-step differential framework, symptom count/duration/impairment and specifiers, manual-associated assessment aids (with APA links), and why the manual is not for self-diagnosis—with Find a Psychiatrist and SAMHSA helpline. Maintainer doc docs/reference/DSM5_TR_ACCESS.md matches.

Improvement

Safety Check: results disclaimer and coach handoff take the analysis seriously

The results notice and Universal Chat handoff no longer frame the report as “not a real assessment.” Copy now states what the tool can and cannot see from the pasted thread, affirms your judgment when findings match your experience, and still points to crisis lines and in-person help when risk or decisions need a full context.

Fix

Notifications: bug-report alerts open a real view; dashboard links and absolute URLs fixed

Clicks from the notifications list and dashboard widget now normalize links (including full site URLs and legacy /api/bug-reports/… paths) so they navigate correctly in the app. Opening a report via ?bugId= shows your submission with status, optional resolution notes, and read-only fields, plus shortcuts back to notifications or a fresh report form. The API also treats you as the owner when your email matches older rows that had no user_id.

Fix

Safety Check: strip leaked markdown (* / **) from pattern text, examples, and sender labels

When the model or an import left bold markers in plain text (for example * *The takeaway instead of a real name), those tokens are removed for display so pattern cards, evidence lines, and the conversation thread show readable speaker labels.

Fix

Safety Check: honest streaming progress and correct “who is you” on parenthetical names (e.g. Dad (Allen) …)

The streaming Safety Check card no longer flashes through fake “analyst 1/3” steps; it stays on a single AI safety review step while the real report runs (with copy that long threads are normal). Participant detection from pasted exports no longer treats the last name before the time as the second person when the label includes parentheses (e.g. Dad (Allen) Ramberg (6:03 AM)). Auto-select of “which name is you?” no longer matches your email local part as a substring inside the other person’s name (e.g. allen inside Allen in their display label).

Improvement

Safety Check: clearer names and layout in the full conversation panel

Generic thread labels like You, Them, or Person 1 are replaced with your saved participant names when the report has them, so the thread matches the rest of the report. Timestamps sit on their own line under each sender (easier to scan). The intro explains that some imports split long messages or attachments into multiple numbered rows that still align with Detected Patterns.

Improvement

Safety Check: full-sentence highlights in the conversation

In the full conversation panel, pink highlights now expand from each matched phrase to the whole sentence (using line breaks and . ! ? as boundaries, without splitting on decimals like 3.14). If a bubble has no sentence punctuation, the entire message is highlighted when a pattern quote matches inside it.

Improvement

Safety Check exports: clarify when primary victim/abuser show “Not determined”

Text, HTML, and CSV exports now include a short note when formal Primary victim / Primary abusertracking labels were not set on that run, so “Not determined” does not contradict pattern attribution or narrative reasoning elsewhere in the report.

Fix

Safety Check streaming: fewer server errors after long analysis

Long streamingSafety Check runs no longer keep an idle database connection open for the whole request, and teardown handles dropped Postgres/SSL links gracefully. That avoids rare “response already started” crashes when the analysis finishes after a long wait.

Improvement

Safety Check: clearer live progress (no raw “saving” label)

The streaming progress card shows one clear status line (and an optional short subline) instead of internal step names next to the message. The quick Safety Check dialog title and footer are tightened up for a calmer in-progress state.

Improvement

Safety Check: full-thread analysis and clear wording when no primary abuser is assigned

Analyst instructions now require weighing every line in the transcript, not just the start or end. When the evidence does not support naming one person as the primary abuser, the report can leave those roles unset and explains that in role determination. The results screen shows that section (with a short intro) even when no abuser/victim badges apply. Dashboard and streaming checks use the same role logic as the main pipeline after the AI report is built.

Improvement

Safety Check: obvious banner when you get a simplified (fallback) report

If full AI analysis times out, fails, or is unavailable but the check still returns a minimal report, a clear Simplified report alert now appears above the results (with Try again when retry is possible). Previously that case looked like a full report because the old notice only showed when no report object was returned at all.

Fix

Safety Check: pattern examples and evidence-support badge

Evidence support now reflects how many different line numbersyour examples cite—not whether the pattern is “proven.” Repeating the same line no longer reads as “high” just because there are several snippets. Example lines with messy quotes (for example Name"s: before the real message) show the longest sensible quoted text so the conversation excerpt is readable.

Improvement

Safety Check: clearer styling for Projected impact trajectories

The Projected impact section now shows each trajectory (victim, abuser, relationship, with/without intervention) as its own card with a color accent, icon, and easier-to-scan typography in both light and dark report themes. The section opens by default when the report includes trajectory text, so you do not have to expand it first. Print / Save as PDFuses the same card layout (no longer buried inside “Analysis details” as one plain paragraph).

Fix

Bible Evaluation (and Safety Check Bible lens): quote speaker checks

Reports now require line-attributedexamples tied to the evaluated person's messages, and the model is instructed not to claim “no violations” for that person when concerns are listed. The server drops examples whose cited line is from the wrong speaker and fixes summaries that contradict the violation list.

Improvement

Safety Check: more specific projected impact (future trajectories)

The Projected impact section is guided to stay tied to this conversation: each trajectory field should reference concrete patterns or tactics from the report, avoid copy-pasting the same paragraph across fields, and keep physical-risk language aligned with what the text actually shows.

Improvement

Safety Check: clearer full-thread text, empty-line recovery, shared/saved paste backfill

In the full conversation panel, message text uses higher contrast in light and dark themes, and timestamps are easier to read on dark backgrounds. If a saved line has no stored message body but your original paste still matches the same number of lines, the UI fills that text from the paste when possible. New saved checks (paste path) also store that paste on the report when needed so shared linksand reopening a saved run can recover the same lines. Otherwise you'll see a short explanation instead of a blank bubble.

Improvement

Safety Check: distinct emoji tiles on detected pattern cards

In Detected Patterns, each pattern card now has its own emoji tile (for example gaslighting, DARVO, isolation, love bombing) so behaviors are easier to tell apart at a glance. The numeric severity badge still uses the existing severity icons.

Improvement

Safety Check: report number on results and admin lookup

Saved Conversation Safety Check results now show a clear Report # in the header (same id as the database run). Downloads and print/PDF exports include a matching Report reference number. In Admin → Safety Check Runs Analysis, use Look up report or ?runId= in the URL to open that run for review.

Improvement

Universal AI Chat: clearer voice mode, better read-aloud, and typing effect

Voice conversation uses a ChatGPT-style round voice control, prefers a more natural browser voice when available, and says AI coach in read-aloud instead of legacy name mentions. After the coach finishes speaking, the microphone can reopen automatically so you can reply by voice; assistant replies also animate with a slightly slower, easier-to-follow typed reveal.

Fix

Safety Check: calibrate physical-violence predictions to the conversation text

Analysis prompts now require quoted or clearly referencedthreats or harm before predicting physical violence or filling “without intervention” with a physical outcome. Emotional and psychological abuse can still be flagged seriously; escalation language distinguishes relational/emotional risk from physical risk when the text does not support the latter. The risk section includes a short note explaining this for readers.

Fix

Safety Check schema lens: clearer who each theme applies to

In the Schema lens section, themes grouped by participant now explain that activation scores reflect patterns attributed to that person. When the model omits per-message attribution but labels victim/abuser roles, those patterns are grouped under the correct side. Unattributed patterns use clearer wording and guidance to check the main pattern list.

New

Safety Check: simple wizard opens as a popup

On the main Safety Check page, use Simple wizard (popup) for a short two-step flow in an on-screen dialog (paste or upload, then relationship and optional lenses). Results appear in the same window with a shortcut to the full original report. Add ?popup=1 to the Safety Check URL to open it automatically.

Improvement

Safety Check: step-by-step wizard route restored

The wizard is available again at /dashboard/safety-check/wizard, including optional generic labels (“You” / “Other person”) and custom names for each side in the report. Opening a saved run with runId still uses the original streaming flow.

Fix

Safety Check: full conversation shows complete highlighted messages

In the floating Full conversation panel, messages that match detected patterns now show the entire message text (with phrases still highlighted), instead of a shortened sentence window around the match.

Improvement

Safety Check simple popup: names and optional photos

The quick Simple wizard (popup)now fills the other person's name from detected speakers when there are two, tries to match your account name or email to Which name is you?, and adds optional JPEG/PNG/WebP photos for each side (same behavior as the full wizard), including on the streaming request.

Fix

Safety Check: pattern examples no longer show model rubric after quotes (e.g. “initial support and validation”)

The pipeline strips trailing parenthetical analyst labels models sometimes add after the closing quote (such as initial support and validation), and the analyst prompt forbids that format. Pattern cards show verbatim dialogue only for the quoted part; interpretation stays in the pattern description.

Improvement

Safety Check: Risk Assessment explains escalation vs physical violence

The Risk Assessment intro now states that escalation likelihood covers intensifying harmful dynamics (including emotional distress and coercion), separate from physical violence risk. It notes that high escalation with low physical violence risk is a common pattern when the thread shows serious emotional harm without described threats or bodily harm—so the three fields read as complementary, not contradictory.

Fix

Safety Check: Evidence support high requires three distinct line numbers

The pattern-card Evidence support badge now matches the helper text: high requires at least three cited examples on three different transcript line numbers. Three examples that only span two lines rate medium. Two examples on the same line rate low (previously medium).

Fix

Safety Check: clearer evidence-guardrail note when only examples are trimmed

When the server drops individual pattern quotes that don't match the transcript (but keeps every pattern card), Analysis & processing notes no longer shows (0 pattern(s), N example(s)), which read like a contradiction. The text now states that only examples were removed and that all listed patterns remain.

Fix

Safety Check: role determination intro matches narrative when formal labels are unset

When the report keeps a written role summary but does not set the formal victim/abuser labels for you vs. the other person, the intro no longer says no primary abuser was identified—so it cannot contradict a summary that still describes who showed harmful patterns. The note now explains that missing labels are about tracking slots, not pattern attribution.

Improvement

Safety Check: guardrail banner opens and scrolls to Analysis & processing notes (deep link)

If the server removed or tightened examples or guidance so they match your paste, a short Report adjusted to match your transcript notice appears under the severity hero. Open Analysis & processing notes expands that section and scrolls to it; opening the report with URL hash #safety-analysis-processing-notes does the same.

Fix

Safety Check: server guardrail drops cordial-only examples on severity 7+ patterns

After transcript grounding, high-severity pattern cards no longer keep examples whose only cited text is a trivial acknowledgment (e.g. thanks, ok, u2) unless other substantive quotes remain. Prompts and the judge also warn against tagging DARVOon the wrong speaker when quotes are only the other person's confrontational labels without a clear deny-attack-reverse sequence from the attributed party.

Improvement

Safety Check: analyst prompts and judge reject “thanks-only” evidence on serious patterns

Report generation now instructs models not to treat isolated pleasantries or bare acknowledgments as the main proof for high-severity control, cycle, or withholding patterns, and the judge step penalizes thin evidence. When a transcript line and pattern attribution disagree, the pattern card shows a clearer Check attribution callout above the line metadata.

Fix

Safety Check: pattern examples must match real transcript lines and the attributed speaker

When a pattern is tied to you vs the other person, each example is checked against the threaded messages: the cited line must contain the quoted or matching text, and the message must be on the correct side (your rows vs theirs). Examples that only looked like a line number, or that quoted the wrong speaker for that pattern, are dropped so cards rely on grounded evidence. If something was removed, Analysis notes may mention the evidence guardrail.

Improvement

Safety Check: unified colors for Projected impact trajectories

In Projected impact, the five trajectory blocks (victim, abuser, relationship, without intervention, with intervention) now share the same sage accent, border, and background tint so the section reads as one calm panel instead of five different hues.

Improvement

Logo and default brand identity now use Toxic Partner

Updated the shared site branding defaults to Toxic Partner, including the primary logo asset, default app title, default support/contact addresses, and SEO metadata copy used across public pages.

Fix

Legacy domain redirect now enforced at the edge

reflectwithemily.com and www.reflectwithemily.com are now forced to redirect at nginx for every path, so the legacy host cannot serve app pages or API routes and always forwards to toxicpartner.com.

Improvement

Legacy domain reflectwithemily.com now forwards to toxicpartner.com

Visitors who open reflectwithemily.com (including www) are now sent to toxicpartner.com with the same path when possible, using a permanent redirect so bookmarks and links update over time.

Improvement

Conversation Safety Check: semantic hero, pattern cards, and sage accordions

Results now sit in a clearer report shell with semantic surfaces, a tighter title and disclaimer block, and a calmer glossary strip. Longitudinal and timing callouts under the report use the same dashboard tokens for borders and text. The crisis-resources strip and the “Ready to take action?” hub use sage-accented cards and tiles instead of a heavy purple gradient, with clearer typography and focus rings. Confidence bar, pattern filter chips, summary-strip CTAs, and conversation jump controls now use sage, blue accent, and semantic focus rings instead of purple. The severity hero, pattern cards, role determination, people block, processing log, and analysis notes use semantic surfaces and text tokens; analysis accordion uses a sage icon theme and shared focus rings on headers.

Improvement

Safety Check export: control names, sections, and quoted text

Under Export report, you can show your side as You (without your display name), set an export-only label for the other party, and open Choose sections and quoted text to include or omit crisis resources, patterns, lenses, examples, trends, role lines, metadata, and next steps across text, PDF, and CSV. CSV pattern rows now include a dedicated Examples column when you allow pattern quotes.

Fix

Safety Check DSM-5-TR and schema lens: clearer roles, codes, and quote colors

When the model skips per-pattern participant tags, the pipeline now infers reader vs other from reactive assessment, victim/abuser roles, and line headers in quotes, so the DSM-5-TR per-person summary and criterion crosswalk attribute evidence correctly. Lens pattern rows use the same red (other) and blue (you) accents as the main report; schema lens examples use the same quote coloring when the speaker can be read from the line. If the full criterion table is missing for a run, an on-screen notice explains it.

Fix

Communications Wizard now requires choosing a Messages recipient

After sending in Communications Wizard, the share flow no longer auto-targets your partner by default. Send in Messages now stays disabled until you explicitly choose who should receive the link.

Improvement

DSM-5-TR lens now highlights matched criteria with clear evidence

The Safety Check DSM-5-TR lensnow makes each criterion easier to review: matched criteria are visually highlighted, each row includes a plain-language “why this matched” explanation, and supporting message excerpts are shown in clearer quote blocks with line, speaker, and timestamp context. Disorder cards now also show full diagnostic code context and the diagnostic criteria statement.

Improvement

Safety Check lenses: clearer who said what and quoted message examples

Bible evaluation, law evaluation, Pastor's Lens, and schema lens sections now spell out which participant quoted lines come from (using your names when the run includes them). Law rows use the same “Message examples” pattern as Bible rows, and the schema lens can surface short quoted lines from detected patterns next to each theme.

Improvement

Safety Check exports now default to cleaner DSM labels

Safety Check export options now default DSM lens labels to plain-language wording and add an opt-in checkbox to include technical DSM domain names when needed for advanced review.

Improvement

Safety Check now includes Universal AI Chat follow-up across all modes

Safety Check results now offer the same Discuss in Universal AI Chat follow-up from classic, wizard, cards, minimal, and guided modes. Reports now include a structured coaching follow-up block with de-escalation steps and confidence-aligned guidance wording, plus clearer top-of-report action shortcuts.

Improvement

Safety Check unified modes and clearer longitudinal labels

Safety Check now uses one entry flow with internal mode switching (Quick, Guided, Cards) plus shared scoring guidance. Longitudinal Evaluation now supports standard and technical views, and report/export surfaces show friendlier domain labels while preserving technical labels for advanced users.

Fix

Longitudinal report: known relationship filter, split summary, and relationship arc

The Longitudinal Evaluation relationship filter now uses a dropdown built from relationships that already have longitudinal data, instead of free text. InAll relationships mode, the summary now shows a split by relationship context instead of one combined aggregate, and adds a per-relationship arc (trend + sparkline) with one-click filtering into that specific relationship.

Improvement

Safety Check mobile results: clearer summary and less CTA overlap

Safety Check results now add mobile-safe bottom spacing so fixed actions do not cover report content, a new quick summary block near the top for faster scanning, and cleaner strategy cards with clearer labels. Duplicate AI coach prompting in the results actions area was also reduced to keep the primary next step simpler.

Improvement

Safety Check quality operations v2: adjudication, drift alerts, and remediation queue

Admin Safety Check quality now includes a reviewer rubric and adjudication workflow, weekly drift alerts with report persistence, per-run prompt/guardrail version metadata, and a structured remediation queue linked to root-cause buckets.

Improvement

Support Assist one-click helper approval and stronger internal connection reliability

Support Assist now supports a simpler flow: helpers enter a session code and request access, then the customer approves in one click. Under the hood, Support Assist now supports shared signaling via Redis for multi-instance reliability and backend-managed TURN/STUN ICE configuration (including ephemeral TURN credentials).

Fix

Safety Check share verify page now redeems on click

One-time Safety Check verify links now wait for an explicit Open report click on the verify page before redeeming the token, reducing failures caused by automatic email link previews consuming the link before you use it.

Improvement

Safety Check: revoke partner access after Share with partner

In Save & share, when a report is already shared with your Couples Connect partner, you can use Revoke partner access to remove it from their Shared with you list. Public timed share links are unchanged—use Revoke share link for those.

New

Import ChatGPT conversation history

New Import ChatGPT history at /dashboard/import/chatgpt: consent, preview, analyze, and import official exports (ZIP or conversations.json). Also linked from the main Import page and site search.

Improvement

Safety Check: clearer two-party paste guidance and common partner labels

When pasted text cannot be split into two speakers, the error message now explains concrete line prefixes (for example Me vs a name, or You sent vs their name) and reminds you to try the other option under Which person are you? when that step appears. Parsers also treat labels like Partner and Spouse as the other side when they match exactly.

New

Support Assist screen share with consent-based helper pointer

Added Support Assist Screen Share at /dashboard/support-assist: end users can start a session, explicitly grant one internal helper by account email, stream their screen, and receive live laser-pointer guidance. Owners can revoke helper access or end the session at any time; v1 does not allow remote keyboard or mouse control.

Improvement

Everyday AI Assistant: ChatGPT-style chat, full context when streaming, less template-y replies

Everyday AI Assistant now uses the same system context for streamed and non-streamed replies (including Reflect ecosystem context when enabled), a shorter default persona prompt, and backend guidance so answers stay conversational instead of echoing rigid bullet templates or bracketed context labels. The empty state and user message bubbles are tuned to feel closer to a standard chat assistant.

Improvement

Legacy Settings and Send documents links; Messages and Everyday AI Assistant wayfinding

/dashboard/settings and /dashboard/send-documents no longer redirect immediately: each shows a short hub with explanation, primary button to Account settings or Send documents (admin), quick links, and the standard footer. Opening Settings with the subscription tab query jumps to the plan section on Account. Messages adds a dashboard home control in the top bar. Everyday AI Assistantuses the same "Dashboard home" breadcrumb label, skips duplicate dashboard breadcrumbs, and hides the bottom nav on mobile like other chat surfaces.

Improvement

Project inventory: dashboard hub layout

The internal Project inventory page (password-gated when configured) now uses the shared dashboard hub: back to home, the same summary line as before, quick links to Find your tool and Admin, plus the standard browse footer. The stone-toned page background is preserved.

Improvement

Safe Chat Storage: dashboard hub layout

Safe Chat Storage now uses the shared hub: back to the dashboard home, a concise description of what the tool does, quick links to Import, AI Chat, and the Frankenstein analyzer, plus the standard browse footer. Loading shows the same shell with a short status line.

Improvement

Preferences: dashboard hub layout

The Preferences page now uses the shared dashboard hub: back to home, a short summary of what you can change here, quick links to Settings, Account, and the notifications inbox, and the standard browse footer. Layout matches the rest of the dashboard for consistent navigation and accessibility.

Improvement

Account settings: dashboard hub layout

The Account settings page now matches the shared hub pattern: back to the dashboard home, a short purpose line, View pricing beside the title, quick links to Settings, Preferences, and Report an issue, and the standard footer. Loading uses the same shell with a clearer status line instead of duplicating title skeletons.

Improvement

Mobile bottom nav: Safety Check and Therapeutic hub

The dashboard bottom bar on phones now includes Safety and Therapy next to Find, so Safety Check and the therapeutic tools hub are one tap away without scrolling the full catalog. The same shortcuts appear on the practice mobile bar (after Find) for quick personal-tool access; the row still scrolls horizontally when needed.

Improvement

Dashboard search: wider everyday and task wording

Header search now recognizes more plain-language intents across the app — for example stress and overwhelm for check-ins, DMs and social threads for Safety Check, paste and backup wording for import, billing and copay language for practice, boundary and apology drafts for the communications wizard, custody and family-court phrases for case prep, plus richer matches for journal, AI chat, couples, schema questionnaire, hard conversations, and longitudinal reports.

Improvement

Search: Help matches more wayfinding phrases

Typing things like how to find things, lost on dashboard, or orientation in the header search now surfaces the Help center more reliably, alongside existing FAQ and navigation wording.

Improvement

Messages, account, and preferences: browse footer

Messages (bottom strip), Account, and Preferences now include the same footer as other dashboard areas: all tools, Find your tool, and Help. Notifications already used the hub layout with that footer.

Improvement

Five more areas use the dashboard hub layout

Accountability, Saved Insights, Memory & context, NPD Watch, and My Sessions now share the same hub shell: back to home, task shortcuts where it helps, and the standard footer. NPD Watch keeps its live refresh; sessions and memory content are unchanged aside from chrome.

Improvement

Weekly Review and Next Generation use the shared hub layout

Weekly Review and Present for the Next Generation now match other dashboard hubs: back to home, quick task shortcuts at the top, and the standard footer to all tools, Find your tool, and Help. The help icon and guided cards on Next Generation are unchanged.

Improvement

Repair hub matches other dashboard hubs

Repair (from dashboard home and check-ins) now uses the shared hub layout: back to home, three quick shortcuts to the in-app worksheet, Cycle Breaker, and conversation prep, plus the usual footer links to all tools and Help. The same four repair paths as before are still on the page.

Improvement

Dashboard breadcrumbs behave on narrow screens

Long Home > … > page trails no longer force the whole dashboard to overflow horizontally on phones: crumbs sit in a single scrollable row with ellipsis on very long names, and the layout wrapper passes width through correctly so flex layouts stay stable.

Improvement

Goals & Self-Reflection Chat: browse footer; hub footers match dashboard colors

My Goals and Self-Reflection Chat now include the same footer as other hubs (all dashboard tools, Find your tool, Help). The browse footer on hub pages uses the dashboard sage link color and semantic borders so it matches the rest of the member dashboard.

Improvement

Find your tool matches the dashboard hub pattern

Find your tool now uses the same hub shell as other dashboard areas: clear back link to home, three quick task shortcuts (Safety Check, daily check-in, AI Chat), the standard footer to all tools and Help, and a reminder about Cmd/Ctrl+K search. The step-by-step wizard is unchanged.

Improvement

Search and account menu: shortcuts without the keyboard

Tapping or focusing the dashboard search field (including on mobile after you open it) now shows the same grouped shortcut list as Cmd+K / Ctrl+K, and clearing the field brings that list back. Under your account menu, Support includes Find your tool and How to find things (Help) with a jump to the Help page section on discovery.

Improvement

Find your tool, longitudinal report, and case prep: browse footer

The same footer used on major dashboard hubs — links to all dashboard tools, Find your tool, and Help — now appears at the bottom of Find your tool, Longitudinal Evaluation, and Case prep so you can leave those flows without hunting for the dashboard.

Improvement

Dashboard home: quick task chips and more search coverage

The Start here card adds shortcuts to Safety Check, the schema questionnaire, Couples, and (for practice access) billing. All tools now links to Help for finding your way. Site search includes the therapeutic tools hub, activity history, and broader everyday keywords; empty-query search surfaces Therapeutic tools, Hard conversations, and Self-Reflection Chat earlier in the list.

Improvement

Dashboard search: grouped shortcuts when you open with the keyboard

When you open header search with Cmd+K / Ctrl+K (or /outside a text field), the suggestion list is now organized into small sections — find your way, therapeutic & conversations, daily & chat, practice, and account & help — so it reads more like a light command palette than one long list.

Improvement

Dashboard home: “What do you need?” and smarter search matches

The Today section leads with a clear path to Find your tool, plus Search dashboard (jumps to header search with your Cmd+K / Ctrl+K hint) and Browse all tools (scrolls to the full catalog). The All tools block has a stable in-page anchor for that jump. Header search matches more everyday words — e.g. text conversation for Safety Check, therapy chat for Therapeutic chat, feelings and mood language for check-ins, venting terms for AI chat, practice billing and payments, schema program hub and YSQ, hard conversations, drafting a message, importing or pasting a chat (including WhatsApp-style wording), worry and safety around texts, Case prep for legal preparation, and casual phrases like “not sure” for wayfinding. Search also lists Schema tools for couples (e.g. mode cycle, connection dialogue) and extra YSQ-R wording on the schema program hub.

Improvement

Dashboard hubs: same quick tasks and “all tools” links

Major hub pages (Therapeutic tools, Schema program, Schema tools for couples, Safety Check design picker, Wizards index, Hard conversations guide, Kids Connect, Practice Management, Admin, and Couples—including invite and error states on Couples) now share a consistent pattern: three tappable task shortcuts where it fits, plus a footer to All dashboard tools, Find your tool, and Help so you can jump out without memorizing names.

Improvement

Dashboard home: “All tools” always visible with jump-to chips

The All tools area on the dashboard home page no longer hides whole categories behind accordions. A sticky row of chips jumps to Therapeutic, Growth, Safety, Connection, and the rest; Stay connected and Wizards subsections stay open so partner, family, and wizard tools are visible without extra taps.

Improvement

Dashboard mobile: Find and search easier on the home screen

The bottom navigation bar now includes Find (opens Find your tool) so task-based wayfinding is one tap away, including on the practice mobile bar. On the dashboard home header, search appears at the top on phones so you can jump to any tool without scrolling past the welcome area first.

Improvement

Dashboard: keyboard shortcut for site search

On most dashboard pages and on Devotion Connect, Ctrl+K or Cmd+K opens the header site search and shows quick picks (arrow keys and Enter work like before). Ctrl+/ or Cmd+/ does the same except on Universal AI Chat, where that shortcut still focuses the composer. Press / when focus is not in a field (and not in the communications wizard) to open search. Universal AI Chat and legacy dashboard chat keep their own Cmd/Ctrl+K behavior. In full Practice Management, Cmd/Ctrl+K still opens the practice command palette; on the practice upgrade screen only, the shortcut uses site search. The search field shows a small key hint on wider screens. Quick picks under Therapeutic & conversations now include Schema program and Schema tools for couples next to the main therapeutic hub, Safety Check, and Hard conversations. Additional sections cover Relationship & family (Couples, Kids Connect), Wizards, Draft & import (Communications Wizard and Import conversation), Insights & reports (Longitudinal report, Case prep, and My Sessions / activity history), and the usual Practice and account links. Daily & chat includes Journal (reflections) after goals; the palette shows more rows so nothing is cut off.

Improvement

Journal in Quick Access and clearer dashboard styling

Quick Access now lists Journal (same place as before: prompts, responses, and insights) and opens /dashboard/journal, which redirects to your reflections. The dashboard home uses shared design tokens for primary buttons, card text, and focus rings so light and dark mode stay consistent. Product docs note that a separate “saved insights” library waits on a future API; insights still live inside each reflection.

Fix

Couples: partner-shared Safety Check opens the report

From Dashboard → Couples, Shared with you now opens the shared report in the original Safety Check flow. Links to /dashboard/safety-check?partnerSharedRunId=… redirect there as well, so bookmarks still work.

While the shared report loads, you see a clear loading state (not the empty paste form). If it cannot open, you get a short explanation and links to Couples or Safety Check. After buying in-depth credits, return still lands on the classic flow without dropping a partner link. Wizard multi-part results now include working Share with partner and public link controls for the selected part—same as single-report results.

Starting a new check, running analysis, opening a saved run, or clearing the partner URL resets partner view correctly so Save & share shows again for your own reports. Couples → Shared with you shows a retry if the list request fails and hints when the list is empty.

Fix

AI chats: message area stays stable while you type

Dashboard Chat, Therapeutic Chat, Bible Research, and Fight Room now keep the composer draft separate from the transcript, so the message list no longer re-renders on every keystroke. Universal AI Chat already used an isolated composer; its input focus scroll was tuned for less jank.

Improvement

Safety Check: resume multi-part runs after a failure or cancel

If a multi-part analysis stops partway (including when live progress falls back to sequential API calls), the form can save the queue. Use Resume to restart from the failed part or an earlier part, or Dismiss to clear the saved queue and start fresh.

Available on the original single-page flow at /dashboard/safety-check/classic (linked from Safety Check designs) and on the Wizard when you choose separate reports per split part.

Improvement

Safety Check: clearer status and “while you wait” banners during analysis

The full-screen progress view now includes a pipeline status banner that follows each step (parsing, pattern scan, specialist review, report build), plus rotating process insights about timing, splits, and what to expect. Multi-part and fallback runs show extra context on the page; the queue card explains how parts connect to your timeline.

Improvement

Safety Check: smarter party detection, split guidance, and chunk size input

Auto-detect and the participant step now infer Me, You, and similar export labels so Party 1 / Party 2 and "which party are you" pre-fill more often (you can still change them).

When a long conversation is split for multi-part analysis, the dialog explains why parts are suggested, typical messages per part, and timeline span when timestamps are available.

In Cards/Wizard split options, max messages per chunk is a text field with clear validation instead of only a number stepper.

Fix

Password reset: reliable email send and token handling

If the server could not send a reset email (for example Gmail or delegation misconfigured), the app no longer shows success while invalidating your previous reset link. You get a clear error and can try again; when email works, older unused links are retired only after the new message is sent.

Fix

Safety Check: long multi-part runs no longer fail silently

If the live analysis stream stopped early (for example network or proxy timeout on very large splits), the app could return to the analyze step with no report and no message. The client now treats an incomplete stream as an error with clear guidance, only advances to the next part after a successful report, and allows longer waits (10 minutes) to better match the backend. Production nginx sample config includes a dedicated long-timeout path for the analyze-stream endpoint.

Fix

Safety Check: pattern text must not use the same name as both actor and target

Analyst and judge guidance now forbid self-referentialwording (e.g. one person "dismissing" their own feelings under the same label). Empathy failure and other dyadic patterns must name reader vs other correctly so descriptions match a two-person thread.

Fix

Safety Check: Entitlement pattern must match quotes and speaker (structure vs pushback)

Further analyst, judge, and synthesis instructions: a brief question about predictability (e.g. "Why the structure?") is not Entitlement by itself. If one person proposes a regular time or repair deadline, do nottag the other for "expecting" that schedule when their lines only question it. Descriptions must match the same speaker as the quoted evidence; otherwise omit Entitlement and note it in confidence notes.

Fix

Safety Check: full conversation bar clears the mobile bottom nav

On narrow screens, the floating Full conversation control (expand/collapse the thread on results) now sits above the dashboard bottom navigation and uses the same stacking layer as other fixed dashboard actions, so it stays tappable instead of being covered.

Fix

DSM-5-TR per-person summary now reflects detected patterns

The DSM-5-TR lens per-person summary previously showed "No criterion items were linked" even when pattern indicators were clearly attributed to a participant. This happened because many LLM-generated pattern names (e.g. "Blame-Shifting & DARVO", "Reality Distortion") did not match the criterion crosswalk configuration.

The fix expands the criterion crosswalk to cover commonly generated pattern names, adds compound-name resolution (splitting "Emotional Withholding & Stonewalling" into its components), and provides a meaningful fallback summary from pattern indicators when formal criterion matches are absent.

New

Case Prep: guided attorney preparation tool

A new Case Prep tool helps you build and organize defense evidence for your attorney. Upload text messages, court testimony (including PDFs), legal documents, and your own notes — the system guides you step by step on what to submit next.

Behind the scenes, text messages are analyzed using the same engine as Safety Check (abuse pattern detection, reactive abuse classification, DARVO detection). Testimony claims are extracted and cross-referenced against text evidence to find contradictions, gaps, and narrative divergences.

When ready, generate an Attorney Brief with contradiction reports, timeline reconstruction, pattern analysis, defense considerations, and evidence gaps — exportable as text or HTML for your lawyer.

Fix

Safety Check: stricter rules for “Entitlement & Special Rules”

The analyst instructions now exclude common false positives: mutual boundaries, proportionate accountability or apology requests, repair timelines, and structured contact as a condition for sharing—unless there is clear evidence of double standards, unilateral privilege, or classic entitlement phrasing. Ambiguous cases should move to confidence notes instead of a high-severity tag. The judge step is told to prefer reports that do not over-apply this pattern.

Improvement

Safety Check: broader next-step links on results

The dashboard results Next steps list also links to Case Prep (evidence organizer for counsel), Help: Safety Check, and the Longitudinal report, in addition to Fight Room, Communications Wizard, and Discuss with AI Coach.

The guided wizard and designs Ready to Take Action? panel includes the same three shortcuts as tiles alongside Fight Room, Communications Wizard, and Discuss with AI Coach, with a responsive grid (two columns on medium screens, three on large).

Improvement

Safety Check: starter pattern library for sharper analyst context

The optional pattern library for the analyst (when hosts enable learning RAG) now ships with curated fictional dialogue excerpts and guidance—covering themes such as denial versus evidence, accountability pivots, reactive escalation, stonewalling, coercion masked as humor, invalidation, punitive responses to boundaries, triangulation, economic control language, hollow apologies, repair-shortcutting, and uneven labor. Enable with SAFETY_LEARNING_RAG_ENABLED; maintainers can extend data/safety_learning_corpus.json after review.

Improvement

Safety Check: fuller use of opt-in feedback for analyst calibration

For users who opted in to anonymized improvement data, aggregate feedback now feeds the analyst with a 365-day window and the lowest default statistical floors (a single qualifying signal can surface a pattern tag; up to 24 tags). No conversation text is used. Hosts can raise thresholds via environment variables if calibration notes become too frequent.

Improvement

Safety Check: friendlier timezone on reports and exports

When the pipeline infers a shared UTC offset for message times, the report header now uses a plain label (for example UTC−06:00 or India Standard Time) instead of raw fixed-offset zone identifiers.

The same label is used in exported text, printable HTML, and CSV so downloads match what you see on screen.

Fix

Safety Check cards and wizard recover from stuck analyze requests

Safety Check's Cards and Wizard flows now use a client watchdog that cancels stalled analyze requests after a long wait and shows a clearer recovery message, so transient proxy hangs do not leave the interface stuck in loading.

Improvement

Safety Check: larger chunk sizes when splitting long conversations

In Cards and Wizard split options, Max messages per chunk no longer stops at 200—you can enter any size at or above 10 messages (still with 5-message overlap between chunks for context).

Improvement

Safety Check reports: clearer roles, stronger queue controls, richer DSM/legal context

Safety Check reports now surface clearer role framing (victim/abuser context where available), expanded reactive-abuse detail, and a more transparent processing log so users can better understand how each report was produced.

Long-run analysis now includes an explicit ignore limit and run as one path in the queue chooser, plus improved queue status behavior during multi-part runs.

Lens output is also richer: DSM-5-TR now includes per-person summary context, and the law lens supports dedicated victim-impact and abuser-liability summaries when provided by the backend.

Improvement

Safety Check: calibration chart, alert thresholds, and admin trend dashboard

Results now include a daily calibration chart for consented feedback (Helpful, Too certain, Misleading, and related signals) so movement is easier to see at a glance.

Operators can tune alert thresholds for when aggregate calibration should surface hints to analysts, and admins get a dedicated trend dashboard for Safety Check feedback over time, with CSV export for review.

Improvement

Safety Check: optional trained reactive-vs-primary classifier and clearer analysis notes

Operators can set reactive-vs-primary classification to use a trained backend (HTTP JSON API or a local Hugging Face model) instead of the default zero-shot pass, using environment variables documented in env.example. The results screen renames the notes section to Analysis & processing notes so it matches processing limitations shown in the report.

Improvement

Safety Check: optional curated pattern library for sharper analysis

Hosts can enable a reviewed pattern library that retrieval-matches anonymized reference examples to each run and adds them as educational context for the safety analyst (optional; off by default). Aggregate feedback calibration runs automatically for users who opted in to anonymized improvement data: analysts receive consent-gated hints from aggregated pattern tags when thresholds are met (no conversation text). That calibration path cannot be turned off by configuration. Neither feature trains models on private chats.

Improvement

Safety Check: clearer classifications, processing notes, guardrails, and feedback trends

Safety Check now explains why reactive-vs-primary classifications were made using plain-language reasoning steps, confidence percentages, and clearer evidence support labels on detected patterns.

The pipeline also adds deterministic guardrails that downgrade overconfident reactive/primary labels to unclear when sequence evidence is thin, and reports now surface processing limitations (for example truncation, missing timestamps, and large time gaps) as Processing notes in both UI and exports.

The feedback section also adds Too certain and Misleading framing options to improve calibration over time, plus a rolling 6-month feedback summary so users can see how often those calibration signals are being reported.

Safety Check now also shows daily feedback trend snapshots, so calibration movement can be tracked over time rather than only as a single point-in-time summary.

Those trend snapshots can now be downloaded as CSV from the results page to support external review and auditing.

Fix

DSM-5-TR exports: exact criterion matches per pattern

Safety Check exports now match the DSM-5-TR lens UI: text, PDF/print, and CSV include the exact criterion matched for each pattern (disorder + criterion ID + criterion text). Generic fallback labels such as Concerning communication (unspecified) are filtered out from this matched criteria view.

Fix

DSM-5-TR lens: pattern rows now show exact matched criteria

In Safety Check's DSM-5-TR lens, each pattern indicator now lists the specific criterion entries it matched (criterion ID + criterion text + disorder), so the report shows what criterion was matched each time. Generic fallback labels likeConcerning communication (unspecified) are no longer shown as matched criteria.

Fix

Pastor's Lens: no invented church names

Pastor's Lens summaries now avoid invented local details (for example specific church names) and use generic wording like your pastor unless those details are clearly present in the source data. No-violation summaries are also phrased more carefully as no clear violations identified in the provided messages.

Fix

Bible evaluation: require explicit “You are” selection

Bible evaluation no longer assumes your side automatically after parsing a conversation. You now choose You are explicitly before running, which prevents accidental role inversion and keeps the report focused on the intended other person.

Improvement

Shared Safety Check links: better previews in chat and email

When someone pastes a shared Safety Check link, apps that show a preview (for example Slack or email) now get a clear title and description instead of generic "shared link" text or a loading placeholder. The page stays private (no indexing) and does not put report details into the preview.

Improvement

Practice site: control the floating help assistant

Under My practice site (SEO and help assistant), you can turn off the floating help button on your public /p/… page and in the patient portal, or enable training mode so visitors see the button with a setup message instead of live chat. Saving updates what customers see right away after publish.

New

Safety Check: optional Schema lens

Under Optional lenses, you can include the Schema lens on the same run. It maps detected conversation patterns to Young-schema-style themes and optional mode hints for reflection only—not a questionnaire, SMI, or clinical assessment. Exports and shared reports include this section when the lens was selected.

Improvement

Safety Check DSM-5-TR lens: official criteria and ICD-10-CM crosswalk

When you include the DSM-5-TR lens on a Safety Check, the criterion list now shows the diagnostic criteriafrom DSM-5-TR for Narcissistic Personality Disorder (301.81) and Borderline Personality Disorder (301.83), plus each disorder's Criterion A introduction and matching ICD-10-CM codes (F60.81 / F60.3). Detected conversation patterns still map to criterion items only as excerpt-level themes; this is not a diagnosis and does not apply the manual's threshold rules (for example, five or more criteria). Shared Safety Check reports use the same lens section when the lens was included in the run.

Improvement

Safety Check: re-run a saved report (update or new history entry)

From a saved report, use Re-run analysis to run again with your current options (standard or in-depth, optional lenses). Choose Update this saved reportto replace that check's snapshot while keeping the same history entry and share links, or Save as new report to add another row in past checks.

Improvement

Safety Check: cited lines show message time on screen and in exports

When a pattern example references Line Nin your transcript, the report shows that line's date, time, and speaker and flags mismatches between attribution and the labeled speaker when possible. Download as text, Save as PDF, and Download as CSV add the same transcript metadata to those citations when the thread is available, including when you use name redaction for professional sharing.

Improvement

Safety Check results: filter behaviors and patterns-focused view

On the full safety report, use Show or hide behaviors to toggle which detected pattern cards appear. Patterns-focused view hides notes, guidance, coping, risk detail, and the conversation panel so you can concentrate on patterns; you can optionally include dynamics summaries (flow and balance) in that mode. When only the shorter pattern list is available, the same style filters apply to the detected pattern rows.

Improvement

Everyday AI Assistant: first-time microphone step for voice chat and no default question chips

Turning on Voice chator using the microphone with Voice chat on now opens a short explanation first, then your browser or device can request microphone access. The empty chat view no longer shows preset suggestion buttons—type or dictate your own message. The header "suggested starters" shortcut was removed.

Improvement

Marketing beverages: premium visual polish and stronger conversion flow

The /marketing/beverages experience now has a tighter premium layout with stronger hero hierarchy, clearer action buttons, and an upgraded visual portfolio section.

Brand presentation was polished for consistency: official logo tiles, improved spacing and readability, and cleaner section transitions from services through contact.

The contact area now provides clearer status guidance and reassurance while keeping the production submission path and static pre-generated imagery model.

Improvement

Everyday AI Assistant and Universal AI Chat: voice input and optional voice chat

Everyday AI Assistant and dashboard Universal AI Chat include a microphone for browser speech-to-text with live interim text in the input. Optional Voice chat sends when you stop the mic and reads assistant replies aloud when your browser supports speech synthesis (any text-capable model). Each area remembers its own voice-chat preference in this browser.

Improvement

Marketing beverages: official logos, consensus-voted pre-generated images, and production contact flow

The /marketing/beverages showcase now uses official brand logo sources (instead of Clearbit placeholders), improved color/contrast treatment, and tighter visual hierarchy—including more brands and filters (for example energy, juice, and sparkling).

Section imagery now comes from an offline image set selected by multi-agent consensus voting, then served as pre-generated static assets for predictable performance and no on-page image generation.

The beverages contact form is now production-ready: real submission handling, stronger validation, error feedback, and configurable routing to the configured practice inbox or lead capture fallback.

New

Marketing: beverage partner showcase (Mahaska-style demo)

New public page at /marketing/beverages: full-bleed beverage distribution showcase with AI-generated imagery (Pollinations), brand logo grid, service sections, and a demo contact form. Uses Barlow Condensed display type; platform footer is hidden on this route for an immersive layout. Third-party logos and generated images are for presentation only.

Improvement

Couples Connect: relationship contract parts as headings and text (not raw JSON)

On Couples Connect, creating or editing a relationship contract now uses one block per part—Heading and What you agree to—with Add section, reorder, and remove. The API still stores the same structured data; you no longer edit a JSON array by hand.

Improvement

Safety Check (including wizard): clearer errors for long threads, timeouts, and busy AI

When analysis fails or times out, messages now suggest practical steps—such as Split into parts, a shorter paste, or Standard instead of In-depth—and distinguish rate limits from other errors. This applies to the main Safety Check flow and the wizard.

Improvement

Communications Wizard: choose who gets the “Send in Messages” link; practice client DMs in one thread

After you send in Communications Wizard, you can pick who to open in Dashboard → Messages—your partner (default), a friend, or a practice client with a linked portal account. Messages opens the right sidebar tab (Friends, Clients, or Conversations) and selects that person, with the wizard link prefilled.

For Practice → Client → Messages, direct messages between a linked client and any staff member in your practice organization now appear in the same thread as before (not only the assigned provider). Use Open in dashboard Messages on the client Messages tab to jump to the member app with the correct tab.

Improvement

Relationship contract: draft edits, new signed revisions, and logged reviews

On Couples, the relationship contract now supports editing the draft before both partners sign (title or section changes reset signatures so you both affirm the updated text). After it is fully signed, you can propose a new revision—the previous version stays in history and the new one needs both signatures again.

Use Log review to record that you revisited the agreement, refresh the next review reminder from your frequency, and optionally append a short note. Revision history shows versions, active vs archived, and last reviewed dates when present.

Improvement

Partner YSQ-R compare link: real names, clearer shared page, usage counts, and link management

The public partner compare view (/share/schema-ysq-couple/…) now leads with each person’s name, guidance for using the charts together, and pattern lines that name both partners. New links default names from each account unless you choose custom labels when creating the link.

Viewers see how many times the link has opened, remaining opens, first open time, and expiry. On Schema profile → Partner compare link, creators can see active links, copy, revoke, raise max opens, or extend expiry— similar in spirit to timed schema profile sharing (compare links still open directly without a viewer email verification step).

Improvement

Safety Check: optional party photos, dynamics summaries, and DSM-5-TR criterion crosswalk in the lens

In the wizard, you can add an optional photo for each side; they show on the report header and are saved with the run. A new Dynamics summaries section breaks down conversation flow, relationship balance (from this excerpt), and messaging style from thread metrics. The DSM-5-TR lens now lists paraphrased criterion lines for NPD and BPD and marks where this excerpt shows conversation evidence aligned with a criterion—this is educational and not a diagnosis.

Fix

Safety Check: fix duplicate transcript names (e.g. both sides as Dave) and optional report labels

When a paste or export used the same display name for both people, reports could read as if one person was speaking about themselves. The pipeline now treats your messages as Meand the other side using your relationship line (or a generic "The other person"). In the wizard flow you can also set custom labels for each side or choose generic You / Other person for either side before running the check.

Improvement

Couples Connect shared tasks: import from a text file or pasted list

The shared task list adds Text file (for example .txt, .md, or .csv) and Paste list, alongside photo import. One line per task (up to 25); markdown checkboxes and bullets are stripped; then use the same review step to add tasks or send some to personal goals.

Improvement

Dashboard: easier discovery for Couples, Practice setup, wizards, and site search

Dashboard home and Couples Connect now surface more relationship tools (shared activities, health, love languages, milestones, roleplay reflection). Practice adds a clear Practice setup entry; the practice sidebar includes the same. Kids Connect lists Family invite.

The Wizards section includes the main Wizards hub and NPD pattern training. Admins get Calendar sync setup on the admin hub and in quick admin links.

Site search (dashboard search bar) includes many more destinations—long reports, Everyday AI Assistant, repair hub, notification settings, and more—so you can jump directly when you know the name.

New

Couples Connect: import tasks for the shared list and a clearer Connection tab

On Couples → Connection, the shared task list supports Photo import (handwritten or screenshot lists), a text file (.txt, .md, .csv), and Paste list. Review the suggested lines, then add them as shared tasks, regular tasks for one partner, or your personal goals (not on the couple list).

The Connection tab opens with a short overview of gratitude, tasks, calendar, milestones, and memories, with touch-friendly controls on the task card.

Improvement

YSQ-R charts and mode-theory diagrams: clearer layout, shadows, and PDF styling

The full inventory network, mode theory reference figures (two-leg and coordinate map), and embedded report charts used for PDF capture now use updated panels, typography, grids, and color harmony so they read better on screen and in print.

Improvement

Couples calendar: Apple Calendar–friendly .ics export and Overview link to shared tasks

On Couples → Events (and the couples calendar on the main Couples page), Add to Calendar (.ics) uses a standard format that works with Apple Calendar on iPhone (open the downloaded file or share to Calendar), Google Calendar, and desktop apps. When there is at least one upcoming event, Export upcoming (.ics) downloads a single file with all events from today forward.

On Dashboard → Couples Overview, a Shared tasks tile opens Couples Connect and scrolls to the shared task list; the URL ?tab=connection#couples-shared-tasks works as a bookmark or deep link.

New

Couples Connect: shared and regular task list with reminders

Under Dashboard → Couples → Connection, you can add tasks that both partners see: Shared (for both of you) or Regular (assigned to one partner). Set an optional due date and choose reminder cadence off, a single reminder when due, or daily / weekly until the task is marked done. Your partner gets notified when you add, complete, or remove a task; scheduled reminders use your existing notification preferences (in-app and email when enabled).

Improvement

Learn /help: coordinate mode map on two-leg article; schema program help text

The public /learn/two-leg-model page now embeds the same coordinate mode map SVG used on the schema profile and clinical report, plus a short note linking those surfaces. Help Center schema sections describe the reference diagrams alongside the interactive mode map.

Improvement

Schema profile guide and Help Center UI: mode theory reference links

Understand your report on the schema profile now includes a step (and shared-link viewers get an optional jump) to the mode theory reference diagrams before the interactive mode map. The in-app Help Center YSQ-R section matches the updated wording in docs/HELP.md.

Improvement

YSQ-R mode theory diagrams: richer layout, legend, and screen-reader table

The dimensional two-leg and coordinate mode map reference figures use clearer gradients and arrows (critics, activation, and conceptual reintegration), an in-figure legend on the coordinate map, subsection headings on the profile and report, and a hidden table for screen readers. PDF chart export uses taller slices for legibility.

Improvement

YSQ-R schema profile and clinical report: Roediger-style mode theory diagrams

The schema program profile and printable clinical report now include the same two reference visuals as in the training screenshots: the dimensional two-leg mode model (integrated modes, attachment and assertiveness, emotions, coping band) and a coordinate mode map template (axes, integrative row, child/parent modes, tension, maladaptive coping). They are psychoeducation only—not derived from questionnaire scores. PDF export adds matching chart images when you download charts.

Fix

Chat composers: Fight Room, AI chat, patient portal messaging layout

Couples → Fight Room and AI chat input rows use min-w-0 / full-width flex wrappers so the message field does not collapse on narrow screens; send/cancel controls stay shrink-0 where needed.

Patient portal → Messages keeps topic + message in a column until lg (was sm), full-width send on phones, and min-w-0 on the textarea.

Fix

Messages composer, portal invites, and weekly schedule editor on small screens

Dashboard → Messages composer row now uses min-w-0 so the textarea cannot collapse next to emoji and Send on narrow layouts.

Practice → Client portal invite actions are full-width with 44px minimum height on phones, then inline on larger breakpoints.

Couples → Shared calendar weekly schedule editor stacks day, times, label, and remove on mobile; controls use full width where helpful; the panel header stacks cleanly.

Improvement

Mobile bottom dashboard nav: snap scroll, active highlight, roomier tabs

The fixed bottom bar keeps horizontal scroll for many destinations, but adds light scroll snapping, slightly wider tab cells, a clearer active background, and a bit more icon size on very small screens. Safe area and hidden scrollbars are unchanged; reduced-motion prefers instant scroll.

Improvement

Couples Milestones: clearer mobile layout and tag styling

On small screens, the milestones card stacks the title row and actions more cleanly, date lines and type/category tags are easier to scan (tag as a small pill), add/edit forms use a single column for date + category fields, and extra bottom padding reduces overlap with the mobile dashboard nav. Upcoming reminders list stacks on narrow widths.

Fix

Dashboard top bar: mobile spacing and compact search alignment

On narrow screens, the global header uses tighter gaps, the site search icon sits left-aligned in the bar (not centered in empty space), and account utilities use slightly slimmer padding. Expanding search still grows to use available width. The same spacing applies on the dashboard home welcome header (search + account strip).

Fix

Mobile layout: practice client messages, admin prompt actions, practice toasts, public help chat, couples calendar

Practice client chart (Messages): composer stays full-width on phones; sticky header sits below the dashboard bar so the title and Client ID are not clipped; unread labels read more clearly; tab bar uses a simple bottom-edge active state.

Admin → Prompts: action buttons stack on narrow screens instead of overlapping. Practice hubdismiss/snooze toasts use clearer Undo styling and wording ("leave this page" instead of "close this tab").

Public practice help assistant: topic chips stay visible (no auto-scroll to the bottom on open); the floating launcher hides while the panel is open; send and textarea layouts are safer on small widths.

Couples shared calendar: month "today" uses a full inset outline; day numbers are centered; upcoming/recent event cards stack actions so Add to Calendar is not clipped; extra bottom padding reduces overlap with the mobile nav bar.

Fix

Safety Check wizard: review step shows a realistic message count for pasted threads

The "Conversation" summary on step 3 no longer treats the whole paste as one message when lines are separated by single newlines (typical SMS-style exports). Email import success text uses the same logic.

Improvement

Partner YSQ-R compare link: pick runs from menus instead of typing assessment IDs

On the schema program profile, Partner compare link now uses dropdowns filled from your completed YSQ-R runs and your partner’s (newest first), with defaults set to the most recent for each person. No more hand-entered IDs.

Improvement

Schema program profile: “Understand your report” card — how to read results without optimizing scores

A new orientation section explains how to use the profile, full report, self-help path, mode map, and optional retakes for trends over time — framed as self-understanding and support, not chasing a “better” number.

Improvement

Practice client portal: invoice labels, session handling, and intake sections

Invoice statuses show clearer labels (for example Sent, Overdue, Paid). Auth failures on refresh, payments, PDFs, and waiting room actions clear the portal session consistently and prompt for a new link from the provider.

Intake forms that define sections now render with section titles and descriptions instead of a single flat field list.

Fix

Schema program profile: clearer Recharts axes and tooltips (all profile charts)

The Domain concentration (bubble)chart on the YSQ-R schema program profile has labeled axes (domain mean 1–6 and workbook-elevated subscale count), theme-aware ticks and grid, a short "how to read" note, and a richer hover tooltip. Bubble data matches the radar chart, including when Yalcin domains is toggled.

Self-help checklist trend and Longitudinal domain tracking line charts use the same axis labeling and contrast pattern (assessment date, 0–4 steps, domain means 0–6), plus themed tooltips and legend text.

Schema severity overview (bars) and Domain Summary (radar) use the same grid/tick colors, a labeled mean axis, themed tooltips/legend, and a clearer reference line at mean 4.0.

Couples YSQ-R share partner bar charts use the same styling. Shared tokens live in lib/schema-therapy/ysqRechartsTheme.ts for consistency.

Improvement

Public Learn: guided tool flow, session progress, anchors, and interactive coping modes

The /learn library behaves more like a small interactive site: overview with clear entry points, optional session-only progress (which articles you opened in this browser — not saved to your account), a sticky on-this-page navigator on the long article, jump links on the two-leg model page, and a tap-to-match step plus expandable cards on What mode am I in?

Improvement

Cycle Breaker pause timer: UTC timestamps from the server; Help documents optional SMS companion

The pause countdown now uses the server's pause end time in UTC (with a Z suffix) and the progress bar matches the configured pause length from the API, so timers stay accurate across time zones and clock skew.

Help Center adds a section on the optional mobile device SMS companion (experimental Android shell, policy constraints, and authenticated API routes). See docs/features/MOBILE_DEVICE_SMS_ADDON.md for maintainers.

Fix

Conversation Safety Check: long transcripts and rare response shapes less likely to fail

Very large pasted or uploaded threads are analyzed using a bounded sample (start and end of the conversation) so the check can finish instead of timing out. Responses are normalized for safe JSON, oversized message bodies in the returned thread are trimmed, and internal error tickets now include the real user-facing error text when something still goes wrong.

Improvement

Hard conversations guide: Safety Check through schema, drafts, import, SMS link codes

New dashboard page Hard conversations guide (/dashboard/hard-conversations) walks through safety first, schema program and curated tools, Communications Wizard and related practice links, conversation import, and the optional Android SMS companion.

Members can generate a one-time link code on that page (about ten minutes) and enter it in the companion app to receive a Bearer token—no long JWT paste required. Find your tool, Quick Access, the therapeutic hub, Safety & clarity, and Connection prep surfaces include links to the guide.

Improvement

Attachment Type Wizard: save result and opt-in cross-tool context (ecosystem + Safety Check)

After analysis, your latest attachment summary can be saved to your account. On the results screen you can choose—each off by default—whether high-level schema workbook themes and/or that attachment summary may be used in AI context ecosystem (when ecosystem is on) and/or Safety Check analyst context. Nothing is shared with a partner or minors automatically. See Help and CROSS_TOOL_CONTEXT_CONSENT in docs/features.

Improvement

Schema program surfaces Learn articles on profile, report, PDF, tools, and self-help path

The same plain-language background as /learn now appears where people use results: schema profile orientation, clinical report (including print/PDF), the weekly self-help path steps, schema tools banners, and the program hub intro — with quick links to Why you react, What mode am I in?, and related pages.

New

Public Learn library: schema psychoeducation, coping modes, two-leg model diagram

New no-login pages explain how attachment, assertiveness, schemas, and coping modes fit together: /learn (overview), /learn/how-schemas-work, /learn/coping-modes, /learn/two-leg-model (includes an accessible diagram plus ASCII reference), and /onboarding/your-patterns for orientation before viewing questionnaire results.

Marketing navigation includes Learn; the schema program hub links there too. Help Center documents the routes under Schema psychoeducation.

New

Android SMS companion (optional): device sync and schema-informed draft texts

For members who want carrier-text support outside the browser, an optional Android shell in the open-source repo can register a device, sync selected thread lines, and call new /api/mobile/sms endpoints for short, psychoeducational SMS drafts using the same guardrails as schema tools.

Sending still happens on the phone only after you review the draft. Google Play SMS rules are strict; see Help: Mobile device SMS companion and maintainer doc MOBILE_DEVICE_SMS_ADDON.

Improvement

Schema tools hub is easier to navigate (one dashboard home, /tools redirects)

The schema tools overview now starts with a “what is happening right now?” picker and a short starter path, then lists all modules grouped by phase with plain-language titles. The sub-navigation uses the same phase grouping so you are not faced with twelve equal tabs at once.

Legacy /tools URLs automatically redirect to the matching dashboard routes, so bookmarks still work while the product keeps one primary mental model.

Improvement

Schema tools now support vulnerability and timeout public shares

Token-backed read-only share pages for vulnerability cards and timeout agreements are now live at /share/vulnerability-card/[token] and /share/timeout-agreement/[token], including expiry and max-view behavior.

Improvement

Schema therapy toolkit help now shows provenance fields and module safety context

The in-app Help Center and docs now clarify schema-tool provenance with explicit source_tier and source_refs transparency where toolkit persistence and history endpoints apply.

The same help section keeps the non-clinical framing (psychoeducation and self-reflection, not diagnosis or treatment) and points to crisis/professional-support paths for high-intensity moments.

Improvement

Schema therapy modules expanded to full Roediger 12-module tool map

The schema tools area now includes a full module map under /tools with dedicated routes for mode-cycle explainer and clashcard, timeout agreement, rebalancing, vulnerability access, honeymoon imagery, assertiveness practice, inner critic work, conjoint imagery, Healthy Adult tracker, connection dialogue, and homework dashboard.

New backend APIs now support AI-assisted cycle naming, vulnerability reframing, inner critic compassion responses, echo-listen coaching, and Healthy Adult roleplay coaching, plus persistence endpoints for timeout agreements, basic emotion logs, daily check-ins, connection dialogue sessions, and conjoint imagery notes.

New

Schema therapy toolkit: phased worksheets, AI practice, and timed shares

Signed-in members can open /tools from Dashboard → Therapeutic → Schema program → Schema therapy tools for a hub of psychoeducational schema resources.

Phase 1 adds catalog-backed worksheets: schema identification assessment, mode mapping, and couple mode cycle identification, with optional persistence and timed public links for mode profiles and identified cycles.

Phase 2 adds AI-assisted coping cards, mode-language reframes, and schema chemistry when the host AI provider is configured.

Phase 3 adds on-page limited reparenting and imagery rescripting guides (with a sensitivity note on imagery).

This complements the YSQ-R program; it does not replace questionnaire, charts, or clinical report. Educational reflection only—not diagnosis or treatment. See Help: Schema therapy toolkit for crisis and professional-support links, provenance notes, and how the rollout maps to the v3 module plan (maintainer checklist: docs/features/SCHEMA_TOOLS_V3_COMPLIANCE.md).

Improvement

Safety Check chip explanations are now keyboard-accessible

Analytics summary chips now include focusable info buttons that open explanatory text panels for keyboard and touch users, replacing the previous hover-only explanation behavior.

Improvement

Safety Check analytics chips now use color states and tooltips

The new Safety Check analytics summary chips now include color-coded states (green/amber/red/neutral) and hover tooltips that explain each metric in plain language.

Improvement

Safety Check results now show quick analytics summary chips

Safety Check results now include an at-a-glance analytics summary section with compact chips for reliability, acute change flags, dominant phase, asymmetry direction, new patterns, and top schema signal before the detailed lens sections.

Improvement

Safety Check adds advanced trend analytics

Safety Check responses now include advanced analytics: pattern trajectory, acute change flags, conversation phase map, role asymmetry, and reliability score.

Improvement

Schema profile now includes a guided self-help path card

The YSQ-R Schema profile now includes a structured self-help path card that turns current schema and mode signals into practical daily steps: mode check, short regulation, need framing, and one Healthy Adult repair action. You can now save a weekly checklist (including a short intention) on each assessment, see last-saved state, and view a completion trend across assessments. It is educational reflection support and not diagnosis or therapy.

Improvement

Admin Settings now shows effective Safety Check HF model resolution

In Admin Settings, the Safety Check NPD model card now includes live status for the effective HF model source and path, admin auto-mode state, and override validity so admins can verify actual runtime behavior immediately after saving.

Improvement

Admin Datasets now shows effective Safety Check HF model source and path

The Admin Datasets page now shows the effective Safety Check Hugging Face model resolution details (source, resolved path, admin auto-mode state, and override validity) so admins can quickly confirm what model is actually active on that host.

Improvement

Safety Check now auto-selects the NPD model with admin override controls

Safety Check now automatically uses a valid local Hugging Face NPD model when available. Admins can configure this directly in Admin → Settings by toggling auto-use on/off and setting an optional model-path override, without editing environment variables.

Fix

YSQ-R v4.3 questionnaire now uses exact scorer workbook questions

The YSQ-R v4.3 take flow now loads the exact 116 question statements from the official v4.3 scorer workbook source used in production, instead of placeholder-masked prompts. This restores full item wording in the questionnaire while keeping scoring behavior unchanged.

Improvement

Practice site: Sage Editorial linked to Reflect showcase and live portal

In Practice Management → Site → Visual style, the template picker now explains that the default Sage Editorial preset matches the Reflect design stakeholder page at /design/reflect-design-system-showcase.html and the same theme tokens apply to public /p/…, /book/…, and authenticated /portal/…. Template swatches use a shorter screen-reader label; full descriptions appear as hover text.

Improvement

Partner Connect: trigger capture, reassurance planning, and repair insights

Cycle Breaker in Partner Connect now includes a structured trigger capture step with optional context, a dedicated repair conversation flow, and a new pattern insights panel that highlights recurring trigger patterns.

For reassurance-heavy moments, the Reassurance Plan module now lets you save concrete calming actions during a session so partners can use consistent, predictable repair behaviors.

Improvement

YSQ-R PDF exports: text cue on chart pages for assistive tech

Each downloaded chart page in Full or Charts-only YSQ-R PDF exports now includes a short accessibility note: where to find the same numbers in the document’s tables, or when to pick Summary/Full instead of charts-only. (Raster charts in PDFs still have no image alt tag—this text bridges that gap for screen-reader and read-aloud users.)

Improvement

In-context help: YSQ share links and schema accessibility tips

The help panel now picks up shared partner YSQ comparison and shared schema profile URLs with tailored questions and tips (including hidden chart tables and mode-map keyboard notes). The main schema program surface mentions the skip link and screen-reader tables in its quick tip.

Improvement

Shared partner YSQ comparison: screen-reader data for bar charts

The public schema patterns (side by side) page for linked partners now labels each bar chart for assistive technologies and adds hidden tables with the same subscale means, domains, and elevation flags as the schema profile bar chart (top twelve subscales per person). Sections use heading ids for clearer landmarks.

Improvement

YSQ-R profile/report: clearer Format 1/2/3 scoring signals

YSQ-R profile and clinical report tables now show workbook-style elevation (Format 1), mean-based flagging (Format 2), and higher-endorsed item counts (Format 3) side by side, with safe fallback for older saved runs. When no subscale crosses the workbook-style threshold, profile/report and PDF now include the same brief pattern note for discussion context (self-report only, not diagnosis).

Improvement

Practice site assistant: smaller mobile launcher and chat panel

On public practice pages, the floating Susan assistant is now more compact on phones. The launcher button, panel width/height, header spacing, and in-panel padding were reduced for mobile so it no longer dominates small screens; tablet/desktop layout stays unchanged. The assistant Voice/Text controls also now inherit theme tokens so button colors stay consistent across all practice templates, and the header presence indicator now uses success-theme tokens instead of a hardcoded green.

Improvement

YSQ-R mode map: keyboard navigation and custom accessible nodes

The mode map now uses a custom default node (same connection handles as before) with an explicit label for each node, including saved trigger notes when present. Tab / Shift+Tab move between nodes and edges, with React Flow keyboard support left enabled. A skip link inside the map jumps to the trigger-notes panel (focusable target). Visible keyboard instructions sit above the diagram; a full focus trap is intentionally not used so users can Tab out of the canvas.

Improvement

YSQ-R mode map: text summary for assistive technologies

The schema program mode map now includes a hidden summary before the diagram: tables of node labels (with trigger notes when present) and connections (from, relationship label, to). The diagram sits in a named region that points screen readers to that summary. Applies to both editing and read-only shared views.

Improvement

YSQ-R profile: screen-reader data for longitudinal domain chart

When you have more than one YSQ-R completion, the longitudinal domain line chart now has a descriptive label for assistive technologies and a hidden table of domain means by assessment date. When RCI reference bands are shown, the label explains their meaning in plain language.

Improvement

YSQ-R report: screen-reader table for full 20-subscale network chart

The all 20 subscales circular network (inventory order) on the printable report and PDF chart capture now includes a hidden table with order, name, domain, mean, and workbook / mean elevation flags for every slot, plus a clearer chart description. Matches the accessibility pattern used for other schema profile charts.

Improvement

YSQ-R profile: screen-reader data for domain radar chart

The domain summary radar on the schema profile now includes a clearer chart description for assistive technologies and a hidden table with domain means and workbook-elevated subscale counts, aligned with the bar and domain bubble charts. Captions reflect standard vs Yalcin-style domain grouping when that toggle is on.

Improvement

YSQ-R profile: screen-reader data for domain bubble chart

The domain concentration scatter chart on the schema profile now has a descriptive label for assistive technologies and a hidden data table with the same domain means and workbook-elevated subscale counts, matching the pattern used for the main subscale bar chart.

Improvement

Schema therapy hub: partner YSQ-R compare link, optional Yalcin domain toggle, domain bubble map, and reflection tools

From Schema profile, connected couples can create a time-limited compare link (two completed Rasch YSQ-R runs). The public page summarizes side-by-side patterns and research-informed discussion prompts—educational only. Profile also adds optional Yalcin-style domain grouping (with literature caveats), a domain bubble view, plain-language mode hints for reflection, and an optional streaming reflection paragraph when the environment is configured.

Improvement

Practice billing: Stedi push webhook for remittances and richer AI appeal drafts from payer responses

When hosting configures an inbound Stedi webhook (documented for operators), new 277 and 835transactions can trigger automatic ERA posting and claim status updates in the background—alongside existing cron and "Check status" flows. For denied claims, Suggest appeal now feeds the assistant a structured excerpt of the stored payer/clearinghouse response when available, not only a short denial label.

Improvement

Transactional emails and client portal: Reflect sage-editorial palette

HTML notifications (session summaries, password reset, practice messages, and more) now use the same cream, slate, and sage tones as the public practice site—forest green action buttons for readability. The signed-in client portal Help and resources panel titles use tighter editorial letter-spacing to match the Reflect design language.

Improvement

Help Center: pricing, Kids Connect, admin hub routes, performance & analytics, activity history, and aligned contextual help

/help now includes Pricing & plans, Kids Connect, and for authorized admins a full Admin Dashboard section with linked routes (users, approvals, invites, plan changes, bugs, prompts, leads, analytics hub, API costs, global settings including session idle timeout, plus operations, deployments, email marketing, and more). Dedicated sections cover performance monitoring and analytics & reporting. Also: clearer Notifications (in-app bell and email) and How Emily uses AI (including models/providers). Contextual help for Activity History (Sessions), goals, pricing, admin, notifications, and related topics points to the same anchors; the docs/HELP.md mirror matches (including #performance-monitoring and #analytics--reporting).

Improvement

Practice Claims: optional 835 ERA pull when you check claim status

On Practice → Claims, you can turn on also try 835 ERA before Check status. With Stedi configured, the app tries candidate remittance transaction IDs (your submit id plus hints from the live 276/277 response), fetches an 835 when the payer has posted one, and runs the same ledger posting as Process ERA. Requires claims write permission; no change to the separate manual ERA process by transaction ID.

Improvement

Practice Site: optional FAQ block (same scheduling-focused Q&A as the booking page)

Under Practice → Practice Site → Page layout, you can add Frequently asked questions between Services and Contact (default layout includes it for new setups). The public /p/… page shows the same accordion content as /book/… (privacy, rescheduling, telehealth vs in-person, empty calendar)—no ratings or invented stats. Nav gains an FAQ link when the block is enabled; existing sites keep their saved order until you add the block.

Improvement

Safety Check wizard: partner share and same timed link flow as the main Safety Check page

The Conversation Safety Check wizard (designs path) now includes Share with partner above the public link panel, and uses the same timed link, email, and settings behavior as the dashboard Safety Check—including when you analyze by multiple parts (sharing targets the report you have selected).

Improvement

Help Center and docs: practice URLs (/p, /book, /portal), clearer YSQ “Email link” vs Safety Check

The in-app Help Center adds Public practice site, booking, and client portal (/help#practice-public-booking-portal) with how /p/…, /book/…, and /portal/login fit together for patients and visitors. Contact a practice is spelled out in docs/HELP.md with the same anchor pattern. Contextual help for Practice and Contact a practice includes booking and portal pointers. Schema profile sharing text now matches product behavior: Email link goes straight to the recipient; Safety Check and relationship practice profile sharing still confirm to your inbox first. Maintainer documentation adds a Documentation and help map in docs/DOCUMENTATION_INDEX.md (who reads which doc).

Contextual help (help_system.py) now ties more topics to Help Center anchors, including Find your tool, AI Chat, Longitudinal Evaluation (with a pointer to the DSM-5-TR longitudinal report when available), Coach, Roleplay, Notifications (in-app bell plus email), and Journal vs Reflections. docs/HELP.md adds a matching Guided discovery and AI tools section. See docs/development/HELP_CONTENT_AUDIT.md for the updated matrix.

Improvement

Practice sites and booking: Reflect showcase alignment (tokens, Sage Editorial chrome, QA doc)

/book/… now uses the same CSS variables, critical token CSS, and Google Fonts as /p/… for your site template, so headings and components that rely on var(--font-family-heading) and palette variables match the public site. Loading, error, and booking-confirmation states use template colors instead of generic slate, indigo, or emerald. Public practice layout shares the same theme root component for consistency.

For the default Sage Editorial template, the header uses a frosted cream bar; nav links use muted ink with a sage hover state; the desktop Book online / Schedule pill is slate with a sage hover nudge like the design showcase. The hero adds a soft sage radial accent, a pill eyebrow on sage-tinted fill, a larger display title scale, body copy in muted ink, and when you set a tagline it shows as an italic sage line under the title on both the full site and the booking page (using var(--color-brand) for that line). Sage Editorial scheduling buttons use the shared label Schedule a session instead of “View availability,” and the /book hero eyebrow follows the same rules as the public site (online scheduling vs get in touch, etc.). Primary CTAs stay a darker green for accessibility (not pure #7d9b76 on white text). See docs/practice/REFLECT_DESIGN_SYSTEM_PORTAL_SCOPE.md §10–12 for the manual QA matrix and scope notes (portal and email HTML remain on their own track).

On /book/…, About, Services, FAQ, and Contact use the same editorial section-heading treatment as /p/… (accent rule under the title), and prose blocks use the same width and hyphenation helpers. The booking footer matches the public marketing footer rhythm: trust pills under Practice, a copyright rule using var(--color-border), UTC copyright year, and aligned grid spacing. The Why book here card uses the same clinical left-rail accent as the public site spotlight, and the booking panel form (fields, errors, Confirm booking / Back) uses your template colors and CTA styles instead of generic dashboard form chrome.

Every site template now ships a compact Schedule / Book onlineheader pill matched to that preset's primary palette (not only Sage Editorial). The booking sidebar title Schedule an appointment uses the same editorial section-heading accent as other blocks.

Improvement

Timed public share links: change settings without revoking (Safety Check, YSQ profile, relationship profile)

For Safety Check, YSQ-R schema profile, and relationship practice profile shares, you can use Change link settings to adjust expiry, max opens, and the viewer email step while keeping the same URL. Email link flows now start with Step 1 — Configure link access, then the recipient step, so limits are explicit before sending.

Fix

Practice client treatment plan: saved plans list, refresh after save, manual new plan

On Practice → Clients → Treatment plan, saved drafts now appear under Saved plans (with preview and ICD-10 summary), the list reloads after Save draft, unsigned plans can be reopened with Edit, and New plan (manual) opens the editor without running AI draft generation.

Improvement

Practice ePrescribe: save prescriptions to your practice log when the vendor flag is on

Under Practice → ePrescribe, when operations enables the integration flag, you can record prescriptions (drug, quantity, refills, optional sig, NDC, pharmacy NPI) for a client opened from the chart, see them in Recent prescriptions, and run a PDMP demo response. Entries are stored for your practice; live pharmacy routing and real PDMP still require a certified vendor connection.

Fix

Who this is for: readable CTAs in dark mode and Next steps buttons

On /who-this-is-for, the Open dashboard control no longer uses a light background with white text in dark mode (Reflect tokens flip --reflect-slate to a light color). Pricing and Explore the platform now use the same sage outline style as other marketing secondaries instead of low-contrast violet text links.

Improvement

YSQ-R schema profile share: multiple links, per-link rules, accurate emails, one-time link length

On Schema program → Your schema profile and the member Clinical report share area, you can keep several active timed links at once (each with its own expiry, max opens, optional viewer email step, and how long the emailed one-time open link lasts). Copy, email, or revoke per link without affecting the others (up to 15 active links).

Emails to recipients now summarize the actual rules for that link, and the viewer one-time email uses the real minutes you set—not a fixed “1 hour” message when you chose something else.

Improvement

YSQ-R questionnaire: Auto-advance on by default

On Schema program → Take questionnaire, Auto-advance is now checked by default for new sessions (you can still turn it off anytime). If you previously disabled it, your choice stays saved in this browser.

Improvement

YSQ-R clinical report: timed public share (same link as schema profile)

On Schema program → Clinical report, you can now create, copy, email, and revoke the same timed public link as on Your schema profile. Recipients open your interactive schema profile (merged history); use Print or Download PDF on the report for this printable layout.

Fix

Timed share panel: local times, link rules summary (expiry/opens/viewer email), YSQ tweaks

Schema program → Your schema profile share panel now shows expiry, email activity, and opens in your device's local timezone (API sends UTC with Z). The optional viewer email step (they enter their email on the public page for a one-time link) is explained in the panel and in Create share link. Email link on YSQ timed shares sends the profile link straight to the recipient; Safety Check and relationship practice profile still use Send confirmation (your inbox first, then recipient).

For anytimed share using this panel (including Safety Check and relationship profile), once a link exists you'll see Link access (this share): expiry, how many opens are allowed vs used, unlimited vs capped, viewer email step on/off, and a note that changing rules requires Revoke then Create share link.

Improvement

YSQ-R profile share: Email link goes straight to the recipient

On Schema program → Your schema profile and the Clinical report share area, Email link sends the timed view link directly to the address you enter—no separate confirmation email to your own inbox. Safety Check and relationship practice profile sharing still use confirm-to-self first. Old YSQ confirmation links in email continue to work until they expire.

Improvement

Relationship practice profile share: email with inbox confirmation and activity log

From Roleplay → Practice profiles, you can email a timed public profile link the same way as Safety Check and the schema profile: we send a confirmation link to your inbox first, then the view link to your recipient. The share panel shows email sends and each time someone opened the link.

Improvement

YSQ-R profile share: email with inbox confirmation, activity log, clearer domain chart

From Schema program → Your schema profile, send the public profile link by email: we email you a confirmation link first (like Safety Check), then send the view link to your recipient. The share panel shows who was emailed and each time someone opened the link. The domain radar chart uses clearer labels on small screens.

New

YSQ-R schema profile: timed public share links

On Schema program → Your schema profile, create a timed link so someone can open the same interactive charts and mode map without logging in—optional expiry, max opens, and email verification for a one-time view link, like Safety Check and relationship practice profile sharing. Revoke from the same page anytime.

Improvement

Theming: semantic text tokens, true transparency on CSS variables, help copy aligned

Help Center and crisis pages use semantic text tokens (text-primary, text-secondary, text-muted) for light/dark consistency. Across marketing, home, compliance, and many dashboard shells, borders and backgrounds that used bg-[var(--…)]/xx now use color-mix so transparency works with brand CSS variables (same idea as semantic Tailwind colors from var()). HELP.md and the in-app help service match on Safety Check timing patterns and exports. Docs: color audit Phases A–B notes.

Improvement

Site footer: clearer text on the brand gradient

The main tagline, crisis/support line, and copyright strip in the site footer now use full white with a light shadow so they stay readable on the slate-to-sage gradient (including dark mode). Section headings and support links are slightly stronger for contrast.

Improvement

YSQ-R printable report: better layout on small screens

The YSQ-R clinical report (/dashboard/therapeutic/schema-program/report and practice …/ysq/report) now stacks PDF/print controls and footer actions on narrow viewports, full-width history chips, clearer ISST schema card headers, improved legend and narrative text wrapping, stacked top nav links, full-width error-state actions, and smoother horizontal scroll for the full-inventory chart. The schema program hub (/dashboard/therapeutic/schema-program) uses the same min-w-0 shell pattern as the profile page to avoid sideways overflow.

Improvement

Schema program profile: better layout on small screens

The YSQ-R profile page (/dashboard/therapeutic/schema-program/profile) now stacks primary actions, uses horizontal scroll for wide charts on phones, tightens chart margins and tick labels under the sm breakpoint, and improves text wrapping for summaries and domain lists.

New

Relationship practice profiles: timed share links (like Safety Check)

On Relationship Profiles (Roleplay), each card can create a share link (copy or revoke from the dashboard). The API supports optional expiry, max opens, and email verification before viewing. Recipients use /share/relationship-profile/… (and a one-time verify URL when required) for a read-only view—no login—aligned with Safety Check sharing.

Improvement

Safety Check: timing patterns from past runs; welcome tour quick links

After at least three stored checks for the same relationship, the Safety Check result can show Timing patterns (past checks)—which weekday and month analyses were most often run in (UTC). Descriptive only, not a risk prediction. Text and printable HTML exports include the same block when it applies.

The welcome tour's final step adds First steps links to Goals and Invite your partner. The public marketing route uses a lighter loading shell; the shell header logo uses priority for earlier fetch (LCP hygiene).

Improvement

Faster marketing hero paint; clearer first-goal path on the dashboard

The public marketing page is tuned so the main headline and subhead show at full strength immediately (better for load metrics and readability). The marketing route also uses the default page caching behavior where Next.js allows it.

On the dashboard home, new users see both Set my first intention and Create my first goal. If you already have reflections but no goals yet, an Add your first goal card points you to Goals.

Improvement

Schema program (YSQ): completed-runs banner updates as soon as you finish a run

On Take the questionnaire, the strip with links to Schema profile and Clinical report refreshes from server history right when you complete a run (during the brief processing step before redirect), so the count and latest date stay accurate without leaving the page first.

Improvement

Marketing funnel emails: full lead sequence (days 1–30), Reflect styling, richer post-signup nurture

Lead magnet follow-ups now run on days 1, 3, 7, 14, 21, and 30 with shared sage-and-cream templates, clear CTAs, Features/Pricing/Help links, crisis disclaimer, and a higher per-lead cap so the day-14 message is not blocked by the old limit. Behavioral trigger mail uses the same shell. The initial starter kit email matches the new design.

After signup, nurture adds day 14 and day 21 onboarding notes and 45- and 60-day re-engagement in addition to existing touchpoints; welcome and streak copy are tightened for clarity. Admin Leads shows all six follow-up flags. Run migrations/add_lead_magnet_followup_day_1_21_30.py on existing databases.

Improvement

Kids Connect: Co-Parenting hub expanded (Couples Connect–style tabs and quick actions)

Dashboard → Kids Connect → Co-Parenting is now a fuller hub: tabs for Overview, Stay connected, Guidelines, and More in Kids Connect, with quick actions to the Communications Wizard, family communication, family invite, shared calendar, joint goals, memory, and related areas. When you have an active Couples Connect link, the overview shows your partner summary; if not, you get clear invite/join paths and guidance for two-home co-parenting.

Improvement

AI ecosystem Phase 3: partner link (label + shared counts), MCP catalog in Universal Chat

With interconnect all areas (ecosystem) and an active Couples Connect link, context includes a Partner link block: a public-style partner label (first name only, no email) and aggregate counts for the shared workspace (active joint goals, conflict-resolution records). Rich partner activity still appears only in the partner section. Tool and MCP outputs are not shared with the partner unless future explicit consent is added.

Universal AI Chat with MCP enabled appends a compact tool catalog (names and short descriptions) to the system prompt. Tool rounds can still store a small structured summary for clearer replay in later turns.

Improvement

AI context: interconnect all areas (ecosystem) on by default

Universal AI Chat and related flows now default to interconnect all areas for AI (ecosystem context) for new accounts and when preferences have not been set. Anyone who previously chose a narrower context level without turning interconnect on stays on the previous behavior until they change settings. Turn interconnect off anytime in Dashboard → Preferences (AI chat) or in chat settings.

Improvement

YSQ-R questionnaire page: reminder when you already have completed runs (links to profile and report)

On Take questionnaire, if you have finished at least one run, a short notice shows how many completed runs you have (and the latest date) with direct links to Schema profile and Clinical report so past results are easier to find without hunting the hub.

Fix

Schema profile and report: past YSQ-R runs still load if one instrument history request fails

Schema programmerges v4.5 and legacy v4.3 history. If one of those API calls errors, the other's completed runs still appear on Schema profile and Clinical report instead of losing everything. You only see a load error if both calls fail.

Improvement

Email preferences: Devotion Connect on its own toggle; practice types grouped on dashboard

Devotion Connect daily devotional email now uses its own notification type. If you never set it, it stays aligned with your existing Reminders email choice so daily devotionals are not turned off by surprise.

Practice management emails (appointments, billing, intake, messages, claims, telehealth) appear under a dedicated section on Dashboard → Preferencesso they can be tuned separately from general "Other" mail. Several practice send paths now tag the matching type for clearer preference behavior.

Improvement

AI chats: wider reading area on phones and tablets (Everyday AI Assistant, Universal Chat, Ask the Word, Chat, practice help)

Message columns and composers use more of the screen on small and medium viewports, with the same comfortable max width on large screens. Applies to Everyday AI Assistant, Universal AI Chat, Ask the Word, Chat (roleplay), Therapeutic Chat, and the floating practice site / patient portal help assistant.

Fix

Schema program: hub route and Quick Access tile (no more 404 on /schema-program)

Visiting /dashboard/therapeutic/schema-program (for example from breadcrumbs) now opens a proper hub with the same take, profile, and report links as the therapeutic tools page. Quick Access on the dashboard includes a Schema program hub tile; the existing Schema Therapy (YSQ-R) shortcut still jumps straight to the questionnaire.

Improvement

Google Gemini: multi-turn universal chat keeps full model parts (thinking / signatures)

For Googlesessions in universal chat, assistant turns now store the model's content parts (including thought signatures when the API returns them) and send them back on the next request so longer threads stay consistent with Gemini 3.x thinking behavior. Optional: set GEMINI_INCLUDE_THOUGHTS or session preference gemini_thinking_config for thought summaries; chat metadata also saves correctly on assistant messages (message_metadata).

Improvement

Patient portal: tighter layout for practice help voice mode

In the patient portal, the floating practice help assistant's Voice mode uses a more compact layout (smaller controls, tighter spacing) so it fits narrow panels and mobile screens more comfortably.

Improvement

Admin: assign practice staff roles (communications manager, receptionist, and more)

In Admin → Users, when you edit a user on a Professional or Coach plan, you can set or clear explicit practice_user_roles without using the database directly—billing staff, clinical staff, receptionist, communications manager, optional organization scope, or default provider. Organization owners and admins can also use new practice API routes to list assignable roles, view a team roster, and set roles per organization member.

Improvement

Google Gemini: default fast model moved to Gemini 3.1 Flash Lite (preview)

Everyday AI Assistant, Ask the Word, and the backend Google provider now default to gemini-3.1-flash-lite-preview instead of Gemini 2.0 Flash, which Google is discontinuing on the Gemini API after June 1, 2026. Vercel AI Gateway and model catalog entries were updated accordingly. If you still have an old model saved in a session, the app may keep that id until you pick a new model from the list.

Fix

Pricing page: main landmark uses the page heading for its accessible name

The public pricing layout now labels the shared marketing shell's mainlandmark with the visible "Pricing Plans" heading (aria-labelledby), so assistive tech and automated accessibility checks see a named main region instead of an unnamed landmark with a labeled inner wrapper.

Improvement

Contact page: platform support first; practice messaging stays under ?practice=

Visiting /contact without a practice slug now highlights Contact us with the main support email and links to Help and About. Message a healthcare practice (booking slug and /p/…#contact) is grouped below so general visitors are not dropped straight into provider-only instructions.

Improvement

Therapeutic hub: schema therapy program grouped in one card (take, profile, report)

On Therapeutic Exercises, the structured schema assessment section now uses a single featured card with three links: Take questionnaire, Schema profile, and Clinical report (latest completed run when you open report without a specific id). Section disclaimers and Schema Therapy Institute context are unchanged.

Improvement

Practice RBAC: communications manager role can use secure client portal messaging

Assign the communications_manager practice role (in practice_user_roles) for staff who handle scheduling and client-facing secure messages without clinical or billing access. Portal message API routes now enforce portal:read / portal:write; org-visible clients can be messaged by permitted roles, and staff messages to linked portal accounts use the same thread clients see in the portal.

Improvement

YSQ-R printable report: full 20-subscale bubble map with a closed path (inventory order)

The clinical report adds a full inventory chart: every Rasch YSQ-R subscale in fixed questionnaire order, bubbles sized and placed by mean, and segments connecting 1→20 (and back to 1). Same-domain neighbors use domain-colored lines; a faint ring marks mean 4 for orientation. The chart appears on the report page and is included as its own image when you export PDF with charts.

Improvement

YSQ-R: open your printable report right after finishing; therapists can view linked clients’ results in Practice

When you complete the questionnaire, you are taken to the printable YSQ-R report with a short confirmation banner. Your schema profile (charts and mode map) is still one tap away. On the profile, the main action is labeled View full report for clarity.

If your practice has linked your chart to your portal account, your clinician can open Practice → Client chart → View YSQ-R results to review dated completions and the same clinical report view you see (minimum necessary; audit logged).

Fix

YSQ-R Editorial blue (dark mode): question panel, Back/Next, and theme selects meet contrast

In dark mode, the Schema Reflections visual theme no longer keeps light “paper” tokens on cards and headers, so statement prompts and helper copy stay clearly readable instead of fading into pale panels. Survey navigation uses solid primary fills with white labels, and version/theme dropdowns use explicit foreground colors. The first-visit tip Dismiss control uses a stronger default text color on the banner.

Fix

Marketing and pricing: darker primary buttons for readable white text (WCAG contrast)

Primary CTAs on the public shell, funnel pages, pricing, hero, and related surfaces now use dedicated sage CTA color tokens so label text stays legible against the fill. Hover states are adjusted to match.

Improvement

Everyday AI Assistant voice input and telehealth: clearer mic access and same-origin autoplay policy

Everyday AI Assistant now opens a brief getUserMedia (audio only) when you tap the microphone, then releases it, before Web Speech runs. That matches how other voice flows prime the mic and helps iOS and Android show a consistent permission prompt. Site Permissions-Policy / Feature-Policy also allow autoplay for this origin so in-call video elements from telehealth can start playback in line with browser rules (camera and microphone remain (self) as before).

Improvement

Accessibility and performance pass: help page headings, telehealth load split, calendar actions, live regions

The Help Center intro is shorter and easier to scan; quick navigation includes an overview anchor; subsection titles use a clearer heading structure. Telehealth call pages load the heavy call UI on demand so the first paint stays lighter. Practice calendarappointment rows use proper buttons for “edit appointment” (video link stays separate). The global footer gradient now follows the same sage and slate brand tokens as the rest of the app. YSQ questionnaire loading and therapeutic hub status messages expose aria-live where useful for screen readers.

Fix

Contact a practice (/contact): page content no longer stuck on “Loading…”

The practice query for /contact?practice=… is read on the server and passed into the client as initialPractice, so the page can render the right view immediately instead of sitting behind a Suspense boundary that only showed Loading… for crawlers, no-JS, or slow hydration. The in-page fetch for public practice site details still runs client-side; you only see Loading… while that request is in flight.

New

Schema questionnaire (YSQ-R): optional “Editorial blue” visual theme (Schema Reflections v3)

On the take questionnaire page, choose Visual theme → Editorial blue — Schema Reflections (v3) for a cool blue editorial look (soft background, light grain, Lora / Cormorant / DM Mono typography in the survey). Your choice is remembered on this device. You can also open the page with ?ysqTheme=editorial-blue in the URL. All questionnaire behavior (autosave, auto-advance, keyboard 1–6, API) is unchanged.

Fix

Schema questionnaire (YSQ-R): on phones, the 1–6 scale stays above the fixed bottom navigation

Item screens add bottom padding (with safe-area) so the rating row and Survey Back/Next controls are not covered by the dashboard tab bar. The scale block also uses scroll margin so focus and scrolling keep the controls in a comfortable viewport.

Improvement

Client portal: skip-to-main on billing, documents, booking, visits, journal, mood, notification settings, login, invite, and password help pages

Signed-in portal routes and public portal flows now share the same skip to main content pattern and a main landmark, including portal sign-in (with loading state), accept invite, forgot access, and reset password stubs. The /portal/appointments shortcut to the visits tab uses the same pattern while redirecting. Profile and intake cover loading and error branches too; a missing intake assignment shows a short message instead of a blank screen. /portal/register still redirects immediately to login with no intermediate page.

Improvement

Client portal: clearer help hub, dashboard shortcut to documents, mobile header context, and skip-to-content on Messages

Help and resources is organized into safety, care, and privacy sections with scannable cards (crisis line, portal home, documents, billing, help center, policies). A short note explains that video visits start from your dashboard or visit details. The portal overview adds a Documentsquick action, with an accessible label when forms are waiting. The top bar shows “From your care provider” on phones too, and the Messages page exposes a proper main landmark for skip links.

Improvement

Schema questionnaire (YSQ-R): refreshed resume screen—clearer progress card, intro tip, and domain bar

The saved progressstep now uses a calmer layout with a sage-to-accent side rail, a dedicated “pick up where you left off” line, and a clearer Continue action tuned for this flow. The first-visit banner and the domain progress strip are easier to scan, and the questionnaire version control is a bit more prominent and keyboard-friendly.

Fix

Schema questionnaire (YSQ-R): clearer, safer messages if scoring fails or the version is unavailable

If something goes wrong while submitting the questionnaire, or you use a version that is no longer available, the app now shows short, plain-language guidance instead of technical error text—so you know to refresh, pick another version, or try again without seeing internal details.

Improvement

Telehealth: stronger prep and recovery—live mic/camera preview, network check, poor-connection tips, and “Enable call sound”

Before you join, Test your setup can now run a real camera and microphone preview (with a simple level meter) so permissions and devices match what the visit will use. There are quick links to Daily's connectivity test for VPN or office Wi‑Fi issues. In the call, if the browser blocks remote audio, an Enable call sound action retries playback after your tap; when the line is fair or poor, you get practical steps to stabilize video. While connecting, the same network hint appears so stalls are easier to diagnose.

Fix

YSQ-R take flow: rating choices look like large cards again (not default tiny radios)

SurveyJS 2.5+ no longer adds .sd-question--radiogroup on the question wrapper, so the 1–6 grid and “fast select” button styles never matched. CSS now targets fieldset.sd-selectbase[role="radiogroup"] (and :has(...) where the whole statement card is styled). The native control stays visually hidden; large tap targets and selection or focus states apply as intended.

Improvement

Public marketing header: one compact row, less vertical space

The shared marketing top bar (logo, site links, Log in / Get started) stays on a single horizontal row at all widths. When space is tight, the center links scroll sideways instead of wrapping into extra lines, and header padding is slightly reduced for a shorter sticky bar.

Improvement

Patient portal: single “skip to main” link and consistent main landmarks

The client portal now exposes one skip link from the shared portal layout (instead of repeating it on every screen). Pages keep a proper main landmark where needed so keyboard and screen reader users land in the right place after skipping past the header.

Improvement

Practice ePrescribe: client chart link, scoped prescriptions, stub workflows, tighter API access

From a practice client detail header, use ePrescribe to open the ePrescribe screen with client_id in the URL so the prescription list can scope to that client. When the vendor flag is on, clinical staff see stub prescribe and PDMP actions (the API still returns not-configured until a partner is live). Backend routes now require encounters:write in addition to practice access. Enrollment and prescription loads run in order after status so the UI stays stable.

New

Practice Manager: ePrescribe hub (vendor status, enrollment, prescription list stub)

Under Practice Management, ePrescribe shows whether a certified prescribing vendor is enabled, lists your enrollment row (NPI, EPCS flags, status), and surfaces the prescriptions endpoint when integrated. Clinical roles with encounter documentation access see it in the hub; reception and billing-only roles do not. Live pharmacy routing still depends on vendor setup described in the product roadmap.

Improvement

Public practice sites: stronger section titles, hero depth, portal rail, and tool-card hover (all templates)

All twelve practice visual templates use larger, tighter-tracking section headings with a short brand-gradient underline. The hero gains a shared elevation layer (templates that already use custom depth keep theirs). The portal summary card shows a subtle primary rail; patient tool tiles lift slightly on desktop hover, with reduced motion respected. Footer links use smoother color transitions.

Improvement

Schema questionnaire (YSQ-R): clearer 1–6 anchors, bigger fast-select grid, and calmer runway

Each item screen opens with a calm anchor strip that shows the real wording for 1 and 6 from your instrument spec, plus a reminder that keyboard 1–6 still selects instantly. The six choice cells use a wider gradient runway, stronger ordinal tinting, micro-labels under every digit, a clearer selected state, and press feedback for taps. On narrow phones the grid becomes three-by-two so targets stay large and mis-taps drop.

Improvement

Public practice sites: refined header, hero, crisis line, and footer for a calmer clinical feel

Visitor-facing practice pages now use a clearer sticky header and navigation hit areas, a subtle main background transition, a calmer 988crisis strip aligned with site tokens, and a richer footer with trust cues. On large screens, the hero adds a short “designed for clinical care” panel so the first screen feels more like enterprise healthcare software without changing your template colors.

Fix

Telehealth (Daily): camera and microphone stay available after join—fewer permission loops

The video call shell now keeps Daily options stable across renders so the meeting is not recreated when React re-renders (which could drop media after a few seconds or ask for permissions again). Start-with-video/audio-off flags are passed where Daily expects them, and after a successful join the app turns local mic and camera on for normal video visits (audio-only mode still starts with video off). The post-join unmute step is compatible with React Strict Mode (used in development), so a brief double-mount no longer skips turning the mic and camera on. If the browser blocks access, you get a clear hint to allow camera and microphone for this site.

Improvement

Public practice sites (/p/…): stronger text contrast in light and dark (WCAG 2.1 AA)

Patient-facing practice pages now use opaque shell backgrounds in dark mode, clearer muted body and link colors in theme CSS, and consistent button text on primary links (including the crisis line). The appearance toggle and mobile menu controls use token text on solid surfaces so contrast stays reliable. Automated checks include axe color-contrast on desktop and mobile viewports.

Improvement

Telehealth: clearer prep—volume and microphone on portal, practice, and pre-call device check

Visit pages and the Test your setup step now remind you to use speaker or headset volume and allow the microphone so audio is easier to get right before and during the call. Automated tests guard the in-call remote audio path for future refactors.

Fix

Telehealth (Daily.co): hear the other person during video calls—not only in audio-only mode

Video calls use separate paths for picture and sound. The video tiles stay mutedby design (to avoid echo); remote audio is played through Daily's audio component. That audio layer is now active for all joined calls, so provider and client hear each other when both use video. If a browser blocks autoplay, you may see a short toast—try unmute or tap the page once, then check volume.

Improvement

Practice wizards and editor: Reflect sage replaces teal for progress, steps, setup cards, and AI modal chrome

The dashboard mini rich-text editor for practice pages now uses the same Reflect sage primary fills and shared focus ring variables as the rest of the portal when you are not in public-template preview. Active formatting buttons pick up a light sage surface so the pressed state is easier to see.

Practice setup wizard page background and in-progress step cards use sage tints built from CSS variables instead of fixed teal. Shared wizard step nav (compact pills and labeled tabs) uses sage for the progress bar and current step, plus ring-focus for keyboard focus. The AI site setup dialog uses a subtle sage ring instead of teal.

Improvement

Help, Marketing, and Features: refreshed product screenshots (including Schema Therapy) and updated image cache version

Feature screenshots on the Help Center, Marketing, and Features pages were re-captured from the live app at desktop size. Marketing viewport shots are no longer uniform low-size placeholders; the Schema Therapy Program (YSQ-R) pair is included in the automated capture route list. Image URLs use a new cache-bust version so browsers pick up the new PNGs.

Improvement

Public practice sites: hero label and default intro match what visitors can do (book, contact, call, or portal)

On /p/…home pages, the small line above the practice name and the fallback description no longer say "online scheduling" or "book a session" when that practice has not published booking. Copy now follows contact form, phone, or patient portal sign-in instead.

Improvement

Public practice sites (/p/…): token-aligned blog, help, footer, appearance toggle; shell states for intake preview

While a practice microsite loads, visitors now see a template-colored welcome state (subtle hero glow, glass-style card, skeleton shimmer) plus clear Help, email support, and privacy actions. The not-found experience uses the same system with full-width buttons for home, help, privacy, support email, and 988.

Blog, intake preview, and patient sign-in routes use the same loading treatment; secondary loads (posts, articles, forms) show an inline skeleton inside the practice chrome. The sign-in page has a clearer layout, accent bar, and icon-backed actions.

Headers, dividers, portal feature chips, and quiet hero links now use each template’s theme tokens for borders and focus rings instead of fixed gray, so light and dark modes stay aligned. The sticky header respects safe-area insets on notched devices.

Book online in the header matches the other nav links—slightly bolder text only—without a bordered capsule. The same treatment applies to Full site on public booking pages when a practice microsite is linked.

Blog list and article pages, the marketing footer rule, embedded contact form separator, light/dark toggle, in-page help assistant (including Markdown replies), and intake preview loading now follow the same template CSS variables instead of fixed gray or teal. Intake preview uses the same shell loading and not-found experience as other /p/… routes before the site JSON loads.

Fix

Therapeutic chat (including Next Generation prompts): message list and composer stay usable on mobile and desktop

The immersive Therapeutic chat route now uses the same full-height layout as the main dashboard chat: the document no longer scrolls behind the input, messages scroll in their own pane, and the composer stays above the bottom navigation on phones.

Improvement

YSQ-R take: finishing overlay labels for assistive tech, gentler save feedback, reduced-motion-friendly UI

The processing overlay after submit now uses proper dialog labeling for screen readers. Autosave shows a brief highlight when a save completes instead of a continuous pulse. Loading placeholders, spinners, and progress motion respect reduced motion where applicable; scale choice hovers stay still when reduced motion is preferred.

Improvement

YSQ-R: countdown after submit; profile and report link to when-to-seek-help and crisis pages

After you finish the questionnaire, the brief “building your profile” screen now shows a seconds countdown before opening your schema profile.

The schema profile and printable report share rows add quick links to When to seek help and Crisis resources alongside share and export actions.

Improvement

YSQ-R clinical report and profile: all subscales by domain, shared color legend, print next steps

The printable clinical report adds a full schema means table for every subscale, grouped by domain and sorted by mean, with band labels and the same color cues as your charts. The executive summary explains the palette in plain language. A Next steps block (including crisis guidance) appears in the printable area; Download PDF exports domain-grouped tables as well.

The schema profile severity card now uses that same legend so chart colors and wording stay consistent.

Improvement

Schema program: links and copy to the Schema Therapy Institute (theory, licensed forms) vs this portal’s YSQ-R activity

The therapeutic hub schema section now includes a short link to the Schema Therapy Institute for official theory and materials. The YSQ-R program card tooltip and description distinguish this portal’s Rasch-style reflection flow from the institute’s copyrighted YSQ-3 long and short forms (sold through their order center).

On take questionnaire, Step 1 adds an official materials note (copyright, order center). Before you answer includes a new accordion on schema therapy context, YSQ-3 vs Rasch YSQ-R here, and the same outbound links—plus help-bubble text on that row.

The same short attribution (order center, institute site, portal vs licensed forms) also appears in the Help Center schema section, schema profile (Reading your results), the printable report callout, and the PDF disclaimer.

Improvement

YSQ-R take: clearer progress, resume and autosave feedback, intro tips, auto-advance, and smarter AI help

The Take questionnaire flow adds a domain-aware progress strip (where you are in the five areas, counts, and a rough time estimate), a saved-progress card when a draft exists, and a clearer autosave status. A dismissible first-visit tip, optional auto-advance after you pick an answer, and a one-time Right Arrow shortcut hint help you move through statements smoothly.

Help me (AI) can include the current statement, domain, theme, and scale labels so answers stay grounded in the tool and psychoeducation—not diagnosis.

After the last item, a short processing step runs before you are sent to your schema profile.

On schema profile and the printable report, results are easier to hand off: subscales ranked by mean, a domain-grouped list, plain-language severity band notes, a share with therapist mail shortcut (plus PDF), and optional short reflection notes (AI, non-diagnostic) for elevated subscales when you ask for them.

The Right Arrow shortcut advances after you answer even when focus stays on the chosen option.

On item screens, the layout is tighter: less header copy, no duplicate theme line in the survey card, a single row of 1–6 buttons (full anchor text on hover and for screen readers), and session tips moved aside so the statement, scale, and Next fit on one view much more often.

Improvement

Schema program (YSQ-R): on each statement, inline “Explain the scale and themes” plus Help me (AI)

While taking the questionnaire, item steps now show a short strip above the survey with the theme / statement position line, an expandable explanation of the 1–6 scale and theme labels (psychoeducation, not diagnosis), and a second Help me (AI) control next to the active question so help is easy to spot without hunting the header.

Improvement

Schema program (YSQ-R): questionnaire and related pages centered on screen; dashboard main fills height

Take questionnaire, profile, and clinical report now use a full-height flex canvas so loading, errors, and empty states sit in the middle of the viewport on phone and desktop. The live survey card gives the question block a minimum height and centers each step; SurveyJS content is horizontally centered in the card.

Dashboard <main> is a flex column with flex-1 so nested full-height flows (including this wizard) can align correctly under the global bar.

Improvement

Changelog, Who this platform is for, and NPD Watch: proper document titles; NPD Watch not in sitemap

/changelog, /who-this-is-for, and /npd-watch are client-heavy routes that previously relied on the root default title. Their segment layouts now export segment-only metadata.title (plus short descriptions and canonical URLs) so browser tabs read correctly with the site-wide title template.

/npd-watch also sets noindex and is omitted from sitemap.xml so the inbox monitor is not promoted as a normal marketing URL.

Improvement

Analytics: virtual page views for home hub, segment landers, and contact

The home hub (/), /marketing/personal, /marketing/practice, and /contact now fire explicit trackPageView on load via a small client VirtualPageView helper (stable path + title labels for reporting). See docs/marketing/FUNNEL_BASELINE.md.

Fix

Brand practice-management report: browser tab title no longer stacks three name segments

/brand/practice-management-landscape used a long metadata.titlethat already included "Reflect with Emily" while the site-wide title template also appends the configured app name—so tabs could read like three chained segments. The document title is now a segment-only value; Open Graph still uses the full headline for link previews.

Fix

Compliance: SOC 2 official link — AICPA & CIMA illustrative Type 2 report

On Security & compliance, the SOC 2 framework reference now points to the AICPA & CIMA resource page for the illustrative service auditor's SOC 2 Type 2 report (SSAE-21 reporting requirements).

Fix

Compliance: HITRUST official link points to HITRUST Alliance site

On Security & compliance, the HITRUST framework reference now uses the public HITRUST Alliance URL: hitrustalliance.net.

Improvement

YSQ-R take: questionnaire panel matches dashboard cards and typography scale

The Schema program → Take questionnaire block now uses the same bordered card surface and padding as Before you answer (no separate cream halo). Survey text uses dashboard font tokens and a 42rem content width aligned with the intro copy; domain titles and options are scaled down so the flow does not feel oversized next to the page header.

Improvement

Who this is for: virtual page view, tracked CTAs, and Next steps footer

The public /who-this-is-for page calls trackPageView on load, uses MarketingTrackedLink for intro, getting-started, and assist links, and adds a Next steps band (pricing + main marketing). MarketingTrackedLink now supports an optional aria-label for accessible dashboard CTAs. See docs/marketing/FUNNEL_BASELINE.md.

Fix

YSQ-R questionnaire: question text stands out from the wizard chrome

On Schema program → Take questionnaire, each item prompt now uses the correct SurveyJS title selectors (so custom styling applies), a slightly larger and darker type scale than the surrounding copy, a light panel behind the question line only, and a gentler step transition so the wording does not look washed out against the cream session background.

Improvement

Therapeutic hub, exercises, and YSQ-R: Help me (AI) button, tooltips, and clearer typography

The therapeutic hub and guided exercise flows now include a prominent Help me (AI) control (same in-context help modal, with the ask section labeled Ask the AI). The same control appears on Therapeutic Chat, Therapeutic Progress, and the cognitive rewiring session page. Section headings and each hub card can show a ? tooltip with short guidance; the Safety Check Try guided wizard link has a hover tip explaining the step-by-step flow.

The YSQ-R take page adds the same help control, tooltip hints on the “Before you answer” panel, and survey styling tweaks (slightly larger type, left-aligned titles and scale options, centered option column within the session frame).

Improvement

Public practice sites (/p/…): calmer hero with one primary action; gentler nav scrolling

On provider public practice pages, the hero now leads with a single primary button (usually View availability), with contact, call, and Sign in to patient portal as lighter text links below. All templates use a bit more vertical space in the hero on larger screens. Section links in the header use instant scrolling when reduced motion is requested.

Improvement

Compliance page and trust strip: virtual page view and CTA analytics

The public /compliance page fires trackPageView('/compliance', 'Compliance') on load and records hero and bottom-band clicks as compliance-page-hero and compliance-page-cta. The trust badge links on the home hub and main marketing page use home-trust-badges and marketing-trust-badges respectively. See docs/marketing/FUNNEL_BASELINE.md.

Improvement

Patient portal password help: Reflect-style buttons; brand hub pages use segment titles for correct tabs

/portal/forgot-password and the portal reset-password stub now use the same sage primary and bordered secondary button tokens as the rest of the client portal, instead of practice-site public styles.

/brand and /brand/platform-vision use segment-only metadata.titlevalues so the site-wide title template adds the app name once (Open Graph titles still use the full "Reflect with Emily" string where set).

Improvement

Schema wizard: cinematic step polish with adaptive guidance

The YSQ-R wizard now has a smoother visual cadence: subtle step transitions, cleaner hierarchy for question text, and gentler option reveal timing for easier scanning.

A short session guidance line now adapts as you move through intro, transitions, and item screens to support pacing without adding friction.

Fix

Therapeutic hub: Safety Check wizard link, resilient progress loading, profile hints

Conversation Safety Check now includes a working secondary link to the guided wizard (it was defined in data but never shown). Progress and profile requests load independently so one failing API does not block the other; if progress cannot load, an on-page notice explains that tools still work and links to the progress page.

When your therapeutic profile returns a treatment phase or core schema, a short line appears under the intro so the hub feels more connected to your saved state.

Improvement

YSQ-R profile & printable report: orientation, navigation, and multi-assessment picker

Schema profilenow matches the questionnaire’s calm framing: back navigation to therapeutic tools, a "Reading your results" orientation panel, primary actions (printable report, questionnaire, chat), and clearer empty, error, and incomplete states. Multiple completions include quick links to each report.

Clinical reportadds the same wayfinding, a "Before you read" callout at the top of the document, and—when you have more than one run—a date picker to switch assessments without hunting URLs.

Improvement

Practice marketing page redesign: clearer hierarchy, richer UX framing, and full clinical flow coverage

/marketing/practice now has a stronger visual hierarchy with larger navigation, headline, body copy, and action controls so provider-facing content is easier to scan on desktop and laptop displays.

The page also adds complete sections for key design principles, interaction patterns, visual system rationale, and an end-to-end user flow so teams can evaluate both product depth and day-to-day usability in one pass.

Improvement

Schema questionnaire wizard: refined visual polish and faster answer scanning

The YSQ-R wizard now uses a more polished interaction surface with a calmer backdrop, a clearer autosave status chip, and larger card-style answer options so choices are easier to scan and tap quickly.

Navigation controls were also refined for better visual hierarchy and continuity, while preserving the same scoring, autosave behavior, and safety messaging.

Improvement

Therapeutic hub & schema questionnaire: clearer orientation and calmer layout

Therapeutic Exercises now opens with short goal chips (Stabilize / Explore / Practice) and section intros so conversation, schema assessment, and skills are easier to choose between. The YSQ-R entry uses a sage accent so the structured program stands out.

Schema program (take)adds a "Before you answer" panel (your answers, control & pace, what this is not), a framed survey area, and richer intro and topic-transition copy—without changing how scoring or saves work.

Improvement

Dashboard: Personal Growth shows every tool when you expand the section

Under All tools → Personal Growth, the extra "Show more" step is removed. Expanding the category (chevron) now lists all Personal Growth links at once.

Improvement

Frankenstein & Consensus Wizard: custom run defaults to all AI providers selected

On Custom run (Step 2), provider checkboxes now start with every available provider selected. "Let AI choose which providers to use" is off by default so the full list is visible; turn it on if you prefer the app to pick. Quick run is unchanged (AI chooses providers in one click).

Turning "Let AI choose" off again restores a full selection. If every provider is unchecked, Run shows a short prompt to pick at least one or use Quick run.

Fix

Public practice sites: primary buttons meet contrast guidelines (Sage Editorial template)

The Sage Editorial preset used light green primary buttons with white label text, which did not meet common accessibility contrast targets. Primary actions now use dark text on that green, and the floating help assistant header uses the same token-driven colors so it stays readable across templates.

Improvement

Frankenstein (multi-model consensus): longer client wait and clearer timeout-style errors

Consensus runs can take several minutes when many providers are used. The app now waits up to 10 minutes for a single run (and scales batch runs up to a 30 minute cap) so the browser is less likely to give up while the backend is still working.

If a proxy still returns a plain "Internal Server Error" message, the UI now explains that it may have been a timeout or heavy load and suggests retrying with fewer providers or shorter input.

Improvement

Reflect brand: deeper sage green for primary buttons and accents

The shared Reflect palette updates the primary sage tone slightly for clearer contrast on marketing, dashboard, and portal surfaces that use the brand theme.

Fix

Practice Management (clients): server returns a clear “encryption not configured” response instead of a generic 500

If the server cannot encrypt client contact or PHI fields (operator misconfiguration), creating or updating clients now receives a structured 503 with a clear support-oriented message instead of an internal server error. Operators should set ENCRYPTION_MASTER_KEY on the backend per deployment docs.

Improvement

YSQ-R questionnaire (take): clearer flow, autosave status, Reflect-themed survey, and resilient submit

On Dashboard → Therapeutic → Schema therapy (YSQ-R) → Take questionnaire, the page now uses a dedicated header with back navigation, live saving status, and SurveyJS styling that follows light and dark mode. Duplicate survey chrome is reduced, errors use shared portal patterns (including sign-in when the session expired), and a failed final submit keeps you on the form with a clear message instead of dropping progress silently.

Marketing and help product screenshots were refreshed to match current UI.

Improvement

Repair hub: aligned cards, equal heights, and clearer icon + text layout

On Dashboard → Repair, the four option cards use a consistent grid with matching row heights, fixed-size icon tiles, and text that wraps cleanly so titles and descriptions line up across the page.

Improvement

Marketing “See the product”: welcome Reflect gradient + lightbox matches signed-in dashboard feel

The screenshot grid on the main marketing page uses the same cream → sage → white gradient as dashboard welcome surfaces. The full-size lightbox uses Reflect borders, a warm header strip, and cream image matting instead of flat gray. Loading placeholder for the section uses the same palette.

Fix

Portal login and other routes: first HTML now includes page content (no blank shell before JS)

The root layout loaded SWR via next/dynamic with ssr: false, which skipped server rendering for AppShell and all route content. URLs such as /portal/login?practice=… looked empty until JavaScript ran. SWR is still code-split, but SSR is enabled so the initial HTML includes the portal login shell and copy; chunk errors remain covered by the existing error boundaries and early reload script.

Improvement

Sign in: browser password save and autofill (username + password pairing)

The /login form now uses standard autofill hints (username for email, on for the form, post method) so Chrome, Safari, Edge, and password managers can offer to save and fill credentials reliably.

Fix

Legal PDF downloads (BAA, Privacy, Terms, Cookies): serve pre-built files when deployed

PDF links such as /api/legal/baa-template.pdf now prefer committed legal/*.pdf files shipped with the app. That avoids 503 when on-demand WeasyPrint is missing or fails on the server; dynamic generation remains a fallback if a sibling PDF is absent. After editing legal markdown, run python scripts/generate_legal_static_pdfs.py in a WeasyPrint-capable environment to refresh the PDFs.

Fix

Activity History (Sessions): duration and chat counts for open visits, streaming chat, and AI Chat

Dashboard → Sessions now shows elapsed time for visits that are still open (not only after log out), derives minutes from start/end when older rows never stored duration, and counts messages from streaming dashboard chat and AI Chat toward the same activity session. Cards use the start time as the title so the list reads as a timeline; log out still finalizes duration for email summaries when enabled.

Improvement

Pricing: compare table + /features links; YSQ/longitudinal aligned with access; dedicated YSQ-R images

The Pricing comparison adds rows for the full capability checklist, Kids Connect, Schema Therapy (YSQ-R) / therapeutic hub, Longitudinal Evaluation (DSM-5 pattern report), and public practice site + booking + /contact?practice=. YSQ-R and longitudinal rows match backend access (full member access, not a subscription tier gate). Copy links to /features with the live line count from the marketing catalog. The main marketing Compare Plans table reads from the same COMPARISON_FEATURES data (Growth column maps to the Growth tier row in code). /features uses dedicated schema-therapy-ysq.png assets under help and marketing (same visual as therapeutic until a separate capture replaces them).

Improvement

Dashboard home redesign: calmer “Today” and “Next for you” panels with improved readability

The dashboard home now groups key actions into two clearer sections: Today and Next for you. The layout narrows the main content column for easier scanning on large displays and uses a consistent Reflect panel shell (slate header + calm body) to reduce visual overload while preserving all existing tools and personalization.

Improvement

Legal: Terms of Service rewritten for Toxic Partner (personal growth, AI, HIPAA scope)

/legal/terms now serves updated Terms aligned with the member-facing product (not therapy; questionnaires for psychoeducation; AI limitations; HIPAA/BAA only where PHI applies). Contact uses [email protected]; governing law Iowa. PDF download stays in sync via the same markdown source.

Improvement

Legal: Privacy Policy aligned with Terms (member vs. PHI use, AI, cookies link, contact)

/legal/privacy now reflects the same product framing as the Terms: personal growth vs. optional professional/PHI use, AI and vendor processing, rights and retention, and Iowa contact. Cookie references point to /legal/cookies. The page title uses the configured app name like the terms page.

Improvement

Marketing feature list: canonical catalog, updated /features, home pill, who-it's-for, and funnels

All named capabilities now live in frontend/lib/marketingFeatureCatalog.ts. The /features page, home value pill, /who-this-is-for, and main marketing accordions read the line count from that file and include previously missing areas (e.g. Longitudinal Evaluation, Schema Therapy YSQ-R, Present for the Next Generation, practice contact and booking, dashboard customization, roleplay, and expanded faith and safety tools). Jest guards category ids and the count.

Improvement

Pricing test mode: current plan shows marketing name (e.g. Coach); support request list matches plan cards

The pricing banner now shows the same names as the cards (Starter, Growth, Growth+, Transformation, Coach). The plan-change request form uses that same tier list, and copy clarifies instant switching with the buttons while checkout is off.

Fix

Compliance BAA page: template text loads on the server (no more “Failed to load BAA Template” when the API misses legal/)

The in-page BAA preview used to call /api/legal/baa-template only. If the backend could not read legal/BAA_TEMPLATE.md, visitors saw a generic error. The same markdown is now read when rendering the page (when the file exists next to the app), with API fetch as fallback. PDF download behavior is unchanged.

Fix

Legal PDF downloads (BAA, Privacy, Terms, Cookies): deploy includes legal/; WeasyPrint pinned to fix broken PDFs on server

Production could return 404 for the BAA PDF when the legal/ folder was not copied to the server, or 503 when an older WeasyPrint stack failed during render—browsers then saved error JSON as a .pdf file that would not open. Deploy now whitelists legal/; requirements.txt requires WeasyPrint 68.1+. After deploy, run the usual dependency install on prod. See docs/legal/LEGAL_DOWNLOADS.md.

Fix

Marketing trust strip: aligned icon + text rows; links no longer forced to oversized tap box

The home and /marketing trust badges use a consistent grid and inline-flex rows. Privacy, compliance, and practice links wrap the icon and label together. A global 44px minimum on every a tag had been stretching only those links and throwing off alignment next to plain text items; that rule now applies to buttons only, while header and footer links keep their own explicit targets.

Improvement

Contact a practice: clearer paths (?practice= slug, /p/…#contact), Help Center, and in-app help

The contact page explains how to use ?practice=with a provider's public booking slug, links to a sample public-site contact anchor, and points to Help. The Help Center adds a Contact a practice section with the same guidance. The help panel on /contact uses a dedicated topic so it does not conflate with practice-staff dashboard help.

Fix

YSQ-R take flow: Next no longer repeats the same question (one item per SurveyJS page)

The questionnaire now uses a separate SurveyJS page for each rating item (plus intro and short section pauses). This avoids a survey-core issue where Next could loop on the same prompt when mixing HTML and multiple ratings with one-question-per-page mode on a single page.

Fix

Admin bug reports: loading watchdog matches large list timeout; API errors no longer look empty

The admin Bug Reports page no longer treats a 20-second stall as a timeout while loading up to 10,000 closed or fixed reports (that path can take longer). The stuck-loading watchdog now uses the same limits as the request timeout. If the server cannot load bug reports, you get a clear error instead of an empty list.

Improvement

Dashboard: dedicated Therapeutic tools section with clearer layout and icon tiles

Under All tools, therapeutic routes now have their own Therapeutic tools category at the top: exercises hub, Schema Therapy (YSQ-R), and Present for the Next Generation. Each entry is a card with Lucide icons and a short guide line; those three are no longer duplicated inside Personal Growth.

Improvement

Schema program (YSQ-R): step-by-step questionnaire, spec-aligned scale, themed survey UI

The YSQ-R take flow uses one question per screen, a short intro that explains the 1–6 scale and how summaries relate to the workbook rule (50% of items rated 5–6), and section pauses between domain groups. Scale labels come from the instrument spec when present. Styling uses Reflect typography and sage/emerald accents aligned with the rest of the portal; drafts can resume using the exact step you left off.

Improvement

Main dashboard: Schema Therapy (YSQ-R) in Quick Access; deploy verifies migration list and DB head

The home dashboard Quick Access grid includes a shortcut to /dashboard/therapeutic/schema-program/take (same route as the Therapeutic hub card). Production deploy now checks that migrations_ordered.list matches after copy and runs a migration head check on Postgres after migrations (see docs/deployment/SQL_VERIFICATION.md).

Improvement

Schema program: therapeutic hub entry, PDF download on report, mode-map trigger notes, help anchor, instrument spec doc

The therapeutic dashboard now includes a Structured schema assessment card for the YSQ-R flow. The clinical report page adds Download PDF (summary tables via @react-pdf/renderer) alongside print. The mode map supports per-node trigger notes that appear in the printable report. Help Center lists Schema Therapy Program (YSQ-R) with anchor #schema-therapy-ysq. See docs/features/SCHEMA_THERAPY_YSQ_R_SPEC.md for the JSON spec shape.

Fix

Sticky headers and nav: horizontal overflow uses clip so menus stay correct while scrolling

Site-wide, overflow-x: hidden on the document and shell was creating scroll containment that interfered with position: sticky (marketing header, dashboard bar, and other sticky chrome). Horizontal clipping now uses overflow-x: clip, which keeps wide content clipped without breaking sticky behavior.

Improvement

Schema program: optional YSQ item wording in the instrument spec; PHI redacted on save and in API responses

You can add optional text fields under item_definitions in the YSQ-R spec (no separate gitignored file). The API strips common identifiers (for example email, typical U.S. phone layouts, SSN-style digit groups) from that text, from saved mode-map labels, and from draft responses before storage. Mode map data returned for history and reports is redacted the same way.

Improvement

Schema program: YSQ-R print report shows longitudinal metrics and saved mode map

The clinical report at /dashboard/therapeutic/schema-program/report now includes schema-level change vs your prior completion (RCI and Jacobson–Truax-style classification where computed), domain-level change vs your first assessment in the series, and a text snapshot of your saved mode map (nodes and links) for printing or discussion with a clinician.

Improvement

Help and marketing: refreshed in-app feature screenshots and image cache version

Desktop captures for Help and marketing feature grids were re-run against a healthy dev stack (frontend and API). PNG assets under public/images/help and public/images/marketing were updated, and FEATURE_SCREENSHOT_ASSET_VERSION was bumped so browsers and CDNs load the new images.

Improvement

Marketing: solid sticky header, nav wraps on small screens, refreshed growth-journey section and product screenshots

The public marketing shell header no longer uses frosted glass over the page—solid backgrounds and a higher stacking order keep nav readable while content scrolls. Primary links wrap instead of forcing a horizontal scroll strip. The “Features for every growth journey” accordions use opaque cards with clear tier badges. The “See the product” screenshot grid uses Reflect surfaces and a new cache-bust version for static images after you replace PNGs (see FEATURE_SCREENSHOT_ASSET_VERSION).

Fix

Marketing and public practice copy: screen-reader punctuation, app name trim, booking fallback sentence

Inline links followed by commas or periods are adjacent in the DOM so assistive tech does not announce stray spaces (e.g. before “.”). The public practice “Care tools” paragraph uses correct copy when online booking is not shown, and list commas after portal deep links are tightened the same way. NEXT_PUBLIC_APP_NAME is trimmed at load; whitespace-only values fall back to the default display name.

Fix

Client portal: no registration page—/portal/register goes to portal sign-in

The client portal does not offer member registration. /portal/register now redirects to /portal/login. Portal login and unauthenticated portal home copy point to main-site sign-in and features only, not a sign-up form.

Improvement

Client portal identity is explicit and separate from Reflect member accounts

Portal access uses your practice chart (magic links and portal JWTs), not the same user ID as the main member app. New portal tokens include explicit JWT claims; member API auth rejects practice-portal tokens so they are never treated as /api/me sessions. Portal copy clarifies that chart identity is separate from member accounts.

Improvement

Signed-in client portal: sidebar matches main/care groups (Journal, Goals, Mood, Billing), new hub pages

After practice portal sign-in, the desktop sidebar is organized like the Reflect-style layout: Main (Dashboard, Appointments, Messages, Journal) and Care (Goals & progress, Mood tracker, Documents, Billing). /portal/journal and /portal/wellbeing explain where journaling and mood support live (messages, visits, clinician-assigned forms, crisis resources). Sidebar labels and section headers use higher contrast; the ink bar uses a consistent charcoal background. The header title uses NEXT_PUBLIC_PORTAL_TITLE when set, otherwise your app display name. Intake tasks and invoice detail remain on the dashboard tabs and billing flow; Help stays in the top bar on smaller breakpoints.

Improvement

Practice sites (Emerald Void): brighter body, nav, and footer text for easier reading

Muted copy and navigation on the Emerald Void template use higher-contrast greens and off-whites instead of very transparent white. Dark token colorTextMuted is slightly lighter; branded sign-in cards use theme typography utilities so secondary paragraphs stay readable on dark surfaces.

Fix

Practice portal sign-in: resolve site by booking slug, path-based portal link, clearer Sign in labels

The public API for /practice/site/public/…now matches a provider's booking slug when it differs from the practice site URL slug, so /portal/login?practice=… and portal sign-in branding load the correct practice. The branded /p/…/login page sends people to /portal/… on the same host instead of an optional subdomain URL that often failed. Header, footer, hero, and help shortcuts now say Sign ininstead of "Patient portal" for the auth entry point.

Improvement

Practice sites and booking pages: aligned horizontal padding, calmer section spacing, even tool cards

Public /p/… and /book/… chrome now share the same responsive page gutters (lg:px-8), including header, footer, and the crisis strip on practice sites. Main content sections use slightly larger vertical rhythm; patient tool cards in a grid no longer stack an extra top margin on every tile, so rows align cleanly.

Improvement

Public practice sites (/p/…): same visual system as online scheduling (/book/…), unified contact card

Provider microsites at /p/… now use the same PracticeSiteVisualTheme Tailwind tokens as /book/… (shell, header, hero, section titles, content cards, CTAs, and marketing-style footer) so the full site and booking page feel like one experience. The Contact block keeps phone and address in a single surface with the secure message form (no nested duplicate cards); form-only contact sections skip an empty list wrapper.

Improvement

Public practice sites (/p/…): wider layout, clearer typography, and more breathing room between sections

All twelve practice site templates now share a slightly larger base type size and line height for long-form reading, with generous vertical spacing on the hero, patient tools grid, About, Services, Contact, header, and footer. Main content uses a wider max width (max-w-7xl), hero padding is driven from theme CSS (no double padding), and provider HTML blocks get clearer heading and paragraph rhythm.

Improvement

Public practice sites (Emerald Void): refined palette, hero spacing, calmer motion

The Emerald Void template used on provider /p/… pages has updated tokens (richer hero gradient, slightly brighter body/muted text, softer card shadows, larger corner radii) and a taller hero with more vertical rhythm. Primary and secondary CTAs no longer animate transform on hover when prefers-reduced-motion is set.

Fix

Browser tab titles: legal pages, help crisis, Find your tool, and iPhone export guide no longer double the app name

Several routes still embedded the full product name in metadata.title while the root layout already applies %s | app name. Tabs showed duplicated or awkward titles (including a literal &apos;on "When to seek professional help"). Those pages now use a segment-only title so the template produces a single, clean tab label.

Improvement

Shared Bible links (/bible/shared/*): public marketing shell and noindex

Token-based shared bookmark and shared note pages now use PublicMarketingShell with main id="main-content" and segment noindex metadata, consistent with other recipient-only links.

Improvement

Password reset (token link): Reflect sage styling matches login and register

The /reset-password flow (set new password, success, invalid link) no longer uses purple/pink gradients. Primary actions, headings, focus rings, and footer links use the same Reflect sage/slate tokens as /reset-password-request and sign-in. The confirm-password field and /reset-password-request submit button now use the same sage focus ring and solid primary CTA (no gradient).

Improvement

Shared links (/share/*): public marketing header, main landmark, noindex by default

Routes under /share (Safety Check share and verify links, document downloads, pastor package) now use PublicMarketingShell with main id="main-content" and segment noindex metadata. Individual share UIs are unchanged; recipients get the same primary nav and account shortcuts as the rest of the public funnel.

Fix

Safety Check: email confirmation link no longer sends you to sign-in first

The edge auth allowlist now includes /confirm-send-safety-report, so the link in the "confirm before we email the recipient" message works without a portal login cookie—matching the intended public flow for share-by-email.

Improvement

Safety Check email confirmation: same public header as the marketing funnel

The interstitial at /confirm-send-safety-report (after you tap the link in the confirmation email) now uses PublicMarketingShell and main id="main-content", with noindex metadata so the page stays out of search indexes. The in-page flow and copy are unchanged.

Fix

Practice site help assistant: safe when practice slug is not available yet

The floating help on public practice sites and the patient portal no longer throws if siteSlug is missing when sending a message; the request is skipped until a slug is present. The standalone contact link line uses the same guard.

Improvement

NPD Watch status page: public marketing header and accessible main region

The standalone /npd-watch inbox monitor now uses PublicMarketingShell with main id="main-content", matching primary navigation and account links on the public funnel. Layout uses Tailwind instead of inline styles; the content area keeps a neutral gray canvas below the header.

Fix

Browser tab titles: no more doubled app name (Features, About, Help, landings, dashboard tools, marketing hub)

The root layout uses a title template that already appends the app name. Several routes were also embedding the name in metadata.title, which produced tabs like Features | Portal | Portal. Segment-only titles are fixed for marketing and dashboard layouts, Help, Contact, BAA, Safety Check landings, and the main /marketing hub uses an absolute title so the long headline is not duplicated.

Fix

Practice site care guide: no crash when site slug is missing from help send

Sending a topic or message in the floating help assistant no longer throws if siteSlug is absent; the request is skipped until a valid slug is available. Voice mode uses the same guard.

Improvement

Sign-in page: Reflect look aligned with registration (cream canvas, sage, no practice-theme pills)

/login no longer uses the practice-site theme wrapper. It matches the Reflect funnel used on /register: cream gradient background, white card, sage primary button and links, rounded-lg fields, and a calmer HIPAA disclosure. The welcome column uses the same typography tokens as the rest of the marketing shell.

Improvement

Client portal: colors and fonts follow your public /p/… practice template (not a fixed Reflect skin)

Portal chrome maps to the same practice-site --color-* tokens as /p/slug, and headings/body use the template’s Google Fonts. Dark templates get a dark main column and sidebar strip aligned with the public site; light templates keep the ink-colored sidebar on a cream-style main area.

Fix

Login & client portal sign-in: browser tab titles no longer duplicate the app name

The root layout uses a title template (%s | app name)./login was passing a title that already included the app name, which produced Sign in | Portal | Portal (and similar). Titles are corrected for the main sign-in page and /portal/login (explicit full title there so the portal shell still shows the right tab text).

Improvement

Practice site help & layout editor: squarer controls

The floating help launcher, topic chips, send control, and voice mode button use squarer corners aligned with the practice-site chrome refresh. The dashboard page layout toolbar chip matches.

Improvement

Client portal navigation: overview link labeled Dashboard (desktop sidebar and mobile bar)

The signed-in portal first nav item now says Dashboard instead of Home, matching the Reflect design prototype wording while keeping the same routes. Applies to the desktop sidebar and the bottom quick navigation on small screens.

Improvement

Campaign landings (/landing/*): shared public marketing header and main landmark

All routes under /landing (Facebook campaign pages, Safety Check lander, Bat Wolf partner page) now use PublicMarketingShell with main id="main-content", matching the primary nav and account links used on the rest of the funnel. Page bodies keep their existing gradients; outer wrappers use flex growth instead of a nested full viewport height.

Improvement

Client portal overview: Reflect-aligned trust row, calmer copy, clearer actions

The signed-in portal home adds a compact privacy and safety strip (encryption note, Privacy, Terms, compliance overview, and 988) with easier horizontal scrolling on small screens. Quick actions and stat cards use clearer labels and screen reader hints; copy is toned for a steadier, less clinical feel. The overview layout is grouped in a dedicated component for maintainability.

Improvement

BAA download page: same public header and footer as Compliance

/compliance/baa now uses PublicMarketingShell (clinical variant) with the primary nav and account links, plus the platform SiteFooter, consistent with the main compliance overview. The document body stays in a centered column without an extra full-viewport white wrapper.

Improvement

Practice setup wizard: calmer Invoice payments step and no Stripe dead-ends

The Invoice payments (Stripe) step uses plain-language guidance (no env variable names in the short view), clearer step progress text, and always lets you move on with Next step. Pay status still refreshes from the wizard, and admins get direct links to configuration and Stripe setup. Leftover debug network calls were removed from the inline setup panel.

Improvement

Member dashboard home: trust strip, clearer daily intention, smarter notifications list

The main dashboard now includes a short privacy and safety strip with links to Privacy, Terms, the compliance overview, and 988 for crisis support. The daily intention card is easier to spot on small screens, and the recent notifications preview fetches a few extra items and hides duplicate-looking rows so unique updates are easier to scan.

Improvement

Reflect tokens: AI chat, messages, legal index, crisis help, devotion flow, and global gradient utilities

More surfaces now use the same Reflect CSS variables instead of legacy purple and pink: dashboard AI chat and messages (sidebars, bubbles, CTAs), /legal index and document chrome, /help/crisis callout panels, password reset, devotion connect, and shared Bible / couples widgets (daily devotional, date night, events). Global CSS utilities .gradient-brand-*, .bg-gradient-purple-pink, and .gradient-background-page map to sage and slate so older class names pick up the new brand. The root global error screen uses the same cream background and sage primary button.

Improvement

Practice dashboard: Reflect design system preview (new tab)

Under Practice Management on the main dashboard and in the Practice hub sidebar, search, and Navigate grid: Reflect design system opens the static stakeholder HTML preview (/design/reflect-design-system-showcase.html) in a new tab. It shows landing, login, portal, and email layouts with illustrative copy only; the live app remains the source of truth.

Edge auth uses proxy.ts with the same public-path allowlist as lib/proxyAuthPaths.ts, so /design/ preview files stay reachable without a dashboard login (stakeholder sharing). Restart the dev server after deploy so proxy changes apply.

Improvement

Public practice site templates: less pill-shaped chrome

All practice site visual themes now use squarer corners for nav labels, theme CSS buttons, services tags, and related controls. Decorative blurred hero orbs are turned off so hero text no longer sits over a circular glow.

Fix

Practice setup wizard: one checklist total in header and progress; optional Pay no longer blocks Next

The wizard subtitle and the line under the step bar now use the same checklist total (no mixed “5 of 5” vs “5 of 6”). The optional Invoice payments (Stripe) step counts complete when Pay is live, when the server reports it is not enabled, or when status cannot be loaded—so you can use Next stepto reach calendar sync without configuring Stripe. Practice hub “fully configured” rules that require Pay where applicable are unchanged.

Improvement

Legal documents: layout-friendly loading and content (no double full-page chrome)

Privacy, Terms, and Cookie policy pages under /legal no longer use an extra full-viewport wrapper inside the shared legal document card, so loading and error states align with the rest of the funnel. When to seek professional help drops the redundant outer full-screen block so it sits cleanly in the same shell.

Improvement

Marketing nav: Who it’s for in the primary bar

PublicMarketingShell primary navigation now includes Who it's for (/who-this-is-for), between Pricing and Compliance, on every surface that uses the shared marketing header.

Improvement

Reflect look-and-feel: marketing sweep, dashboard chrome, new practice-site default

Public marketing components and pages that still used violet or purple accents now use the shared Reflect CSS variables (sage, slate, cream). The signed-in dashboard home and shared widgets (nav cards, welcome block, preferences, partner activity, and related panels) use the same sage-forward accents instead of purple and pink gradients. Register, 404, and other auth-adjacent screens match the cream canvas and sage primary actions.

New provider public practice sites default to the Sage Editorial template (warm cream, Cormorant + DM Sans, sage CTAs) so out-of-the-box /p/… matches the Reflect portal; existing template choices are unchanged.

Improvement

Help, Brand, and Legal: PublicMarketingShell for consistent public chrome

/help, /help/crisis, the /brand hub and long-form brand reports, and all /legal routes now use the same PublicMarketingShell (primary nav, account CTAs), with the platform SiteFooter from AppShell. Legal keeps its inner document card; the old full-width gradient wrapper is replaced by the funnel background from the shell. Brand hub drops the duplicate top nav row; platform vision and practice management reports keep a compact “Back to Brand” link above the content. The legal index no longer duplicates “Back to Home” next to the title.

Improvement

Public marketing UX: Reflect tokens on home, compliance, pricing, and shell CTAs

The home hub hero, value pills, path cards, and path finder now use the same sage / slate / cream variables as the rest of the funnel, with shared layout tokens in marketingTheme.ts (main column widths, hub card surface, trust bands). Compliance stat rows and feature tiles use sage accents instead of generic blue; the closing CTA band uses sage. Pricing hero copy is line-length capped with the Reflect headline gradient. Header Get started and Log in pull from exported shell CTA classes so they stay in sync with in-page buttons.

Improvement

Pricing and Who it’s for: Reflect funnel tokens (cream canvas, sage CTAs)

Who this platform is for now sits on the same cream canvas as the rest of the funnel, with bordered panels, sage checkmarks, soft sage callouts for capability cards, and shared primary / slate / outline buttons from marketingTheme.ts. The Pricing hero uses the slate-to-sage headline gradient and the same editorial primary button class as other marketing pages.

Improvement

Error screens: Return to home + clearer assistive labels

On the global error and global error pages, the action that sends you to / is now labeled Return to home with an explicit screen-reader name (Return to marketing home page) so it is distinct from Go to Dashboard. The home-page E2E check for a single platform footer now waits on Playwright's assertion timeout instead of a fixed delay.

Improvement

Features page: Reflect sage and slate accents (shared marketing tokens)

The public Features page hero, jump links, category icons, and footer CTAs now use the same Reflect palette as the client portal and funnel (sage buttons, slate-to-sage headline, soft sage chips)—implemented via shared classes in marketingTheme.ts so future tweaks stay consistent.

Fix

Getting Started guide: dashboard button labeled Open dashboard

On /who-this-is-for, the secondary CTA that links to /dashboard now reads Open dashboard (with an explicit accessible name) instead of “Go to Home,” which pointed at the dashboard and was easy to confuse with the marketing home page.

Improvement

Client portal: Help link in the header on tablet widths

Between medium and large breakpoints, the sidebar and mobile bottom bar are both hidden, so signed-in clients now see a Help control in the top bar (screen readers: Help and resources) that opens the same crisis and platform links as /portal/resources. Phone and desktop layouts are unchanged.

Improvement

Client portal: Help and resources in the mobile bottom bar

On phones and small tablets, the portal's bottom navigation now includes Help (full label for assistive tech: Help and resources), matching the desktop sidebar link to crisis and platform help on /portal/resources.

Improvement

Client portal: dashboard layout, Help and resources, completed visits, linked member snapshot

The portal home groups your next visit and the three summary cards in one grid. A Journal and goals (full site) quick action appears when your practice record is linked to a member account; the full-site card below is always available. Help and resources lives in the sidebar. The first summary card shows your completed visits count from past appointments.

When your practice record is linked to a full member account, the dashboard can show recent journal excerpts (truncated), active goals, a 7-day energy average from check-ins, and a journal streak. Open entries on the full site to read or edit; provider staff preview does not load this snapshot.

Improvement

Site-wide: one platform footer, 404 in marketing chrome, Getting Started layout fix

PublicMarketingShell no longer embeds SiteFooter—the platform footer is rendered once by AppShell, which removes duplicate footers on home, features, pricing, and other funnel pages. /compliance (where AppShell hides the footer) now includes SiteFooter at the end of the page so links and legal columns stay available.

The global 404 page uses the same marketing header and skip link as other public pages, with clearer actions (home, dashboard, help, contact). /who-this-is-for drops a nested duplicate shell so the header and nav render once. color-scheme on html follows light/dark mode for native UI (e.g. scrollbars).

Improvement

Practice public site: Services HTML layout classes (card grid + CTA band)

Provider-authored Services HTML (dashboard editor) can use optional layout classes ps-html-services* for a centered header, responsive three-column service cards, tags, and a contrasting bottom CTA band. Common pasted snippets using rwe-svc* class names are styled the same way. Colors follow the active practice template (light/dark toggle included). Replace any sample copy with accurate offerings, licensing, and session details for your practice.

New

Practice public site: Sage Editorial template (cream, sage, Cormorant + DM Sans)

New preset Sage Editorial for public /p/… sites: warm cream canvas, muted sage actions, slate body type, Cormorant Garamond headings and DM Sans UI—editorial provider-bio feel. Replace placeholder About/Services with your real name, credentials, and copy; do not publish fabricated statistics. Template id: sage-editorial.

Improvement

Provider client portal: Reflect-style sage, slate, and cream shell

The authenticated client portal now uses a dedicated shell aligned with the Reflect design language: slate desktop sidebar with a sage logo mark,cream main canvas, DM Sans body type with Cormorant Garamond headings, pill quick actions, stat tiles, slate “next visit” card with a sage date block, and refined panels. The overview drops duplicate Messages / Book / Appointments tiles (those stay in quick actions, stats, and sidebar). Public portal sign-in pages keep the default practice theme without this shell. On tablet widths, section tabs use sageactive states (no purple-pink gradient), and the “full member app” card matches the same cream / white panel styling.

Improvement

Public practice pages (/p/…): less circular chrome, calmer hero

Hero backgrounds and the large side panel now use linear washes instead of radial blobs; the scheduling-available marker is a small square with a gentle opacity pulse (no scaling). Trust chips use rounded rectangles; primary and secondary CTAs on public practice sites use medium corner radius instead of full pills. The dashboard theme preview strip label matches the live header: Book.

New

Practice public site: Emerald Void template (dark emerald editorial)

Providers can choose a new Emerald Void preset in Practice Site settings: deep charcoal surfaces, emerald primary actions, soft gold accents, and Cormorant Garamond + Syne typography for public /p/… pages and booking. Visitor light/dark toggle still applies layered dark tokens. Template id: emerald-void.

Improvement

Features and pricing: same marketing shell as home and compliance

Public /features and /pricing now render inside PublicMarketingShell (skip link, primary nav, account CTAs), with the platform SiteFooter from the root layout shell—consistent with /, /compliance, and the contact layout. Main content stays on #main-content.

Improvement

About and Contact: shared marketing header and footer via layout

The public /about and /contact routes now use the same PublicMarketingShell as other funnel pages (primary nav, account CTAs), plus the shared platform SiteFooter. The About page drops the duplicate inline nav row; both pages expose #main-content for the skip link.

Improvement

For providers marketing: dedicated dark editorial shell and typography

The public /marketing/practice segment now uses its own PublicMarketingShell variant (dark canvas, emerald accents, ambient glow) with Cormorant Garamond and Syne scoped to that route. The main marketing hub and personal segment still use the warm funnel shell. Product copy and compliance positioning are unchanged.

Improvement

Pricing page: virtual page view and tracked Next steps footer

The public /pricing page now calls trackPageView('/pricing', 'Pricing') on load (aligned with /features) and adds a Next steps footer with MarketingTrackedLink for All features and Who it's for (pricing-page-footer in cta_click). See docs/marketing/FUNNEL_BASELINE.md.

Improvement

Provider client portal: Cormorant Garamond + Syne typography

The practice-linked client portal (and portal sign-in flows) now uses a consistent display serif and geometric sans pairing—Cormorant Garamond for headings and Syne for body and UI—applied inside the portal shell without changing fonts on the rest of the site.

Improvement

Practice setup wizard: shorter Invoice payments (Stripe) step

Step 5 of the practice setup wizard now shows a compact six-line checklist for portal invoice Pay (Stripe), with shorter step description, tip, and expanded help. Full detail remains on Practice → Configuration → Invoice payments and Admin → Stripe setup.

Fix

Telehealth (Daily): audio-only join no longer blocks turning camera on in call

Joining with Audio only used to pass videoSource=false to Daily for the whole session. That prevented enabling video later and could surface confusing Daily messages about being muted or not using video and audio together. Audio-only joins now rely on start video off only, so switching to Video in the call bar can start the camera normally (portal and practice telehealth).

Improvement

Features page: broader product coverage (Kids Connect, therapeutic tools, practice management)

The public /features page now summarizes more of what the platform includes: expanded personal and communication bullets, full wizard names, richer Couples Connect items, new sections for Kids Connect and therapeutic & repair tools, and a fuller Coach plan & practice management list (public site, patient portal, scheduling, billing, telehealth, compliance workspaces). SEO descriptions were updated to match. Feature screenshots map new sections to existing marketing assets where applicable.

Improvement

Features page: virtual page view and tracked header/footer CTAs

The public /features page calls trackPageView on load (aligned with the main marketing client) and uses MarketingTrackedLink for hero and “Next steps” links so cta_click events use features-page-header and features-page-footer locations. See docs/marketing/FUNNEL_BASELINE.md for the full map.

Improvement

Home hub: path finder, sticky marketing header, motion-safe cards, and CTA analytics (FUNNEL_BASELINE.md)

The public homepage adds the "Not sure where to start?" path finder (on-device matching), factual value chips (tool-count pill on home, one account, your data), a dedicated Choose your path section with improved heading hierarchy, and prefers-reduced-motion-safe hover on hub cards. The shared PublicMarketingShell header is sticky with backdrop blur where supported so primary navigation stays reachable while scrolling.

Hero CTAs, hub cards, and the path finder "Go to recommended section" link now emit consistent cta_click analytics (home-hub-hero, home-hub-card, home-path-finder). Operators can map events using docs/marketing/FUNNEL_BASELINE.md.

Improvement

Login: two-column layout, clearer sign-in hierarchy, and calmer compliance copy

The main /login page uses a responsive two-column layout on large screens: themed introduction with product context and links, plus a focused sign-in card with a skip link, clearer headings, and HIPAA notes in a compact disclosure. The form card no longer uses the marketing card hover lift so the primary task feels steadier.

Improvement

Marketing playbook: funnel baseline docs, shared heroes, exit-intent analytics

Adds docs/marketing/FUNNEL_BASELINE.md and MESSAGING_MATRIX.md (URLs, analytics labels, messaging matrix). MarketingHero and MarketingSection support clinical wide layout (compliance), as/flush props, and layout roots expose data-marketing-theme. Exit-intent modal uses honest lead-magnet copy, trackCTAClick on submit and skip-to-register, plus optional static preview at docs/marketing/prototype/marketing-funnel-preview.html.

Improvement

Marketing hero: respects reduced motion preference

On the public marketing hero, when the device or OS prefers reduced motion, the headline appears without the delayed fade-in, the dashboard preview skips its entrance animation, and "Browse on-page features" scrolls instantly instead of smoothly.

Improvement

Home hub: “Suggest a path” uses on-device intent matching (no external AI)

The public home page adds a short form: describe what you need, then get a suggested marketing section (providers, individuals and couples, or platform overview). Matching runs in the browser with local rules—nothing is sent to an external model for that step.

Improvement

Marketing & home hub: clearer funnels, honest trust copy, and SEO refresh

The public home page and marketing funnel use shared theme tokens, stronger positioning for individuals vs healthcare teams, and CTAs that point to pricing and compliance. Hero and pricing sections no longer show fabricated usage statistics; testimonials were replaced with trust pillars and clearly labeled illustrative workflows.

Metadata and structured data gained keywords around practice management, telehealth, and HIPAA-aligned safeguards. See docs/marketing/MARKETING_REDESIGN_2026.md for details.

Improvement

Marketing segments & Features page: cross-links for platform, providers, and pricing

For individuals & couples and For healthcare providers now surface All features and Pricing in the hero (and the providers closing card links there too). The public Features page reuses the shared marketing background token and adds nav links to the main platform story, the provider segment, and Compliance.

Improvement

Communications Wizard: compose coach, keyboard shortcuts, and clearer topic hints

The Communications Wizard adds a compose coach with draft → preview → send progress, live word and character counts, and tips for empty or very short messages. In the message box, Ctrl/⌘+Enter opens preview; the same shortcut on the preview step sends (when safe). Press / outside a field to jump to message search.

Topic chips show richer tooltips (hints and prompt text). List density still saves to this device; thread load also refreshes cycle-aware nudges and suggested boundaries in fewer background passes.

Improvement

Client portal telehealth: same practice colors and typography as the rest of the portal

The Telehealth visit page (/portal/telehealth/call) uses your practice template background and branded links (same as portal home and appointments) instead of a separate purple gradient, so the video flow feels like one continuous experience.

Fix

Telehealth (Daily.co): encoded meeting tokens and broader join URL recognition

Server-issued join links now URL-encode meeting tokens so unusual characters cannot break the query string. The embedded call flow treats t=, token=, and meeting_token= as equivalent on *.daily.co and *.daily.video hosts before joining.

Improvement

Practice manager: calmer wizards, invoice Pay diagnostics, Stripe warm-load

The Practice setup wizard and My practice site step editor share a consistent progress bar and step controls (teal accent, clearer focus states). The AI site setup dialog supports Escape to close and restores focus when dismissed.

Invoice payments status and payment-link creation reload Stripe keys from Admin into the running backend before checking or creating Checkout, and the checklist now includes whether a publishable Stripe key is set (optional but recommended). See docs/features/PRACTICE_MANAGER_WIZARDS_AND_STRIPE.md for details.

Improvement

Public practice sites: portal login URLs, mobile menu, telehealth prep

Practice pages at /p/… use correct Portal login URLs when a booking slug is set, add a mobile menu with focus handling, and put Book and Portal login in the desktop header. In-page section links scroll and move keyboard focus; touch targets for nav meet a 44px minimum.

Missing practice pages show clearer recovery options (help, privacy, support email, crisis line). Before a video visit, the portal adds a short Before you join checklist and calmer device-check wording. Provider embedded preview includes a clearer explanation of same-origin preview and an accessible frame title.

Improvement

Practice site templates, public nav, and About/Services editor

All 10 public templates now use refreshed descriptions in the picker (waiting-room friendly, booking and portal context). The 988 crisis strip uses clearer contrast on every template. Public /p/… navigation labels are task-oriented: Patient login and Book stay in the header; section links use Get care and Intake previews without duplicating login in the nav row. The help assistant copy matches.

The practice dashboard About and Services rich editor gains H2/H3, underline, a labeled link URL row (no browser prompt), 44px toolbar targets, and a live preview using your selected template fonts and colors.

Improvement

Michael–Emily Mail: find it under Connection with your partner

The Michael–Emily Mail card (for Emily and for admins) now lives in ConnectionWith your partner, alongside Couples Connect and related tools, instead of alone near the top of the dashboard.

Improvement

Practice setup wizard: popup from Practice hub, wider steps, clearer invoice Pay copy

On Practice hub, calendar, and configuration, Start setup wizard opens the same checklist in a modal so you stay on the page you were on. The full-page wizard remains at /dashboard/practice/setup and via the banner link; you can also open the popup with /dashboard/practice?wizard=1.

The wizard panel is wider on desktop, with a sticky footer for Back and Next step. The invoice payments (Stripe) step copy is tightened so tips, help, and the main description do not repeat the same message.

Fix

Public booking page: browser tab title no longer repeats the app name

/book/… metadata used the root title template and also appended the platform name, which could produce titles like Practice | Portal | Portal. Titles now use a single absolute title string.

Improvement

Public practice sites: bolder hero, cards, and sections

Visitor /p/…pages get a taller hero with layered glows from your template colors, a large-type headline, optional two-column layout with a glass “Designed for clarity” panel on wide screens, stronger primary buttons, and a softer patient-tools band. Section titles use a gradient accent bar; cards lift slightly on hover (respecting reduced motion); About/Services HTML gets clearer lists and blockquote styling. The sticky header uses a deeper frosted blur and shadow.

Improvement

Public practice pages: clearer text and borders

Visitor-facing /p/… practice sites use stronger contrast for navigation, body copy, links (visible underlines), section dividers, cards, and the crisis-resources strip. About and Services HTML blocks read slightly darker for readability across templates.

Improvement

Public booking: configurable days and times (UTC)

Providers can set which weekdays, UTC hours, and slot length appear on the anonymous /book/… link, in Practice → Configuration → Client portal (Public booking section) and in the practice setup wizard (online booking step). The public API now honors these settings, and booking requests outside the configured window are rejected.

PostgreSQL should run the add_provider_profile_booking_availability_json migration when deploying this change.

Improvement

Practice setup: company and legal name on provider profile

The practice setup wizard and Practice → Provider profile now collect company or practice legal name, legal first name, and legal last name alongside NPI and Tax ID. Saving legal first and last name updates your account display name. PostgreSQL deployments should run the add_provider_profile_legal_identity_columns migration if needed.

Fix

Practice setup: NPI and Tax ID save correctly

The practice setup wizard and Practice → Provider profile now normalize and persist your full 10-digit NPI (as text, so leading zeros are not dropped) and Tax ID (SSN or EIN, including hyphens) up to 32 characters. PostgreSQL deployments should run the widen_provider_profiles_tax_id migration if an older database still has a shorter column.

New

Client portal: Alert Center, unread counts, and notification settings

Signed-in clients see a notifications bell in the portal header with a slide-out list (mark read, dismiss, jump to messages). New provider messages can create an in-app alert; the dashboard payload includes unread alert counts alongside messages.

/portal/settings/notifications saves per-client channel and quiet-hour preferences (stored with your practice portal account). Operators can add the optional topic_id column on practice_portal_alerts using the SQL note under docs/schemas if an older database predates that field.

Improvement

Practice site help assistant: chat thread, voice mode, and smarter API

The floating assistant on public /p/… pages now opens a threaded chat with a short greeting, template-colored chrome, optional voice input (browser speech recognition + read-aloud), and a word-by-word reveal when AI replies. You can type a question without picking a topic first; the server infers a topic when needed.

The same assistant appears in the signed-in client portal when your practice context is known, with the launcher lifted on small screens so it clears the bottom nav.

New

Public contact page and richer client portal messages

/contact?practice=… (your public booking slug) opens a themed contact form with no main-app login. It uses the same secure public-contact API as /p/…#contact, with messages capped at 5,000 characters. Public practice pages can link to that dedicated URL for sharing; /contact is included in the site map for discovery.

Portal → Messages keeps the existing secure thread with your provider but adds a clearer layout on the full messages page, a non-emergency banner, optional topic tags (prepended to your message for triage), theme-colored bubbles, and 30-second background refresh when the tab is visible.

When your provider sends a message, in-app notifications no longer repeat the message text in the notification body (read it in the portal). A reusable secure message email HTML builder (no PHI in the body) lives under frontend/emails/templates for future mail integration.

Improvement

Client portal: link to the full member site from header and overview

Signed-in clients see Full [app name] in the portal header (opens your main site URL in a new tab). The booking-scoped portal overview also includes a short card pointing to goals, journal, Bible study, and other tools on the primary app host.

New

Client portal: billing hub, documents, light/dark theme, and visit details

The client portal header includes a Light / Dark toggle that follows your practice site template colors (same idea as public /p/… pages).

/portal/billing brings together invoices (pay and PDF), a read-only insurance claims list, and encrypted insurance card photo uploads (front and back).

/portal/documents lists provider-assigned HTML documents; clients can type their name to signwhen required. Providers create assignments from Practice Management using the client's portal documents API.

Each upcoming visit links to its own visit details page for date, status, video join when available, and any provider-written visit summary set on the linked encounter (separate from the clinical note).

Improvement

Client portal: session check at the edge and clearer login on large screens

Visiting /portal/… without an active portal session now sends you to /portal/login with a sanitized return path (magic links with token or reminder_token still load first). The edge proxy shares one rule set with unit tests so behavior stays consistent. The login screen uses a two-column layout on desktop: themed introduction on the left and instructions on the right; small screens stay a single column.

Improvement

Public practice site: hero trust cues and online scheduling badge

The public /p/… hero shows short trust labels (secure portal, HIPAA-aligned workflows). When online scheduling is published and portal booking is not turned off, a subtle pulse badge notes that online scheduling is available. Reduced motion preferences disable the animation.

Improvement

My practice site: AI site setup from Visual style

Under Visual style, AI site setup opens a dialog that runs the same wizard AI as quick setup: it saves your title, contact email, and assistant name, then fills tagline, theme, About, Services, and assistant label into the form for you to review and save. A booking slug on Provider profile is required.

Improvement

Admin User Manager: change subscription plan for any user

In Admin → User Manager, the user table shows each account's plan, and Edit user includes a subscription plan control with every tier (Starter through Coach / Practice). Applying a plan updates feature access in the app; it does not change Stripe billing—use billing tools or support processes when payment must match.

Improvement

Public practice site help: intake preview hints for visitors

The floating care guide on /p/… now reflects when your site lists public intake previews: scripted answers for Patient portal and Intake forms, and the short capabilities line, mention read-only overviews and where to find them. When live AI is on, the same detail is included in the assistant context.

Improvement

My practice site: public intake preview links in Page content

When at least one intake template has Public preview turned on, My practice sitePage content lists those preview URLs (copy and open) next to your connected intake forms, with reminders if portal intake or a public slug is still needed.

New

Intake forms: public preview URLs and links on the public practice site

On My practice → Intake forms, each form can opt in to Public preview. When enabled, visitors can open /p/…/intake/… (path shown next to the toggle) to see the template overview; submission still happens in the patient portal after your workflow assigns the form. Preview stays off by default so form slugs are not discoverable unless you enable them.

On the public /p/… page, Care tools for patients lists those previews under Intake & forms when portal intake is on, and the top nav adds Form previews to jump there.

Improvement

Practice site editor AI: intake-driven services and wizard-style pass

In My practice site About/Services AI assist, Services adds Draft from intake notes (primary source) (uses optional notes as the main input; avoids inventing offerings when notes are empty). Quick edits adds Wizard-style full pass (this section) for About or Services to match setup wizard tone and guardrails. Same rate limit (practice_site_editor_ai).

Improvement

Practice clients: copy patient portal invite link after sending

On a client's page, Send portal invite still emails the magic link; after it succeeds, use Copy invite link to paste the same URL for secure handoff. The link expires in the same window as before and is single-use to sign in.

Improvement

Public practice site: template-aware dark mode and system appearance

On /p/… pages, choosing Dark now applies a full dark palette for each visual template (CSS variables and ps-* utilities), not only Tailwind dark accents. With no saved choice, the site follows prefers-color-scheme; picking Light or Dark still saves per practice slug in the browser.

Fix

Portal magic links and optional /portal/accept-invite path

Invite and reminder links that include ?token= or ?reminder_token= on /portal routes are no longer blocked by the portal session check before the app can exchange them. Optional /portal/accept-invite?token=… redirects to the standard portal entry with the same token (for docs or templates that use that URL shape).

New

Patient portal: session gate, in-portal booking wizard, and mobile quick nav

Unauthenticated visitors to most /portal/… routes are redirected to /portal/login with a safe next= return path; signing in still uses the secure link from your provider (with an optional Public scheduling page link). A Book flow at /portal/book walks through reason, intake reminder, open times, and confirmation using the same public booking API as /book/…. Practice site hero Book can send patients through portal login first. Stub pages cover register / password questions, and shortcuts like /portal/appointments land on the right dashboard tab. Mobile gets a bottom quick nav; the API still enforces portal tokens.

Improvement

Client portal sign-in: /portal/login?practice= and practice-site form polish

Public practice pages link to /portal/login?practice=… (your booking slug) for patient sign-in when that slug exists, with practice logo and theme when the site loads. After sign-in, patients return to their usual portal home for that practice. The dashboard My practice site editor combines page layout with About and Services in one section, raises the sticky bar above overlapping UI, and keeps only Discard changes at the bottom (save stays in the top bar).

New

Practice setup wizard: AI starter pack for your public site

In Practice setup step 3 (practice site), you can add optional notes, pick a visual template, then run Generate starter content with AI to draft a tagline, About copy with a Frequently asked questions block, Services HTML, a suggested help assistant first name, and a short template rationale. Review and edit the fields, then Save & continue. Rate limits apply (practice_site_wizard_ai).

Improvement

Practice site: vanity subdomain routing, dashboard layout, portal card, and theme-first chrome

Practice → My practice site is grouped into clear sections (identity, logo, look with a compact live preview strip, layout, content, contact, web address, SEO) with a sticky bar for published status, preview, and save. You can set an optional subdomain on the platform host (shown next to your apex domain); when NEXT_PUBLIC_PRACTICE_PORTAL_PARENT_DOMAIN is unset, that host serves your /p/… page. When it is set, the booking subdomain still owns / for the patient portal; other paths can map under /p/label/….

Public /p/… pages inject critical theme CSS earlier to reduce flash, add a Patient portal highlight card (feature pills and sign-in), use theme-colored header, footer, and layout (plus a 988 crisis line), and style /p/…/login with the same template tokens. Theme thumbnails use a responsive grid (2 / 3 / 5 columns).

Improvement

Practice patient emails and portal sign-in page

Emails for appointments, reminders, intake, portal invites, and related practice flows now use a teal and slate layout that matches your public /p/… practice site. Subjects include the practice name, with links to the practice website and patient portal in the footer. The public site also has a dedicated /p/…/login page that explains magic-link sign-in and links to the portal; header Portal and patient CTAs go there first.

Improvement

Public practice site: larger help assistant panel

The floating help assistant on /p/… practice pages uses a taller, wider chat panel on phones and desktops, a slightly larger launch button, bigger topic chips, and a three-line message box so visitors can read and type more comfortably.

Improvement

Public practice site: Light and Dark appearance buttons

On your public /p/… practice site and blog, the header now includes Light and Dark buttons so visitors can switch appearance. The choice is remembered for that site in the browser.

Improvement

Patient portal in practice site template (nav, hero, booking header, previews)

The client portal is now built into every public template: the /p/… header includes a Portal link to your real portal URL (path or subdomain), the hero promotes Patient portal as a full button next to Book and Contact, the /book/… page header adds Patient portal, and each Public site look theme thumbnail shows Book, More, and Portal chips so the picker matches the full experience.

Improvement

Practice site themes: visual samples on each style card

On Practice → My practice site, under Public site look, each theme (Clinical Indigo, Calm Sage, and the rest) now includes a mini preview—header bar, hero area, and sample buttons—using the same styles as your live public page and booking flow, so choices match what visitors see.

Improvement

Public practice site: help assistant typing, clearer contrast

On /p/… template sites, the floating care guide now includes a Your message field: pick a topic, type a follow-up, and tap Send (or press Enter). You can also send a short question on its own (uses the Contact topic). Text is passed to the AI layer when available, with stronger text and chip contrast for readability.

Improvement

Practice setup wizard: public site created when you save your booking link

The first time you save your public booking slug in the setup wizard (or provider profile), the portal now creates your practice site and fills site title (from your name or slug) and contact email (from your account). Step 3 is for review and edits; you can still customize everything under My practice site.

Fix

Practice site editor: Show preview works (same-origin iframe)

On Practice → My practice site, Show preview loads your public page at /p/your-slug in the frame so it matches the dashboard origin. If you use a custom domain, the public link still opens that hostname in a new tab; the frame cannot show it cross-origin because of standard browser framing rules. A note appears when a custom domain is set, and a timeout clears a stuck loading overlay if the frame never finishes loading.

Improvement

Public practice site: contact form opens on demand

On /p/… practice sites, when both address or phone and the contact form are shown, visitors first see location details, then tap Send a message to open the secure form. The header Contact link scrolls to the form area and opens it. #contact and #contact-form in the URL do the same.

New

Practice blog on your public site (/p/…/blog)

Under Practice → Practice blog, create posts with title, URL slug, optional excerpt, and a mini HTML editor for the body. Check Published when a post should appear on your public site at /p/your-site-slug/blog and on each post page. The main practice header shows a Blog link when at least one post is published. List and post views are logged in the practice audit log. Run the create_practice_site_blog_posts_table migration on existing databases.

New

Practice site editor: many AI drafting options for About & Services

On Practice → My practice site, the About and Services mini editors include an AI action menu with many drafting and rewrite choices (first drafts, bullets, plain language, tone, length, soft calls-to-action, and more). Generated HTML is inserted as a draft you must review before saving. Requires OPENAI_API_KEY; model defaults to gpt-4o-mini (override with PRACTICE_SITE_EDITOR_MODEL). Requests are rate-limited per provider and logged as practice_site_editor_ai.

Improvement

Practice site: name your public help assistant (default Alex)

In Practice → Setup wizard (practice site step) and My practice site, you can set a short help assistant first name for the floating help bubble on your public page. Leave it blank to use the simple default Alex. The live AI reply uses the same name in its instructions.

Improvement

Practice public site: floating help assistant uses live AI

The floating help widget on public /p/…practice sites calls the backend with the visitor's topic choice. When OPENAI_API_KEY is set, answers are generated with gpt-4o-mini (override with PRACTICE_PUBLIC_HELP_MODEL) using only public page metadata—no patient records. Requests are rate-limited and logged in the practice audit log as public_practice_help_assistant. If AI is unavailable, the same topics still show scripted tips. The assistant's display name is configurable (default Alex).

Improvement

Patient portal: slug path or slug subdomain (your-booking-slug.toxicpartner.com)

When a practice has an online booking slug, portal links from invites, reminders, telehealth join links, Stripe return URLs, and in-app notifications prefer that slug. With PRACTICE_PORTAL_SUBDOMAIN_PARENT_DOMAIN and NEXT_PUBLIC_PRACTICE_PORTAL_PARENT_DOMAIN set to your apex domain (and DNS + wildcard TLS for *.yourdomain), links use https://your-slug.yourdomain. Otherwise they use /portal/your-slug on the main site. See configs/nginx/portal-subdomain-wildcard.example.conf for an nginx sketch. /portal still works; subpages like /portal/messages work on both apex and slug hosts.

Improvement

Practice public site: HIPAA audit log + HIPAA-aligned footer

Each load of the public practice site JSON (/api/practice/site/public/… and public-by-domain) is recorded in the practice HIPAA audit log as public_practice_site_view (provider id, site id, IP, user agent, access path). Public contact form submissions were already logged as public_contact_form. The /p/… footer and booking footer now state that the experience is HIPAA-aligned, with encryption and audit logging, and link to the platform privacy policy—without claiming your practice is automatically compliant.

Improvement

Practice public site & booking: patient-focused wording

Public /p/… sites and the booking page footer now use patient / patient portallanguage (therapy and clinical care) instead of "clients" in headings, nav, hero CTA, Marlowe help topics, and autofill services. In-page anchor for the care section is #patients (update any old #clients links).

Fix

Practice area: faster recovery when account or practice APIs are slow

Loading the Practice section (including My practice site) no longer waits as long when /api/me, subscription, or intake-forms calls stall: stricter timeouts and clearer subscription loading avoid an endless spinner in common slow-network cases.

Improvement

Provider client portal: clearer purpose and paths to the full app

/portal is labeled explicitly as the provider client portal (appointments, telehealth, messages, intake, invoices from your therapist or coach). The page title and description no longer mirror the generic site tagline. If you landed here without a provider link, you will see short copy plus Sign in, Create account, and See all features so you can reach the full member experience. The portal header adds quick links to the main app when you are not signed in with a portal token.

Improvement

Practice configuration: automatic intake and booking email payment note

On Practice → Configuration, set a default intake form for new clients who book through your public link (requires portal intake). Optionally turn on Booking email: portal payment notice so confirmation emails mention the client portal for invoices and online pay when practice invoice Pay (Stripe) is enabled. Run the provider profile migration if those columns are not on your database yet.

Improvement

Practice public help: Marlowe with typing and fuller site context

The floating help on /p/… introduces Marlowe, a care guide that shows a short typing state, then streams plain-text answers before revealing the full formatted reply. Topics use your saved tagline, about, services, booking link, and portal flags when explaining what visitors can do. The public site and booking info APIs now include contact email when set on the practice site (for display alongside other contact options).

Fix

Practice and booking pages: no main site footer

Public provider pages at /p/… and the public booking experience at /book/…no longer show the platform marketing footer, so visitors only see the practice's own layout and footer where applicable.

New

Practice site builder: drag-and-drop layout and mini WYSIWYG

On Practice → My practice site, reorder main public sections (hero, client tools, about, services, contact) with drag and drop; add optional sections back with one click. About and Services use a simple in-page editor (bold, italic, lists, links). Contact can include phone and a multi-line address shown on /p/…. Run the new database migration so practice_sites has page_layout_json, contact_phone, and contact_address_text.

Improvement

Practice public site: client features, design, and guided help

The public microsite at /p/… now has a full hero, navigation, and a Care tools for clients section that explains the client portal (appointments, telehealth, invoices, Pay, onboarding), and highlights secure messaging and intake when those features are enabled for the practice. The public site API returns those feature flags. A floating Help button opens quick, fixed answers about booking, the portal, billing, and privacy—clearly labeled as guidance (not medical advice and not a live AI on your health data). Booking, email, and portal entry points stay one tap away.

Improvement

Public booking page: landing layout and practice site content

The /book/… scheduling link now uses a fuller landing layout (hero, trust, FAQ, contact) and pulls optional title, tagline, logo, about, services, and contact email from your saved practice site when present. Booking info includes a site template id (stored on the practice site; run the new migration on Postgres). Ten preset themes are defined in code for future themed landings. Success and error states match the new chrome. Public routes /book, /p/…, and root static files (service worker, manifest, robots, sitemap) stay reachable without a login redirect. The HIPAA BAA page uses server metadata and a client document view to avoid build-time errors on that route.

Improvement

Practice invoice Pay: provider vs operator help

Practice → Configuration, Billing, and the setup wizard show a short message for clinicians: Pay waits on server-side Stripe setup; you can still manage invoices; use Admin → Stripe setup if you are an administrator, or ask whoever hosts the portal. Env vars, verify_practice_stripe_env.sh, and the deployment runbook are listed on Admin → Stripe setup for operators. Billing error toasts and API responses still describe the technical requirements when Pay is unavailable.

Improvement

Practice setup wizard: quick inline steps

On Practice → Setup wizard, identity, booking slug, practice site basics, client portal booking, Stedi, and Google Calendar can be completed in-page with Save & continue and smart suggestions. Full profile and configuration pages stay available when you need every option. Step 3 shows an example site title derived from your account name or booking slug.

Improvement

My practice site: form prefills from profile and account

On Practice → My practice site, empty fields are filled once from your provider profile (credentials, billing city/state, portal options) and your account (name, email). The platform logo URL is suggested only when you do not have a saved site yet.

Fix

Practice setup wizard: links and buttons respond again

A progress effect was re-running continuously and locking up the page. Practice → Setup wizard now uses stable completion tracking so you can open steps, use Go to setup, and navigate like normal.

Improvement

Dashboard help opens faster with built-in topics

Help for the main Dashboard uses static guidance instead of routing through generic help that triggered a slow per-request enhancement. Audit-related logs also store client IPs in a consistent dotted-IPv4 form where possible.

Improvement

Shared memories: several photos per memory

On Couples → Shared memories, you can attach up to 20 images when creating a memory or add more when editing. Remove individual pictures before saving, or clear a legacy single photo with the existing checkbox. Deploy the new shared_memory_photos migration on Postgres so existing single-photo memories stay linked.

Fix

Messages and Devotion Connect: cleaner top navigation

On Messages and Devotion Connect, the extra breadcrumb line under the dashboard bar is removed. Use the bar's Homelink for dashboard home; the page title stays in the screen's own header so labels are not repeated.

Improvement

Couples shared calendar: add events from a date with repeat options

On Couples → Shared Calendar, tap a day number in month view to open the add-event form with the same repeat choices as date night scheduling (every week, every other week, monthly spacing, or every N weeks). Use View on a cell to jump to that day; week and day views include Add event as well. Recurring saves now send interval data consistently for the server.

Improvement

Practice setup wizard: seven steps aligned with hub, calendar, and claims checks

The Practice setup wizard now follows the same checklist as the Practice hub and Calendar: provider identity (full US address and credentials), public booking slug, practice site title and contact email, client portal online booking, Stedi, invoice payments when your server enables them, and Google Calendar sync. Saved step index migrates from the older four-step wizard; completion is step 8. Practice → Configuration uses the same seven gates in its readiness grid (with the compact setup banner when anything is still incomplete).

Improvement

Daily Prayer & Bible Study: listen to today’s AI-tailored focus

On Couples → Daily Prayer & Bible Study, an AI reading block lets you choose a voice and listen to today's focus (passage plus the tailored explanation) using the same browser read-aloud as Bible Study. Read here still opens the full chapter with verse listening.

Fix

Read-aloud (Devotion Connect, Bible devotional, mail): reliable voices and no surprise cutoffs

Pages that use your browser's speech synthesisfor read-aloud now share one voice list update channel, so voices load correctly when many controls are on screen. Unmounting a small read button no longer cancels speech for the whole page. Leaving Devotion Connect, the couples devotional, or Michael & Emily mail stops playback. If your browser cannot speak, you'll see a short note instead of a missing button.

Improvement

In-context Help: clearer layout, smarter page detection, and Practice / Kids Connect topics

The Help panel (header and pages) now shows a two-column layout on large screens: overview and FAQs from the server, optional feature screenshot, quick tip, and guide links. Suggested questions are always visible as chips. Routes like Communications Wizard, AI Chat sessions, Practice, and Find your tool pick the right topic automatically. The Help Center anchors Communications Wizard for deep links. Backend help resolution normalizes hyphens, prefers longer topic keys, and avoids treating AI Chat as reflection Chat.

Improvement

Practice setup banner: same completion rules as claims and the public site

On Practice hub and Calendar, the setup reminder now checks the full gate used elsewhere: provider identity (including 10-digit NPI and billing address format), booking slug, practice site title and contact email, client portal online booking, Stedi, invoice payments when enabled on the server, and Google Calendar OAuth. Practice site branding has a stable anchor for deep links, and Configuration scrolls to the client portal section when the URL hash is #practice-config-client-portal.

Improvement

Practice invoice payments: clearer Stripe setup hints

Where invoice Pay is explained — Practice → Configuration, Billing, and the setup wizard — the copy now points to Admin → Stripe setup for key entry, the server script verify_practice_stripe_env.sh, and the deployment doc path docs/deployment/PRACTICE_STRIPE_PAYMENTS.md for operators.

Improvement

Practice reports: more metrics, A/R aging from the API, and related dashboards

Under Practice → Reports, the summary now includes encounter volume, billed and telehealth encounter counts, paid and denied claim counts, and A/R aging buckets for open pipeline claims (submitted or ack received) by service-date age. CSV export includes the same fields, and a Related dashboards section links to calendar, billing, prior auths, waitlist, compliance audit logs, and tasks.

Fix

Couples dashboard: recover when a JS chunk fails after deploy

After a release, browsers sometimes request an old split chunk that no longer exists, which showed as Loading chunk … failed on Couples. Lazy-loaded widgets now trigger a cache-busting reload when that happens (before the error screen), chunk detection includes the Next.js error prefix, reload limits are slightly more forgiving, and static asset Cache-Control headers apply in the intended order for /_next/static.

Improvement

Communications Wizard: clearer header, privacy callout, and mobile flow

The Communications Wizard dashboard uses an updated header (quick Help link, partner chip, short description), a visible private thread notice with lock icon, and a two-step progress row where Compose returns to editing when you are on preview. On phones, compose appears above the inbox so writing is not buried below the message list.

Improvement

Couples shared calendar: general weekly schedule and schedule-blocks API

On Couples → Connection, the shared calendar uses month, week, and day views with navigation, plus a panel for each partner to set recurring weekly blocks next to date nights and other events.

Recurring blocks are framed as a general weekly schedule (work, childcare, focus time, sleep, and more), not work-only. The API adds GET/PUT /api/couples/schedule-blocks as an alias of /api/couples/work-schedules; when a block is saved without a label, it defaults to "Schedule".

Improvement

Couples shared calendar: edit events

On Couples, each upcoming or past shared calendar row has an Edit action that opens the date-night form with existing details; saving updates the event for both partners. The API supports PATCH /api/couples/events/{id} for partial updates.

Improvement

Shared memories: memory date and saved time

Each memory now shows a labeled Memory line (when the moment happened—date, or date and time if the API stores a full timestamp) and a Saved line with the exact local date and time the entry was created.

Improvement

Partner activity: fresher data, links, and help

The Partner activity card refreshes when you come back to the tab or reconnect, and the API avoids stale caching. Each listed tool is a link to that area of the app; More detail (exact times) shows local timestamps. What this shows opens Help with a full explanation of partner visibility and the 30-day window.

Improvement

Daily reminders to sign your relationship agreement

If you have an active relationship agreement that is not fully signed, a daily reminder can notify the partner(s) who still need to sign (in-app notification and email according to your reminder preferences). Notification links open Couples → Tools and scroll to the agreement. Server operators can schedule scripts/run_contract_sign_reminder_notifications.py once per day (see install_contract_sign_reminder_cron.sh).

Fix

Couples dashboard API: partner mood no longer breaks cached responses

GET /api/couples/dashboard could return 500 on a second requestwhen the in-memory dashboard cache held a database object for the partner's last mood check-in. After the request ended, that object was no longer valid for serialization. The API now stores a normal response shape for partner mood before caching, so repeat loads and the couples dashboard stay reliable.

Improvement

After deploy: detect failed Next.js chunk scripts by URL and reload sooner

When a browser still has old HTML but new JavaScript build output, a script under /_next/static/chunks/ can fail to load with little or no error text. The early layout script and ChunkErrorHandler now treat those script URLs as chunk failures and run the same cache-busting reload path, which reduces broken login and other routes right after releases.

Improvement

Calendar sync OAuth: reach setup from Practice → Configuration only

The duplicate Admin → Calendar Sync Setup card was removed from the main Practice overview. The Admin hub and admin side nav no longer list Calendar sync as a shortcut. Google Calendar OAuth and two-way sync are configured from Practice → Configuration (Two-way calendar sync), which links to the same setup wizard when an admin needs it. The wizard URL is unchanged for bookmarks and support.

Improvement

SEO and social previews: structured data in HTML, sitemap, and Open Graph defaults

Public pages now ship server-rendered JSON-LD for Organization, WebSite, and (on /marketing) FAQ and SoftwareApplication, so crawlers see markup in the first response. Root metadata includes default Open Graph / Twitter images, expanded keywords, and shared descriptions via lib/seo/siteDefaults. The sitemap lists additional important URLs (privacy, terms, cookies, NPD Watch); robots.txt explicitly allows key paths. Help, features, about, pricing, compliance, changelog, and marketing segment layouts use consistent getAppName() titles and preview images. Invalid SearchAction markup was removed where there is no public search page.

Improvement

Admin: operations hub, grouped dashboard, and platform status before risky work

Admin → Operations and backups centralizes PostgreSQL backup (with a post-backup acknowledgment checkbox), read-only platform status (database type, whether an encryption master key is configured, MFA TOTP env), and short runbook reminders for migrations and Phase 2 encryption. The main Admin page now groups every admin tool (settings, Stripe, calendar setup, token limits, analytics hub, and more) into clear sections, with links to Operations from service controls. The admin side nav also includes a direct Operations link.

Improvement

Google Calendar two-way sync: admin wizard, OAuth consent guidance, and provider help for access errors

Admin → Calendar Sync Setup now shows the site base URL from server config, the exact Calendar API scopes providers approve, step-by-step OAuth consent screeninstructions (test users, External vs Internal, verification), a troubleshooting checklist, and a quick link to Google's consent console. The authorize URL uses proper query encoding. Practice → Configuration → Two-way calendar sync explains what to do if Google shows Access blocked and points admins to the same setup page.

Improvement

Practice Clients: compact intake column with status modal, view answers, and PDF download

The Clients table Intake column now shows a short status (for example all complete or how many are pending). Click it to open assignments: View shows submission JSON and the form template; PDF downloads a printable summary (requires WeasyPrint on the server). Edit client shows the same summary with links to manage intake.

Improvement

Dashboard and Practice: richer tooltips on nav, search, and hub

Hover (or focus) hints are expanded across the app where they help most: Practice hub tiles use the shared tooltip component; the practice sidebar and command-palette page list use native titles with the same copy from one data source. Dashboard home link, bottom nav, and the header search field include clearer descriptions. The shared Tooltip supports wrapped text and sits above the top bar so it is not clipped.

Improvement

Practice treatment plan draft: safer editing (no accidental close or tab switch)

While the Treatment plan draft modal is open, the form stays on screen during generation (inputs disable instead of disappearing). The dialog only closes via Close or X—not backdrop click or Escape. Section tabs show a reminder if you try to leave before closing the editor.

Improvement

Practice treatment plan: auto ICD-10-CM suggestions and structured draft outline

On Practice → Clients → Treatment plan, generating a draft now also runs AI-assisted ICD-10-CM and DSM-5-TR suggestions so the comma-separated code field and documentation block fill in automatically (everything stays editable). The draft model uses a consistent outline: Draft Treatment Plan, Goals, Interventions, and Plan Summary. Suggestions are aids only—verify ICD-10-CM and DSM-5-TR before billing.

Improvement

Practice Clients: compact rows, self-pay billing columns, intake in Edit client

The Practice → Clients table is a single compact row per client. New columns (wide screens) show self-pay totals from the ledger—billed, paid, and balance—excluding insurance ERA lines. Edit client now includes intake forms: open a form or edit due dates without leaving the dialog.

Improvement

Practice Calendar: click a day to add an appointment (week / month / day)

In week view, click anywhere in a day column (including empty cells) to open Add appointment with that day prefilled (default 9:00–10:00 local). In month view, use + Add on each date. In day view, use Add appointment this day for the date you are viewing.

Improvement

Practice telehealth recording library: delete and schedule auto-delete

On Practice → Telehealth → Recording library, you can Delete a cloud recording immediately (Daily API) or Schedule delete to remove it automatically after a date and time you choose. Scheduled removals run when the library loads (e.g. refresh). Run the create_practice_telehealth_recording_retentionmigration on Postgres so scheduling persists. Custom S3 buckets may still need manual object cleanup per Daily's documentation.

Fix

Practice search shortcut label readable on all platforms

The Practice sidebar Search hint no longer uses the Unicode Command symbol (⌘), which often showed as a missing-character box on Windows and Linux. It now shows Ctrl+K or Cmd+K (after load) depending on your system. Keyboard shortcuts help uses the same plain-text style.

Improvement

Practice My practice site: default logo URL uses your Toxic Partner host

On Practice → My practice site, the logo field placeholder and Use platform logo URL use your deployment's canonical HTTPS site (from NEXT_PUBLIC_SITE_URL, defaulting to https://toxicpartner.com/logo-icon.svg) so it matches the live domain instead of a generic example link.

Improvement

Practice intake: edit due date on assignments (clients list and client chart)

Assigned intake forms now have Edit due date on Practice → Clients (per assignment) and on the client Intake tab. Use PATCH /api/practice/intake-assignments/{id} with due_date (or null to clear).

Improvement

Practice Claims: click a claim to edit notes and deep-link from the hub

On Practice → Claims, click the claim summary (Claim #…, encounter, plan, dates) or Edit to open an editor: update denial reason / office notes, save, or run Check status, Suggest appeal, and Resubmit from the same dialog. The URL can include claim_id=… (used by denied-claim links on the practice hub).

Improvement

Practice clients list: portal, last visit, next appointment, unsigned plans, location

Practice → Clients now shows gender and city/state (on wide screens), whether the client portal is linked, the latest encounter service date (link to Encounters), the next scheduled appointment (link to the client chart), and a count of unsigned treatment plans (link to the Treatment plan tab). The list API supports include_clinical_summary=true for those clinical columns.

Improvement

Practice treatment plan draft: edit, save, ICD-10 and DSM-5-TR suggestions

On a client's Treatment plan tab, the generated draft opens in a modal you can edit. Use Suggest ICD-10 & DSM-5-TR to add AI-assisted billing documentation from the plan text (review before claims), edit comma-separated ICD-10-CM codes, and Save draft to store the plan on the chart. Copy to clipboard includes the plan and any codes you entered. Run migration add_practice_treatment_plan_billing_codes.py on existing databases.

Fix

Practice My practice site: missing logo_url column on database

Practice → My practice sitecould stay on "Loading…" or show a generic service-unavailable message when the database was missing the logo_url column on practice_sites. Deploy migrations now add it automatically, and the API repairs the column when needed.

Fix

Practice Provider profile: database column for calendar default view

Some environments were missing the calendar_default_view column on provider_profiles, which caused Practice → Provider profile to show a migration error. Deploy now runs the matching migration automatically, and the API can add the column safely when it was omitted from an older migrate pass.

Improvement

Practice Reports: click-through from summary and payer breakdown

On Practice → Reports, summary tiles (billed, paid, pending, denied, rates, unbilled count, claims pending) and the Breakdown by payer table cells link to Encounters, Claims (with status or payer filter where applicable), or Billing. Encounters supports ?unbilled=1 to show draft and ready-to-bill rows. Claims supports ?payer_name=… (exact payer name, case-insensitive) with a clear banner on the page.

Improvement

Practice client waitlist: Edit entry (notes, status, offered appointment)

On Practice → Client waitlist, each row has an Edit action that opens a dialog to update notes, workflow status (waiting through removed), and an optional link to the appointment you offered from the calendar. Clearing the offered appointment removes the link. Status is shown read-only in the table; use Edit to change it.

Fix

Practice Configuration: no longer stuck loading when calendar or payments API is slow

Practice → Configurationnow loads your feature toggles as soon as your provider profile is ready. Calendar sync and invoice payment status still appear in the readiness sections when those checks finish, so a slow or stuck secondary request does not block the whole page on "Loading configuration…".

Improvement

Messages: Clients tab for practice providers

On Dashboard → Messages, if you use Practice Management as a provider, Clients is now its own tab beside Friends and Conversations, so the list is easier to scan. Linked clients open a DM; others show how to open their chart in Practice. Your therapists for patients stays in the compact strip above the tabs.

Improvement

Communications Wizard: message details, extend access, full open audit

Tapping a row in Inbox / Sent / All still selects the message and now scrolls the reading pane into view on small screens. For messages you sent, a Partner access & audit panel lets you add time (+24h / +7 days), set a new expiry, remove expiry, raise or remove the max open count, and see every open with timestamps.

Improvement

Practice Calendar: full appointment card opens edit (List, Day, Week)

On Practice → Calendar, the whole appointment row or week cell card is clickable to edit time and type—not only the text block. The Video link still opens telehealth on its own without opening the editor.

Improvement

Messages: Your therapists (practice patients)

On Dashboard → Messages, if you are a patient with a linked portal account, Your therapists appears in a compact strip above the tabs so you can open a direct message with your provider quickly.

Improvement

Practice Activity checklist: one row per item (task + actions)

On Practice Management → Activity, each Your checklist row is a single line: the task link and date sit beside the actions. On narrow screens buttons show Dismiss and 24h (full wording in screen reader labels); from sm up they read Dismiss for now and Snooze 24h. Long titles truncate instead of wrapping to a second row.

Fix

Dashboard Messages: page loads reliably (search params + Suspense)

The Messages screen uses the URL for optional message prefill. That path is now wrapped in a Suspense boundary, matching other dashboard pages, so Next.js can render the route without an internal server error during prerender or navigation.

Improvement

Site footer: aligned column headers and legal row on large screens

Footer Legal, Explore, Learn, and related columns use a shared header height so section titles and underline rules line up; the brand block top band matches that row on desktop. The copyright / company line uses clearer left–right alignment above the fold width.

Improvement

Practice hub: more AI assist shortcuts (notes, codes, appeals, telehealth, config)

On Practice Management, the AI assist section lists more one-tap links to real workflows: ICD-10 suggestions, bulk note generation, billing CPT from duration, claims and appeals, intake assignments, telehealth transcription and recordings, and AI feature toggles in practice config.

Fix

Practice setup banner: "Maybe later" menu shows all snooze and dismiss options

The welcome banner's Maybe latermenu was clipped so only the "Snooze or dismiss" label appeared. The full list (remind tomorrow, 3 days, 7 days, hide until next visit, don't show again) is visible again.

Improvement

Communications Wizard: open counts on sent messages; clearer mobile bottom nav

In Couples → Communications Wizard, messages you sent now show how many times your partner opened them (e.g. Opened once, Opened 3 times, or 2/5 opens when a max-open limit is set). The reading pane summarizes first and last open instead of a long list of times.

On mobile, the dashboard bottom bar uses consistent icons, a short label for Everyday AI Assistant ("Emily"), horizontal scroll when needed, and slightly larger touch targets.

Improvement

Site footer: clearer columns and layout on wide screens

The public site footer uses the full content width more evenly: brand and intro on the left, five balanced link columns (Legal, Explore, Learn, Support & safety, Feedback), clearer section headings, and a cleaner copyright row on large screens.

Improvement

Practice hub Activity: dismiss for now, snooze 24h, and Undo

On Practice Management, each Activity checklist row has Dismiss for now (hidden until you close the browser tab) and Snooze 24h. A toast offers Undo. If everything is hidden, use Show all again. Preferences are stored on this device only; links still open the real work (encounters, clients, claims, waitlist).

Improvement

Practice Billing: edit invoices, PDF with logo, unpaid total vs ledger

Practice → Billing: Edit status, due date, total, and copay; PDF download; Delete for non-paid invoices. The top card shows unpaid invoice total and separately the ledger balance (charges minus payments).

Invoice PDFs and the public site can show your logo: set an https image URL under Practice → My practice site. Run the add_practice_sites_logo_url migration if needed.

Improvement

Practice setup welcome: Start wizard + Maybe later (snooze menu)

The hub and calendar setup callout uses Welcome! Let's get your practice set up copy with Start setup wizard as the main action. Maybe later opens a menu: Remind me tomorrow, in 3 days, in 7 days, hide until next visit, or don't show again (reopen from Configuration anytime).

Improvement

Practice Calendar: click an appointment to edit (all views)

In Practice → Calendar, list, day, week grid, and month views now open the Edit appointment dialog when you click the appointment row or card (time, type, and duration). The Video link still goes to telehealth without opening edit. Month view: tap the day number for day view, or tap an appointment line to edit.

Improvement

Practice invoice payments: requirements in Configuration and setup wizard (not Admin)

Practice → Billing no longer points to site Admin for Stripe setup. The amber banner links to Practice → Configuration → Invoice payments (Stripe) and the setup wizard, which now includes an invoice-payments step. Readiness on Configuration includes whether Pay is available. The Admin Stripe wizard remains for operators who set server keys; step 1 notes where providers see the checklist.

Improvement

Practice Calendar: default view in Configuration; setup prompts you can dismiss gently

Under Practice → Configuration, Calendar default view sets whether Practice → Calendar opens in list, week grid, day, or month. The choice is saved with your provider profile.

The practice setup callout on the Practice hub and Calendar uses Maybe later for snooze and dismiss options (see the latest changelog entry for the full menu). The setup wizard uses the same pattern instead of a single permanent skip.

Improvement

Practice Clients: see assigned intake forms in the list

The Practice → Clients table now includes an Intake forms column: each assigned form is listed with status, and the name links to Practice → Intake for that assignment. Clients with no assignments show None assigned. After bulk assign, the list refreshes so new assignments appear without a manual reload.

Fix

Practice public site: correct browser tab and SEO metadata

Public practice pages at /p/your-slugno longer inherit the main app's marketing title and description. The tab title and meta tags now use your Meta title / Meta description when set, otherwise Site title and Tagline. The practice site editor explains those fallbacks under the SEO fields.

Improvement

Default URL slugs with Advanced override (profile, intake, journal)

Slug fields now follow the same pattern: a suggested default (from context) stays visible up front; expand Advanced to edit the slug and use Reset to suggested slug when needed. Applies to Practice → Provider profile (booking link), Practice → Intake (new form wizard), and Journal → Manage journals (new custom templates). Shared helpers live in lib/urlSlug.ts.

Fix

Practice clients: date of birth shows the correct calendar day

On Practice → Clients and the client profile, DOB from the API (YYYY-MM-DD) now displays as that same calendar day in your timezone. Previously, parsing treated the value like UTC midnight, which could show the previous day in the Americas.

Improvement

Practice: Google Calendar connect and sync moved to Configuration

Connect Google Calendar and Sync now for two-way calendar sync now live under Dashboard → Practice → Configuration (section: Two-way calendar sync). The Calendar page links there; after Google OAuth, you are returned to Configuration. Authorized redirect URIs in Google Cloud are unchanged (/dashboard/practice/calendar).

Fix

Journal: readable “Guided reflection” and other dark-mode filled buttons

On Journal in dark mode, primary actions that use a light fill (e.g. Guided reflection, Start free write, Finish entry) no longer show white-on-white text. They use the same contrast approach as the rest of the page.

Fix

Practice Encounters: actions menu no longer clipped by the table

The menu on Practice → Encounters (edit note, generate note, suggest codes, delete, etc.) now opens in a fixed overlay so it is not cut off by the wide table scroll area or hidden under the bulk-selection bar. The menu closes on scroll, resize, Escape, or click outside.

Fix

Practice “My practice site” editor: reliable load and timeouts

The My practice site settings page (Practice → My practice site) uses the same sync pattern as other practice APIs so GET /practice/site does not block the server event loop. The client applies a 30s request timeout and clears a stuck Loading… state after a short failsafe with a clear retry message.

Improvement

Practice Encounters: clearer errors when encounters vs clients list fails

The Encounters page loads the encounter list and the client list together. If one call fails (timeout, gateway HTML page, or API error), the message now starts with Encounters: or Clients: so you can match it to the right request in the browser Network tab. When one side succeeds, that data still loads.

Fix

Practice hub Activity: faster tasks API and no endless loading spinner

The Practice Management hub no longer retries the same slow tasks request multiple times on client timeout, and it clears Loading activity… with guidance if the call still does not finish. The GET /practice/tasks endpoint skips expensive full-table counts when your overdue notes, unsigned plans, and denied claims lists are below the page limit, which speeds up large databases.

Fix

Practice clients list and admin bug verify: SSN accessor and closed-after-verify

Practice clients now expose SSN through a normal Python property (backed by encrypted storage), which removes server errors that auto-logged as PracticeClient has no attribute ssn when listing clients. On Admin Bug Reports, Verify on a fixed ticket now sets status to closed after recording verification notes, and the page loading watchdog waits long enough for large closed-list fetches (up to 90s) so the UI does not falsely time out early.

Fix

Admin Bug Reports: granted admins see the full list and actions

The Bug Reports admin page uses the same admin rule as the rest of the dashboard: users with admin access (owner emails or is_admin granted by an owner) now receive all reports from GET /api/bug-reports and can use admin-only actions (delete, auto-fix, generate fix, verify, etc.). Previously only a fixed email list matched the API, so some admins saw an empty or partial list while the UI showed them as admin.

Improvement

Clear database policy: PostgreSQL for the app and for pytest

The backend documents and enforces PostgreSQL for development, staging, and production when the database module loads, with EMILY_ALLOW_SQLITE_RUNTIME for maintenance tooling only. pytest uses Postgres at import, a session metadata template, and fast per-test databases via CREATE DATABASE … WITH TEMPLATE. Legacy one-off migrations no longer branch on SQLite. See docs/architecture/DATABASE_RUNTIME_POLICY.md.

Fix

Practice Telehealth: waiting room and client list load reliably

The Telehealth dashboard loads today's appointments and the waiting room in parallel. The waiting-room API now uses portable SQL ordering (no NULLS LAST), runs in the thread pool like other practice lists, and returns an empty lobby if the waiting-room table is not migrated yet. The practice clients list uses the same sync pattern so it does not block or confuse the event loop. See docs/practice/TELEHEALTH_PRACTICE_PAGE_503.md for operations notes.

Fix

Practice prior authorizations: stable list API and clearer load failures

The prior auths list endpoint now runs in the thread pool (same pattern as calendar and billing), skips individual rows that fail serialization instead of returning a 500 for the whole list, and uses portable SQL ordering. The dashboard page loads auths and clients with allSettledand shows an explicit "list unavailable" state with retry when the auths API fails, so it does not look like an empty roster.

Fix

Practice calendar: appointments list no longer blocks the server event loop

The calendar page loads appointments and clients together. The appointments API used the same pattern as other practice routes that could block the Python event loop under load, so the UI could sit on "Loading appointments…" while lighter calls (like the 24h reminder count) still returned. The list handler now runs in the thread pool; the calendar page also uses a Suspense boundary for URL params and allSettled so a partial failure does not discard the other request.

Improvement

Practice Management: clearer loading states and faster telehealth client list

The practice hub shows an explicit loading row while schedule and summary data load. Client chart routes use a proper suspense boundary for tab URLs. Telehealth caps the client roster fetch like other practice pages to avoid slow loads. Practice site shows an inline retry if the site settings request fails, and the compliancedashboard no longer shows a perpetual "Loading…" label when metrics are simply unavailable.

Fix

Fewer browser console errors on load (CSS no longer requested as script)

Production builds could emit an invalid <script src="…css"> tag alongside normal stylesheets, which triggered MIME-type warnings and noisy preload messages in DevTools. Webpack chunk settings were aligned with Next.js defaults, and the global error screen now loads heavy reporting code only when an error actually occurs.

Fix

Practice Management: client list and billing load without server errors

The practice clients API could fail with an internal error because the database model was missing SSN and encrypted contact field accessors that the API already expected. Those fields are now wired on PracticeClient, so Billing and other pages that load clients should work again when your database has the encrypted columns from the usual migrations.

Fix

Practice calendar: notifications when appointment time changes

Updating an appointment's start or end time now triggers the same client notifications as a status change (when a client record exists). HIPAA audit PDF export date-range lines were also corrected for Python compatibility so the report generates reliably.

Improvement

Practice client detail: clear message when access is denied

Opening a client you can't access used to send you to the main dashboard without explanation. The page now stays on the client URL and shows access denied with links to the Practice hub, Clients list, or main dashboard.

Improvement

HIPAA Audit Logs: User ID column for provider/staff

The practice HIPAA Audit Logs table now includes a User ID column (the same user id used for the provider/staff filter), so each entry shows which account performed the action without opening exports.

Improvement

Practice hub: tap summary counts to open Calendar, Encounters, or Clients

On the Practice Management home screen, the three summary tiles—Appointments today, Encounters to bill, and Clients—are now links. Click or tap a tile to go to the matching screen (calendar, encounters list, or client list). Keyboard users get a visible focus ring.

Fix

HIPAA Audit Logs: filters no longer keep the page in a loading state

The practice compliance HIPAA Audit Logspage used to refetch on every filter change, so the list often stayed on "Loading audit logs…" while typing. Filters now apply when you click Apply Filters (and when you change pages or clear filters). CSV and PDF exports match the filters used for the table.

Improvement

Practice prior authorizations: loading UI and clinical role access

The prior auths page no longer shows a duplicate Loadingline next to "Loading prior authorizations…" (one clear status for screen readers). Clinical staff can read and manage prior authorizations so encounter linking matches backend permissions; the prior-auth list API enforces the same read permission.

Fix

Practice Billing: fewer internal errors when loading the page

The billing dashboard loads invoices, clients, and encounters together. Billing staff can now list encounters (read-only metadata for invoicing), which avoids failed loads for that role. Invoice list responses also coerce odd encounter_ids or due_date values so the API does not fail while serializing rows. If you still see an error, check server logs or auto-logged bug reports for the underlying exception.

Fix

Journal: stop runaway re-renders from URL params

The Journal page no longer ties deep link handling to the search-params object identity (which could change every render). Opening the journal from a bookmark or shared link should behave the same without locking up the tab.

Improvement

Practice sidebar stays fixed while you scroll

On large screens, the Practice left navigation now stays pinned under the dashboard header while long pages (for example Configuration or profile) scroll. If the menu is taller than the viewport, it scrolls inside the sidebar instead of moving off screen.

Fix

Practice telehealth: ad-hoc “Start session” no longer returns 500

Starting a telehealth session from the practice telehealth page without picking a specific appointment could trigger an internal server error after the video room was created. The API now handles that path correctly.

Fix

Loading skeletons: optional labels for screen readers

When a Skeleton is given an aria-label, it is no longer marked aria-hidden; it uses role="status" by default so assistive tech can announce labeled loading placeholders. Decorative skeletons stay hidden as before.

Improvement

Compliance showcase: links to official framework and regulator sites

The compliance badge grid now includes Official program links and a section listing authoritative sources (HHS HIPAA, HITRUST, PCI SSC, AICPA SOC, ISO 27001, EU data protection). This supports transparency without embedding third-party certification marks, which require separate trademark permission.

Improvement

TOTP authenticator MFA: deployment toggle (off by default)

Two-step TOTP sign-in and practice MFA enforcement are controlled by MFA_TOTP_ENABLED on the API (unset/false by default). The login UI uses NEXT_PUBLIC_MFA_TOTP_ENABLED at build time so it stays in sync. With MFA off, password login always completes a full session; users can still call POST /api/me/mfa/totp/disable with password only to clear stored MFA. See docs/compliance/MFA_TOTP_IMPLEMENTATION.md.

Improvement

Legal downloads: Privacy, Terms, Cookies, and BAA as PDF

Download actions for legal documents now serve PDF files (generated from the same markdown source as the on-page view). Use /api/legal/*.pdf or the Download PDF buttons on legal pages and the BAA page. In-browser viewing still uses markdown for fast rendering.

Improvement

Public compliance page, footer Product layout, and clearer sign-up CTA

The public /compliance page now includes the site header with the real app logo, shared footer, dedicated page metadata for search and sharing, framework badges with consistent artwork, and a Sign up call-to-action that goes to /register (instead of the dashboard). The footer Product section is split into two balanced columns on all screen sizes for easier scanning.

Improvement

Home hub and audience marketing pages (practice & personal)

The site root (/) is now a home hub with clear links to the main marketing page, /marketing/practice (healthcare providers), /marketing/personal (individuals and couples), compliance, features, and pricing. The footer Product section includes the same entry points. Public-route logic used by proxy.ts now treats all /marketing/*, /legal/*, and /compliance/* paths as public (no login redirect).

Improvement

Practice compliance: HITRUST data classification, portable media logging, vendor risk, and risk register APIs

Practice Management adds HITRUST-oriented controls: optional data classification on client records (create/update), APIs for portable media transfer logging, vendor risk assessments, a compliance risk register, and mobile device policy acknowledgment. Run the new database migration documented in docs/compliance/HITRUST/PHASE_11_ADDITIONAL_DOMAIN_CONTROLS.md before using these endpoints in production.

Improvement

Practice dashboard: sidebar, search, bulk actions, and loading polish

Practice Management now includes a persistent sidebar (with mobile menu), ⌘/Ctrl+K search for clients and pages, and a keyboard shortcuts panel (⌘/Ctrl+/ or ? outside fields). Encounters supports multi-select with a claims queue (submit across multiple encounters in order) and bulk AI note generation. Clients supports selecting multiple rows to assign the same intake form (also via /dashboard/practice/clients?bulk_intake=1). Claims, Clients, Intake, and the portal loading state use skeleton placeholders where appropriate.

Layouts wrap practice and client portal content in an error boundary for safer failures.

Fix

Practice client portal messaging and notifications polish

Client portal Messages now use the same portal magic-link session as the rest of the portal (not a full Reflect account session). The portal home response includes unread message count so one request can show the badge. Dashboard Notifications shows distinct icons for practice types (appointments, invoices, messages, intake, claims).

Improvement

Practice compliance: officers and training pages, live dashboard metrics

Under Practice → Compliance (admin): new Compliance officers and Workforce training pages list assignments and training records and support creating entries via the existing APIs. The compliance home page now loads live metrics (score, audit totals, pending BAAs, training due soon, open breach investigations) instead of placeholder stats.

New

Optional TOTP two-factor sign-in (authenticator app)

Accounts can enable time-based one-time passwords (TOTP) after signing in: use POST /api/me/mfa/totp/begin and POST /api/me/mfa/totp/confirm with an app such as Google Authenticator or 1Password. With MFA on, email/password returns a short-lived step-up token; the login page asks for a 6-digit code, then POST /api/token/mfa-verify completes the session. Run python migrations/add_mfa_totp_enc_columns.py on existing databases. See docs/compliance/MFA_TOTP_IMPLEMENTATION.md.

Improvement

Practice compliance: officer access, e-sign password check, reproductive health attestations

For organizations using Practice Management: entitlement and SOC 2 report access now recognize active HIPAA security/privacy officers (in addition to admins). Compliance officers can also view other users' MFA status where appropriate. Electronic signatures verify your account password when you provide one (session sign-in otherwise). Reproductive health attestations are stored with client and disclosure metadata; run migration migrations/add_reproductive_health_attestation_client_columns.py on existing databases (or the full compliance migration script).

Improvement

Communications Wizard: inbox-style list, search, and clearer read status

The partner message area now behaves more like an email inbox: each row shows From, a subject line from the first line of the message, date, and in Sent a compact Not read / Read / Expired pill. Use Search (including shortcuts unread and pending) and Refresh to reload messages. Messages you sent show explicit Not opened yet copy when your partner has not opened the wizard thread. Reply on a partner message quotes an excerpt into compose.

Improvement

Practice invoice payments: enable path and Stripe refresh

Stripe client refresh now reads payment flags from the current environment (works cleanly with Admin → API Keys). Admin Stripe setup step 3 points to API Keys for adding STRIPE_SECRET_KEY without SSH. Docs add a turn-on checklist and verify_practice_stripe_env.sh for the prod env file.

Fix

Journal, Devotion Connect, and Billing payment notice

Journal: Suggest / Next / Finish toolbar on phones sits above the dashboard bottom nav (no more hidden behind it), with extra scroll padding. Devotion Connect prayer form: Partner and Friends labels and checkboxes use higher contrast. Practice → Billing: payment-disabled notice links to Admin → Stripe setup and explains Stripe keys; Pay still needs a valid server-side secret key and backend restart.

Improvement

Practice: prior authorizations — edit, status, procedure codes, usage

Prior auths now support full edit (including reassigning client and correcting sessions used), status (pending / approved / denied / cancelled), and authorized procedure codes (CPT/HCPCS). Denied or cancelled auths cannot be linked to new encounters; the encounter form hides them unless already attached. Run the DB migration migrations/add_practice_prior_auth_status_and_procedure_codes.py on existing databases.

Improvement

Practice Calendar: day and month views

Practice → Calendar now includes Day and Month alongside List and Week. Month view shows a full grid with a few appointments per day; tap a day to open that day. Navigation (previous / next / today or this month) follows the active view. The week grid still loads even when the week has no bookings.

Fix

Portal telehealth: provider video above your camera on phones

On the client portal video call, the provider's tile now appears first on narrow screens (your camera below), and track auto-subscribe is set explicitly—so patients see their therapist without scrolling past a full-height self view.

Fix

Prayer Requests & Wizard: mobile layout and wrapping

On small screens, the prayer list and composer no longer split into two very narrow columns: sharing options stay full width until larger breakpoints, filter pills stack with shorter labels, and prayer text uses normal word breaking (no aggressive mid-word breaks). Partner thread bubbles use a clearer max width; wizard review and ACTS actions stack full width on phones.

Improvement

Prayer Requests and Prayer Wizard: clearer layout

Prayer Requests now uses a calmer page background, skip-to-content link, a structured composer (draft, type, partner + friends sharing, primary action), segmented filters, and richer list cards with type badges. The friends-sharing option appears in the form so it matches what is saved. Prayer Wizard gets the same shell on the main screen; the partner thread uses chat-style alignment (your messages on the right), a larger scroll area, and a stacked composer on small screens.

Improvement

Messages: clearer “note to yourself” thread

When you open a conversation with your own account, the header now reads Notes to yourself with a short privacy line, the empty state explains the thread, timestamps say You sent this at … instead of “Sent to [your name]”, and cycle-breaker nudges stay hidden in that context.

Improvement

Telehealth: product wording without third-party video branding

Practice and portal telehealth screens, recording library, session notes/transcription hints, and API error messages now use neutral language (your video service / telehealth video) instead of naming the underlying infrastructure vendor. Admin → API Keys labels use the same approach; environment variable names are unchanged for operators.

Improvement

Practice Telehealth: simpler wording on the hub page

Under Practice → Telehealth, intro copy is toned down to read like clinical workflow notes instead of marketing: shorter overview, billing modifiers called out with a "confirm with your biller" line, recording/consent bullets, and clearer waiting room and quick-visit sections.

Fix

Faster, cleaner loads and correct link previews

Pages no longer ask the browser to run stylesheet files as scripts (which could cause console errors). Canonical URLs, Open Graph, and sitemap defaults now use the live production domain when a build omits NEXT_PUBLIC_SITE_URL—override that variable for white-label or alternate hosts.

Fix

Admin: Google Calendar sync setup no longer 500s on DB read errors

Loading Admin → Calendar sync (/dashboard/admin/calendar-sync-setup) could return a 500 if reading stored OAuth settings hit a database error. The API now falls back to environment variables for status, returns a clear 503 with guidance when saving credentials fails, and the page has an error boundary with recovery links. Calendar sync also appears in the admin tab bar.

Fix

Practice client waitlist: API mounted and mobile action buttons

Client waitlist ( /dashboard/practice/waitlist) was calling GET/POST /api/practice/waitlist but the waitlist router was not included on the practice aggregate router, which produced Not Found in production. The waitlist routes are now registered.

Waitlist status updates use PATCH to match the backend. The Practice Hub / Calendar / Add buttons use a single horizontal row with no awkward line breaks on narrow phones.

Fix

Practice telehealth: connection status no longer stuck on “Checking…”

After joining, the header could stay on Connection: Checking…because Daily's networkState defaults to unknown until a network-quality-change event—and on some mobile browsers that event is delayed or absent. While quality is not yet measured, the line now reads Connection: In call. Good, Fair, and Poor still appear when Daily reports them; reconnect behavior is unchanged.

Fix

Practice telehealth: no more brief “No active call” flash when joining

The call screen could show No active call.for a moment after device check because Daily's useMeetingState() can be null before the first state update. That gap now shows the same Loading… / Joining call… UI as the rest of the join flow, and the video provider is still initializing when the Daily object is not yet in context.

Starting a new call after a long load resets the connecting timer so the timeout message does not appear immediately from the previous attempt.

New

Practice telehealth: recording library

Under Practice → Telehealth, open Recording library to list Daily cloud recordings for video rooms you start from the dashboard, and open time-limited download links. Older sessions may not appear until you start new calls after this update (practice_telehealth_room_sessions migration on Postgres).

Fix

Practice telehealth: Daily join uses room URL + token separately

Some joins still failed with You are not allowed to join this meeting even when the link included ?t=…. The call UI now passes Daily the room URL and meeting token as separate fields (recommended by Daily), which avoids fragile query-string handling. Start a new session if the previous token already expired.

Improvement

Help Center: practice telehealth (video) guidance

The in-app Help Center, contextual help API (telehealth topic), and docs/HELP.mdnow include telehealth for providers: starting sessions, patient vs host links, token expiry, and "not allowed to join" troubleshooting.

Fix

Practice telehealth: call page no longer stuck on Loading

The in-call screen could stay on Loading… because Daily prejoin is a Prebuilt feature while this app uses a custom Daily call UI (device check happens before join). New video rooms now default enable_prejoin_ui: false, and the client kicks join() if the call object idles in new / loaded. Start a new telehealth session after deploy so rooms pick up the updated Daily room settings.

Fix

Practice telehealth: Daily join links work again (meeting token request)

Private Daily.co rooms require a meeting token on the join URL. The backend was sending token expiry (exp) at the wrong JSON level, so Daily returned 400 unknown parameter 'exp'and the UI showed "Video room creation failed." Tokens now match Daily's API (expiry inside properties). If token creation still fails (key or permissions), messages are mapped more specifically than the generic creation error. See docs/features/TELEHEALTH_CONFIGURATION.md § Troubleshooting.

Fix

Practice telehealth: reliable Daily room creation for repeat sessions

Starting HIPAA video for an appointment now uses a unique Daily.co room nameeach time (instead of reusing the same name), so "Video room creation failed" should not recur when you start another session for the same appointment. If Daily rejects a room, you get a clearer message to retry or check your API key and Daily domain.

Fix

Practice telehealth: one connection status line (no duplicate “Checking…”)

The in-call header showed Connection: Checking… twice because a hidden screen-reader region repeated the same text as the visible status row. The call UI now uses a single bar with aria-live so layout stays clean and assistive tech still gets updates.

Fix

Practice telehealth: “not allowed to join” — token checks & Pipecat fallback

If Pipecat Cloud returned a Daily room without a meeting token, the app used a bare URL and Daily showed You are not allowed to join this meeting. Those responses are now rejected so a proper Daily-direct room (with ?t=…) can be created when DAILY_API_KEY is set. The practice and portal call pages also detect missing tokens before join and explain how to get a fresh link.

Fix

Practice telehealth: cloud recording start error fixed

Starting Record on a provider telehealth call could immediately show Could not start recording. The Daily client now calls startRecording()with 720p size only (room already enables cloud recording). If something still fails, the toast includes Daily's error message. Use the provider join link (owner token), not the patient link, for recording controls.

Improvement

Practice intake wizard: auto-save and resume draft

When building a new intake template in Dashboard → Practice Management → Intake, progress is saved automatically in the browser (about every 700ms while the wizard is open). If the tab is closed or refreshed, use Resume draft on the Intake page to continue, or Discard draft to start fresh. Drafts expire after seven days and are cleared when the template is saved successfully or when opening edit/duplicate on an existing form so drafts do not mix. Data stays on this device only.

Improvement

Admin: couple link diagnostics on User edit

In Dashboard → Admin → Users, opening Edit on a user now includes a Couples connections table (read-only): connection id, status, both account emails, pending invite email, whether user2 can see all of user1's connections, and connected date. Matches GET /api/admin/users/{id}/couple-connections. Purging a user still logs removed links at INFO and clears couples dashboard cache for affected accounts; operators can use scripts/one-off/list_couple_connections_for_user.py on the server. See docs/features/COUPLES_CONNECTION_TROUBLESHOOTING.md.

Fix

Couples: dashboard connection status refreshes right after partner joins

The couples dashboard uses a short server-side cache. It is now cleared when a partner completes join with code and when an admin purge removes couple links, so you should not wait up to a minute to see connected or disconnected update in those cases.

Improvement

Couples: clearer guidance when partner is not connected

The couples dashboard invite screen now explains that "not connected" usually means there is no active link in the system (not only a manual disconnect), and lists steps: correct subscription tier for both people, re-invite or join with a code, and signing in with the account that accepted the invite. See docs/features/COUPLES_CONNECTION_TROUBLESHOOTING.md for operators.

Improvement

Practice Management: better taps and labels on phones

Encounters, Billing, Claims, and Intake use larger touch targets (about 44px) on key buttons, clearer focus rings for keyboard users, and improved spacing on small screens. Prior authorization lines on encounter and claim views are less likely to truncate awkwardly on narrow widths.

Improvement

Admin API Keys: Daily.co and Pipecat for telehealth

Dashboard → Admin → API Keys now includes Daily.co and Pipecat Cloud variables used for practice telehealth (DAILY_API_KEY, PIPECAT_API_KEY, PIPECAT_AGENT_NAME, and optional API base URLs). Values saved there apply to the running backend without editing server env files.

Fix

Practice Management: provider profile no longer stuck on loading

The practice area was waiting on dashboard stats as well as user and subscription data, so a slow or stuck /api/stats request could keep every practice page (including Provider profile) on "Loading…" forever. Practice routes now gate only on user and subscription. The profile page also loads calendar sync in the background so it cannot block the provider form.

Improvement

Telehealth and client portal: better layouts on phones

Practice Telehealth and Telehealth call use safer viewport height, horizontal overflow protection, and control bars that wrap with home-indicator padding. In-call Session notes sits below mic/camera/leave so controls stay reachable when notes are open. The signed-in Client portal uses the same overflow and safe-area patterns for small screens.

Improvement

Practice client portal: profile self-service and provider preview

On /portal, clients can open Your information, edit contact and demographics, and save (same fields as in Practice Management). On Practice → Clients → [client], use Preview client portal to open the portal as that client; a banner links back to the full client record for insurance, intake assignment, billing, and notes. Payments and intake submission stay disabled in preview.

New

Practice Telehealth: practice-manager cloud recording and host join link

Practice managers can enable Allow cloud recording on Practice → Telehealth or Provider profile. New Daily rooms then allow cloud recording; providers join with a host link so Record / Stop recording appear in the in-app call. Copy join link still copies the patient URL. PostgreSQL: run migration telehealth_allow_cloud_recording on provider_profiles (see deploy migrations). Details: docs/features/TELEHEALTH_RECORDING_PRACTICE_MANAGER.md.

Improvement

Practice Telehealth: mobile layout, fewer duplicate errors, smoother waiting room refresh

Today's appointment actions (copy patient link, waiting room, start session) stack in a full-width column on small screens so controls are not clipped. When appointments and the waiting room fail with the same server message (for example after a deploy), a single alert with Try againreplaces duplicate toasts and cards. Background waiting-room refresh no longer flashes "Loading…" every few seconds while the list is already visible.

Fix

Login: more reliable sign-in on production

Sign-in now uses the dedicated /token endpoint first (the same path your server sends to the API), with a fallback to /api/token when needed. After a successful login, the app also sets the secure session cookie the dashboard gate expects — not only localStorage — so you are not sent back to the login page when opening the dashboard. A 401 on the initial profile load no longer clears your session by itself.

Fix

Dashboard: client who is also admin sees Admin and Practice Management

If you are both an Emily client and an admin (or practice owner), the dashboard now correctly shows the Admin Tools and Practice Management sections. Admin visibility is based on your account's admin flag instead of a hardcoded email list; Practice Management is shown when you have the Coach/Professional plan or admin access.

Fix

Practice Management reliability and dashboard refresh

Practice Site settings and Intake no longer show "temporarily unavailable" when saving; fixes ensure tier checks and database commits behave correctly. Billing now shows a clear banner when payment processing is not enabled, so you know upfront instead of only after clicking Pay.

Refresh buttons were added on Journal (History), Goals, Notifications, Practice Clients, and Reflections. Telehealth hub and call page support copy join link and refresh; waiting-room order and join time are more consistent.

New

Memory & context page and platform-wide memory

A new Memory & context page (Dashboard → Prepare & store) shows what the app uses to personalize your experience: journal themes and insights, shared partner memories, and relationship profiles (partners, friends, family). The app now uses this context across chat, journal, couples features, and AI suggestions so your history and relationships are reflected in one place.

  • View and manage your journal memory (tags and patterns from entries)
  • See shared couple memories count and link to add or edit them
  • See people you've added (roleplay profiles) and open them to update
Improvement

Practice Hub: one-click telehealth and recommended task

From Today's schedule, "Start telehealth" now creates a session and opens the call in one click when Daily.co is configured. Activity shows a recommended next action (e.g. "Add note for [client]" or "Sign treatment plan") to reduce cognitive load.

Improvement

Intake form wizard: form preview and telehealth copy

Final review step now shows a mini form preview: each section with its field count. The Telehealth page highlights in-app video and waiting room with no separate app.

Improvement

Therapeutic chat and chat input improved for mobile

Therapeutic chat and the shared chat input now use tighter spacing on small screens so the composer uses less vertical space while staying within safe areas. Send and action buttons keep at least 44px tap targets, and the input bar no longer overflows on narrow viewports.

Improvement

Clearer, consistent error messages across the app

Error screens and toasts now use a single, user-friendly message format so you see clear, safe text instead of raw technical details when something goes wrong (e.g. dashboard errors, analysis stream, love language quiz, and bug report flow).

Fix

Login now keeps auth cookies in sync

Login, refresh, and logout now use Next API routes to keep the auth cookie aligned with the active session, fixing the broken login flow caused by the missing server-action module.

Improvement

Practice claims can now track appeal submitted dates

Denied claims now expose an optional appeal submitted date in the claims workflow, so providers can keep the appeal timeline visible alongside the denial reason and draft.

Improvement

Practice Management now surfaces prior auth, denial, and setup context

Practice users can now keep prior-auth context visible as they move from authorization to encounter to claim, see denial reasons directly in the claims workflow, and get clearer setup guidance for Stedi, calendar sync, and profile configuration.

The Practice hub is also reachable from the mobile bottom navigation, so the same workflows are easier to get to on smaller screens.

Fix

Telehealth admit now keeps provider metadata in sync

Telehealth sessions and waiting-room admits now return the correct provider metadata so the in-app call shell stays on the right adapter after a client is admitted.

Improvement

Telehealth rooms now use Daily Prebuilt defaults

New telehealth rooms created by the portal now start with the requested Daily Prebuilt room defaults enabled, including prejoin, People, text chat, emoji reactions, background blur controls, PiP, network stats, noise cancellation, live captions, and English as the default language.

Improvement

Practice intake builder adds custom fields and archive/restore

Practice intake templates can now be archived and restored, and the wizard includes a custom field builder so providers can add their own sections and questions before saving.

Improvement

Practice intake templates can now be edited or duplicated

Providers can now reopen an existing intake template, revise its schema-backed settings, and save the changes in place. Templates can also be duplicated to create a new version without starting from scratch.

New

Practice intake wizard with 10+ templates

Practice intake now starts from a guided template library with more than 10 presets, including couples, telehealth, insurance-ready, trauma-informed, and crisis workflows. Providers can customize which sections appear before saving the template.

Improvement

Practice billing copy now matches provider workflows

Practice billing language now makes the provider role explicit. The hub and billing page now describe providers collecting client payments, which matches how the Practice portal actually works.

Improvement

Telehealth: portal-owned call shell with provider adapters

Telehealth sessions now carry provider metadata from the backend and open through a portal-owned video shell. That keeps the UI and session flow in the portal while the media layer stays swappable underneath.

Improvement

Practice billing: separate payment flag for the portal

Practice Management invoice payments can now be enabled independently from the rest of the site's payment features. That keeps subscriptions and other payment flows off while still allowing the practice billing portal to open Stripe Checkout when the new practice payment flag is turned on.

Improvement

Therapeutic chat: mobile-friendly composer

Therapeutic chat input areas now behave much better on phones. The composer stacks cleanly on narrow screens, the send button stays full-width and easy to tap, and the shared chat input spacing has been tightened so the keyboard leaves more room for the conversation.

Improvement

Practice portal: shared calendar admin moved into Practice

Shared calendar setup now lives in the Practice portal's Admin section, so providers can find Calendar Sync Setup where they manage practice tools. The Calendar page now points there directly for Google Calendar credentials and two-way sync.

Improvement

Devotion Connect: NKJV as default Bible translation

Devotion Connect now opens in NKJV (New King James Version) by default site-wide. You can still choose KJV or any other supported translation from the dropdown. Previously saved translation choices in your browser are unchanged.

Improvement

Journal: inline writing, weekly themes, quick takeaway, and Turn into a goal

The Journal is now 10x better: write entries directly on the page (no dialog), see “This week in your journal” with AI themes, get a quick takeaway after saving, and turn any entry into a goal in one click. Onboarding and dashboard now highlight the Journal as Option 1. Focus mode hides title and mood for distraction-free writing.

  • Inline composer: create and edit entries in the main interface
  • First-visit: suggested prompt and one-click start
  • Weekly summary card with themes from your writing
  • Post-save offer: “Get a quick takeaway?”
  • “Turn into a goal” on each entry links to Goals with pre-filled title
  • Focus mode toggle for a larger writing area
Fix

Repair worksheet: copy-draft button on step 5

The “Copy draft to clipboard” button on step 5 (Draft an apology) of the repair worksheet now shows correctly for all users.

Improvement

Admin bugs: load up to 10,000 closed/resolved

On the admin bug reports page, when you filter by Resolved or Closed, the list now fetches up to 10,000 closed bugs (fixed, closed, wont_fix) in one request. This supports verifying and fixing closed bugs at scale.

Improvement

Practice: ePrescribe provider enrollment (DB-backed)

When an e-prescribe vendor is configured, provider enrollment status is now stored in the database. Practices can view and manage ePrescribe/EPCS enrollment per provider; enrollment state persists across sessions and is available via the practice ePrescribe APIs.

Improvement

Repair worksheet: all 7 steps in-app, PDF removed

The “How to Repair Any Relationship” worksheet now includes the full 7-step tool directly in the app: pause and calm down, acknowledge what happened, take responsibility, consider their experience, draft an apology, one small next step, and reconnect. Progress is saved on your device. Use Print / save as PDF to create a PDF from the tool. The standalone PDF file has been removed.

Improvement

Journal: export to Markdown or HTML

From the Journal page you can now export your timeline (journal entries and guided reflections) for backup or printing. Use Export (.md) for a Markdown file, or Export (HTML) for an HTML file you can open in a browser and print or save as PDF.

  • Export includes up to 200 recent items from your unified journal feed
  • Markdown: plain text, easy to move into other apps
  • HTML: print-friendly layout; use your browser's Print → Save as PDF
New

Journal: custom templates

You can now create and manage your own journal templates. From the Journal page, use Manage templates to add templates with a name, slug, and optional prompt. Your custom templates appear as quick-action buttons next to Morning, Evening, and Gratitude so you can start an entry with your own prompts.

  • Create, edit, and delete custom templates
  • Each template has a name, slug, and optional prompt/placeholder
  • Use a custom template from the Journal header to write with that prompt
New

Real Journal: freeform entries and unified timeline

A dedicated Journal experience is now available at Dashboard → Journal. Write freely with a blank page, or use quick prompts for Morning, Evening, or Gratitude. All entries and your guided reflections appear in one timeline. Add an optional mood to each entry and build a journal streak. Weekly digest emails now include your journal entry count alongside reflections and goals.

  • Freeform journal entries with optional title and mood
  • Morning, Evening, and Gratitude templates
  • Unified feed of journal entries and guided reflections
  • Journal streak (writing or reflecting counts)
  • Link to Guided reflection for AI insights and Bible linking
Fix

Read aloud and notification sound fixes

Text-to-speech (Read aloud) and notification sounds are more reliable across the app:

  • Read aloud— Buttons no longer get stuck in “speaking” when you start reading from another section or cancel elsewhere. First click is more likely to work (Chrome first-load retry). Voice selector shows “Loading voices…” until voices are ready instead of disappearing.
  • Voice choice — Default voice prefers local/system voices for better compatibility; you can still pick any voice from the selector.
  • Notification chime — Sound now plays correctly when the browser had suspended audio (e.g. before the first user interaction).
Improvement

Language Analyzer: higher character limit for Premium and Professional

Frankenstein Language Analyzer (multi-model consensus) now allows much larger inputs on Premium and Professional plans: up to 2 million characters (2000k) per run instead of 200k. Free and other plans keep the 200k limit. This lets you attach or paste long documents (e.g. large PDFs) for analysis without hitting the limit.

New

How to Repair Any Relationship worksheet

An in-app worksheet is available from the Repair hub: work through all 7 steps (pause and calm down, acknowledge what happened, take responsibility, consider their experience, draft an apology, one small next step, reconnect) with progress saved on your device. Use Print / save as PDF from the tool to create a PDF. Open from Dashboard → Repair → How to Repair Any Relationship.

Improvement

Practice Management: AI intake summary, denial appeal draft, ICD-10 from note

New AI-assisted features for providers using Practice Management (Coach/Professional plan):

  • Intake summary — On a client’s intake assignment (with a submitted response), use “Generate summary” to create a short clinical summary stored on the assignment. Summary is shown on the client detail page.
  • Suggest appeal — For denied claims, use “Suggest appeal” to get a draft appeal paragraph (from denial reason and encounter note). Copy and submit to the payer after review.
  • Suggest ICD-10 from note — On Encounters, use “Suggest ICD-10” next to an encounter with a note to get suggested diagnosis codes (e.g. F33.1, F41.1) and prefill the encounter.
Improvement

Everyday AI Assistant: message actions, follow-ups, search, export, and streaming

Everyday AI Assistant now feels closer to ChatGPT with clearer actions and more power:

  • Copy / Regenerate / Edit — Copy any assistant reply, regenerate the last response, or edit a user message and send again (hover over a message to see actions).
  • Follow-up chips— Short suggestions below the last reply (e.g. “Summarize that in one sentence”, “Give me an example”) that fill the input when clicked.
  • Search conversations — Filter the sidebar list by title or date.
  • Export — Download the current conversation as .txt or .md from the header when there are messages.
  • Streaming — When using OpenAI and MCP tools are off, replies stream in as they’re generated; otherwise the same typing effect as before.
Improvement

Easier login: Keep me signed in, remember email, and browser save

Login is more convenient and still secure:

  • Keep me signed in — Check the box on the login page to stay signed in longer on this device (e.g. up to 30 days). We never store your password; only your session is extended. Idle timeout still applies for security.
  • Remember my email — Your email is pre-filled next time you visit the login page (stored only on your device). Password is never saved by the site.
  • Your browser can offer to save your password if you want; we don't block that.
New

Father-Son Repair tool (God-based)

A new God-centered tool under Present for the Next Generation: Father-Son Repair. It includes a short scripture-anchored assessment, guided reflection via Therapeutic Chat (Scripture, prayer, forgiveness, and concrete next steps), and progress milestones you can log (e.g. had a conversation, prayed together). Grounded in biblical wisdom; not therapy or diagnosis. Open from Dashboard → Present for the Next Generation → Father-Son Repair.

Fix

Clearer, safer error messages across the site

When something goes wrong—login, dashboard pages, Safety Check, Bible research, or notifications—you now see clearer, user-friendly error text instead of raw technical messages. Errors are handled consistently so you get a helpful message and can retry or get support when needed.

New

Site-wide search at the top of every page

A search bar now appears at the very top of the site on every page. Type to find pages and features—dashboard, Safety Check, AI Chat, Goals, Bible, Preferences, and more—then select a result to go there. Works from marketing, login, and dashboard.

New

Download and install the app from Preferences

In Dashboard → Preferencesyou can now install Emily's Growth Portal on your device. A new “Download and install the app” section shows an Install button when your browser supports it, or a short note when the app is already installed or install isn't available. Installing adds a home screen icon and optional offline support.

Fix

Practice Management: Clients list with high limit no longer errors

Loading the Clients page with a large limit (e.g. 500) no longer triggers a server error. The API now applies sorting before pagination so the request completes successfully.

Improvement

Practice Management: Delete encounter

On the Encounters page you can now delete an encounter from the actions column. Deletion is only allowed when the encounter has no claims; otherwise you’ll see an error and must remove or void claims first. A confirmation prompt appears before the encounter is removed.

Improvement

Dashboard header: shorter height and tighter layout

The dashboard header is more compact: logo and welcome message sit on one line, padding and spacing are reduced, the “How are you today?” button uses a smaller size, and nav links are slightly tighter. Same links and behavior with less vertical space.

Improvement

Practice Management: Reports, Prior auths, CPT suggest, and more

Practice Management (Coach/Professional plan) now includes a live Reports page with total billed/paid, denial rate, collection rate, and unbilled counts; a Prior authorizations page to track auth numbers and session limits; Suggest CPT from session duration on Encounters; Generate note stub and Validate claim before submit; and a Telehealth “Start session” stub. Integration tests added for the new endpoints.

New

Practice Management: Billing, Claims, and Telehealth pages

Placeholder pages for Practice Management are in place so Calendar, Clients, Billing, Claims, and Telehealth links no longer 404. Full features will roll out by phase (foundation, Stedi EDI, automations, telehealth and scale).

Improvement

Dashboard header: More dropdown with logo and app name

The dashboard top bar uses the app name with logo icon, one primary button “How are you today?”, and a More dropdown for quick links: Who this is for, Devotion Connect, Michael–Emily Mail (when available), and for admins a grouped Admin section. This keeps the header minimal while preserving access to all links.

Improvement

Dashboard header: restored March 3 design

The dashboard top bar is restored to the March 3 design: title “🌱 Emily's Growth Portal”, “Welcome back, [name]!”, and compact inline links (Who This Is For, Michael–Emily Mail, Devotion Connect, admin) with emoji icons. No logo image or primary button; simple text links only.

Improvement

Dashboard header: restored horizontal nav with logo and icons

The dashboard top bar is restored to the previous design: app name with logo icon, and all quick links in a single horizontal row (Who This Is For, Michael–Emily Mail, Devotion Connect, and for admins the admin links), each with an icon. The row wraps on smaller screens and uses design tokens for consistent styling.

Improvement

Dashboard header: quick links back in More dropdown

The dashboard top bar is restored to the prior design: title “Reflect with Emily” (no logo image), prior font and colors, and quick links (Who this is for, Devotion Connect, Michael–Emily Mail, admin) under a single Moredropdown next to the “How are you today?” button.

Improvement

Therapeutic Chat: design tokens and contrast

The Therapeutic Chat page now uses design tokens for backgrounds, borders, typography, and focus rings. Message bubbles, input area, and loading state follow the same semantic colors as the rest of the app for consistent look and better contrast in light and dark mode.

Improvement

Dashboard All tools: consistent design tokens

The All tools section on the dashboard now uses design tokens throughout: section bars (Longitudinal Evaluation, Faith & Bible, Stay connected, Wizards, AI & chat, Settings & Tools, Admin Tools) use a card-style bar with semantic typography and focus rings; feature cards (Safety Check, Bible Evaluation, Ask the Word, Everyday AI Assistant, Longitudinal Evaluation) use the same surface and typography tokens with colored accent borders. Full-page category view and nested expandable rows also use tokens for a consistent look and better contrast.

Fix

Weekly Review URL: old paths redirect to canonical

Links or bookmarks using /dashboard/weeklyreview or /dashboard/weekly_review now redirect to the canonical /dashboard/weekly-review. No more broken or inconsistent URLs for the Weekly Review page.

Improvement

Dashboard header: app name, horizontal nav, and icons

The dashboard home header now uses your app name (e.g. Emily's Growth Portal) with the logo icon, and all quick links appear in a single horizontal row instead of a “More” dropdown. Links include Who This Is For, Michael–Emily Mail (when available), Devotion Connect, and for admins: Admin Dashboard, Admin: API Costs, Admin: Bug Reports, Admin: AI Prompts, and Admin: User Manager, each with a small icon. The row wraps on smaller screens and keeps 44px touch targets for accessibility.

Improvement

Admin Datasets: Run build from the UI

On Admin → Datasets, when the NPD dataset has not been built yet, you can click Run build to start the download script from the server. The build runs in the background; the page continues to auto-refresh every 12 seconds so when the dataset is ready it appears without a manual reload. You can still copy the command and run it in your terminal if you prefer.

New

Practice management landscape report

A new brand report at /brand/practice-management-landscape covers SimplePractice, 15+ competitors, and the mental health practice management market: pricing, workflows, and where the industry is heading. Linked from the brand landing and from the Platform vision page. Brand and vision content only.

New

Brand area and platform vision page

A new public brand area at /brandintroduces Toxic Partner's broader vision alongside the current product. The brand landing explains two arms: Toxic Partner (current product) and our platform vision (next-generation therapy and coaching platform with Stedi EDI). The full strategic report lives at /brand/platform-vision. Both pages are linked from the site footer under Product.

Improvement

Family Communication: guided flow and in-meeting support

Family Communication (Kids Connect) now has a 2-step wizard: choose family meeting prompts, whole-family conversation prompts, or simple frameworks (including Rose–Thorn–Bud). Pick one or use “Surprise me”; the selected prompt or framework appears in a large, readable card. Copy to clipboard or start an optional 5–10 minute timer for check-ins. Supports connection and healthy communication; not therapy or conflict mediation.

Improvement

Partner activity shows more tools

The Partner activity card (when enabled in admin) now lists more of what your partner recently used. In addition to Safety Check and Communications Wizard, it can show: Chat, Goals, Reflections, Check-ins, Gratitude, Everyday AI Assistant, and Bible Study—each only if your partner used that tool in the last 30 days. Items are sorted by most recent use.

New

Everyday AI Assistant: everyday helper chat

Everyday AI Assistant is a new ChatGPT-style chat for everyday questions: how-to, recipes, quick facts, describing photos, and recommendations. One input bar with optional image attach (paste, drag, or button); an expandable Options panel lets you choose model, temperature, max tokens, app context, AI context ecosystem, MCP tools, and an optional custom system prompt. Sessions are separate from Ask the Word and full AI Chat; find it in the dashboard and in Quick Access.

Improvement

Therapeutic Chat: ChatGPT-style UX and quality

All therapeutic chats (When Triggered, 30-Day Curriculum, Next Generation Upbringing, and others) now use a modern, high-quality chat experience: rich markdown in responses (lists, headers, bold, code), a typing effect when the guide replies, an animated thinking indicator, dark mode support, auto-resizing input, and smooth scrolling. The same experience powers every prompt-slug and reflection-prompt chat.

Improvement

Faster AI Chat and Bible loading

AI Chat message loading is faster: we now fetch the last 300 messages instead of 2000, so opening a conversation is quicker. The Bible chapter page can take 10–15 seconds on first load (then it’s cached); we’ve adjusted admin performance alerts so these expected long-running requests are no longer flagged as “Needs attention.”

Improvement

Admin Datasets: guided setup and one-click Retry

When the NPD training dataset has not been built yet, the Admin → Datasets page now guides you through the full flow: a clear step-by-step (build from repo root, set NPD_DATASET_DIR if needed, then Retry), a Copy command button for the download script, and the training wizard opens automatically so you can follow build → dedupe → train in one place. Retry re-checks immediately; the page also auto-retries every 12 seconds (up to 5 times) so it can update without clicking after you run the script.

Improvement

Present for the Next Generation: dedicated help

The Present for the Next Generation section now has its own help content. Use the (?) button on that page for section-specific FAQs, and find a dedicated section under Help Center → Present for the Next Generation.

New

Daily Prayer & Bible Study for Couples

Couples can set a daily time (e.g. 9pm) and receive a tailored Bible chapter suggestion based on your relationship context—growth goals, recent conflicts, gratitude—so you can read and pray together and let the Holy Spirit guide you.

  • Settings — Enable the feature, choose hour, minute, timezone, and Bible translation.
  • Today's focus— One suggested chapter per day with a short reason; read in-app or open in the full Bible; mark when you've read and prayed together.
  • Reminders — Optional in-app and email reminders at your scheduled time (requires Couples Connect).
New

Kids Connect

Kids Connect is a new dashboard section for parent–child connection, co-parenting tools, biblical parenting resources, and family communication. Find it on the dashboard and open the Kids Connect card to see all areas.

  • Parent–Child Activities — Age-appropriate activity ideas and conversation starters for quality time with your kids.
  • Co-Parenting — Communication guidelines, schedule tips, and shared parenting principles when households are separate.
  • Biblical Parenting — Scripture-grounded passages and practical guidance for discipline, instruction, and love.
  • Family Communication — Prompts and simple frameworks for family talks and whole-family connection.
New

Present for the Next Generation

A new Personal Growth section helps you process your upbringing and strengthen presence with your kids. Find it on the dashboard under Personal Growth.

  • Processing your upbringing — Guided reflection on the impact of your father or mother not being present; validate the experience, name what was missing, and connect to what you choose to do now, including playfulness and presence.
  • Being present for your kids — Reflect on small, concrete ways to show up: 10–15 minutes of purposeful or playful time, rituals, and repair when you miss the mark. Stepfamily-aware for your kids and your partner’s kids.
New

Cycle Breaker

Cycle Breaker helps you interrupt the anxious–avoidant cycle with a regulated 5-minute pause, message translation, and structured repair steps. Find it under Relationship Tools on the dashboard.

  • 5-minute pause — Choose a trigger, start the timer, and follow the breathing guide (In 4s, Hold 4s, Out 4s, Hold 4s) while the timer counts down. Timer shifts from blue to amber in the last minute, then green when done.
  • Translate a message — Optionally rephrase what you were about to send into safer, clearer wording before you continue to repair.
  • Repair steps — Walk through five steps: acknowledge your part, validate your partner, state your need, invite them to share, and make a small commitment. Mark each done as you go.
  • Proactive nudge — When recent partner conversations (Messages or Communications Wizard) show signs of the cycle, a supportive nudge can suggest taking a Cycle Breaker pause. Nudges appear on the Messages page, Communications Wizard, dashboard Relationship Tools, Couples hub, and Fight Room.
Improvement

Admin Datasets: training wizard and build/verify guidance

The Admin Datasets page (Admin → Datasets) now includes a step-by-step training wizard and clearer guidance for building, deduping, training, and verifying the NPD/abuse detection model.

  • Open training wizard— Four steps: Build dataset (quick or custom options), Dedupe (recommended), Train model (DeBERTa/BERT, batch size, learning rate, epochs), then Run & verify with a single copyable or downloadable script.
  • Training readiness — Page shows whether train/val/test splits exist and displays last training run metrics (eval loss, accuracy, F1) when available.
  • Verify — Instructions to check test_results.json and run the interactive test command; app integration via NPD_HF_MODEL_PATH and ENABLE_NPD_LOCAL_MODEL.
New

NPD Training Wizard

A new guided wizard walks you through training the NPD/harmful-language classifier and other local AI models from the dashboard.

  • Dashboard → Wizards → NPD Training Wizard — Step-by-step: build dataset, dedupe, train (DeBERTa or BERT), verify, and enable in app with copyable commands.
  • Refresh status — Check whether your dataset and trained model exist (e.g. after running commands on the server).
  • Phase 2 (NPI) — Copyable command and notes for training the NPI-40 model used by NPD Watch.
Fix

GPS tracking option removed

The GPS tracking option and admin GPS export have been removed from the product. Admin user management no longer includes GPS-related controls or location data.

Improvement

Communications Wizard: email-style Inbox, Sent, and reading pane

The Communications Wizard now uses a familiar email-client layout for easier scanning and reading.

  • Inbox, Sent, All tabs— Switch between messages from your partner (Inbox), messages you sent (Sent), or the full thread (All). Inbox shows an unread count when you have messages you haven't read yet.
  • Message list and reading pane — A list of messages with sender, preview, and date; click one to read the full message in the reading pane. Unread messages are marked with a dot and bold sender.
  • New message— A clear "New message" button opens the compose section to write and send.
Improvement

Communications Wizard: compact options and grouped writing tools

Expiration options (Valid for, Max opens, Expires on) are now in a single compact row. After sending, the share-link card is clearer with a short description. Writing tools (AI suggestions, boundaries, Scriptures, structure tips, suggested for you) are grouped under one "Writing tools" section to reduce clutter.

On large screens, the conversation thread and the compose (or preview) area appear side by side for an email-style read-and-write layout.

Improvement

Communications Wizard: clearer layout and secure link-only emails

The Communications Wizard page and partner notification emails are improved for usability and privacy.

  • Layout— Conversation and Compose are now clearly separated with section headings; your messages align right and your partner's left; expiration options are grouped; and the share-link options after sending appear in a clear card.
  • Emails — Notification emails to your partner (new message or link shared) now contain only a short line and the link to open the thread in the app; no message content or preview is ever included in the email for security.
Improvement

Devotion Connect: more reliable daily generation

Daily devotionals are now generated more reliably when the AI occasionally returns unescaped line breaks in its response. The service sanitizes control characters before parsing so Devotion Connect pregenerate and on-demand generation succeed consistently.

Fix

AI Chat: fixed send message failing with transaction error

Sending a message in Universal AI Chat could sometimes fail with a database transaction error. The backend now recovers cleanly from context-loading errors so your message is sent and the conversation continues normally.

Improvement

Dashboard: important items first, compact statistics

The dashboard now puts the most useful content at the top and uses less space for stats.

  • Quick Access first — Goals, Chat, Reflections, Check-ins, Progress, and other tools appear at the top so you can jump in right away.
  • Suggested Next Steps & Continue Your Journey — Right below Quick Access so you see what to do next and your active goals and recent activity.
  • Compact Statistics — Goals, reflections, and sessions are shown in one short bar instead of five large cards. Impact, Readiness, and Communication sections follow below.
Improvement

Bible auto-suggest: one widget, refresh, and more verses while creating

Bible verse suggestions are simplified and more useful when linking verses to goals or reflections.

  • Single Bible insights widget — One consistent widget everywhere (chat, goals, reflections, check-ins) with a Refresh button.
  • VerseLinker— While creating a goal or reflection you now get up to 3 suggested verses (instead of 1). A "Refresh" button fetches new suggestions.
  • Content-based suggestions — When suggesting verses from your text, you can use your preferred Bible translation (e.g. NIV, ESV). Fewer duplicate API calls when typing.
  • Verified verse text — Suggested verses now use authoritative text from your chosen translation instead of AI-generated wording, so references match your Bible.
  • Streamlined prompts — Activity-based suggestions use a tighter prompt for faster, more consistent results.
New

Partner visibility: activity summary and shared Safety Check reports

Couples Connect partners can now see limited, admin-controlled information. Admins turn these on in Admin → Settings → Partner visibility.

  • Activity summary— When enabled, you see a card: "Your partner recently used: Safety Check (2 days ago), Communications Wizard (1 day ago)" (tool names and dates only, no report content).
  • Shared reports— When enabled, you can "Share with partner" on a Safety Check report; your partner sees it under "Shared with you" on the Couples page and can open it in-app.
Improvement

Dashboard self-learning: sections, wizard groups, and quick return

The dashboard now learns from your usage and reorders itself so your most-used areas appear first. New personalization features help you get back to work faster.

Usage-based ordering

  • Section order — Dashboard sections (Personal Growth, Safety Check, Relationship Tools, Wizards, etc.) reorder based on how often you use them
  • Wizard group order — Wizard groups (Analyze, Decide, Draft, Reflect) also reorder by usage
  • Quick actions— "Find Your Tool" is always first; remaining slots show your most-used tools

Quick return and onboarding

  • Quick return — A new section on the dashboard shows your last 3–5 visited routes so you can jump back to where you left off
  • Onboarding focus— When you first sign up, "What do you want to focus on first?" in the Welcome modal highlights the matching Quick action card with "Start here"
  • Segment-aware welcome— The Welcome modal says "First time here?" for new users and "Welcome back!" for returning users
Improvement

Dashboard layout: actionable content first, plan collapsed

The default dashboard section order now leads with actionable content—Statistics, Impact Analysis, and Communication Patterns appear at the top. Your Plan is collapsed by default (you check it once, not every visit). Suggested Next Steps and Continue Journey remain pinned to the bottom.

Improvement

Find Your Tool: simpler layout and better empty state

The Find Your Tool page (Dashboard → Find Your Tool) has a cleaner layout with shorter intent labels and a clearer empty state when no tools match your search.

New

Admin: Invite codes page

Administrators can now create and manage invite codes from Admin → Invites. Invite codes let you control who can register for the platform.

Improvement

Service reliability, performance, and accessibility

Infrastructure and quality improvements across the platform.

  • Service auto-recovery — The production frontend service now automatically restarts after any termination
  • Performance outlier guards — Web Vitals outliers are discarded and capped so one slow load does not skew your performance averages
  • Admin performance page — Performance rating is derived from averages instead of a stored value, so it is always current
  • Reduced motion — Michael–Emily Mail and other animated components respect the prefers-reduced-motion accessibility setting (WCAG 2.1)
Improvement

DSM-5-TR lens: proper criteria mapping and improved Bible evaluation

The DSM-5-TR lens on Safety Check reports now maps additional patterns (e.g. Hot-and-Cold, Intermittent Reinforcement) to relevant criteria and always shows the "Relevant criteria" section. Bible evaluation reports correctly attribute statements to the other person's messages.

  • DSM-5-TR criteria mapping — Expanded mapping so more behavioral patterns connect to DSM-5-TR criteria in the lens section
  • Bible evaluation attribution— The overall summary and confidence notes now consistently refer to the other person's messages, not yours
  • Pastor's Lens — Uses the exact relationship label you entered for consistent, clear language
  • Lens disclaimer — Each lens section now states it is an interpretive summary, not a definitive assessment
Improvement

API client refactor: modular, testable API layer

The frontend API client has been refactored from a single large file into focused modules (couples, messages, friends, communications-wizard, prayer-wizard, michael-emily-mail, longitudinal, online-status, universal-chat, and more). Each module has its own types and unit tests, making the codebase easier to maintain and extend.

Improvement

Test coverage: 400+ tests across 45 suites

Automated test coverage expanded significantly: over 400 tests across 45 test suites now cover hooks, API modules, error handling, accessibility, end-to-end flows, and component behavior. New tests include useNetworkMonitor, useReferrals, useGoals, useReflections, useSubscription, useSessionIdleSettings, useFriends, useStreaks, and all refactored API modules.

Improvement

Deploy pipeline: rollback on failure

The production deploy script now automatically rolls back if the copy or build step fails. It restores the database, environment file, and previous frontend build from backup so production is never left in a broken state after a failed deploy.

Improvement

Session idle auto-logout and security

When your session is idle, a warning appears. If you do not extend the session within 60 seconds, you are automatically logged out. This keeps your account secure when you step away.

New

Safety Check: Discuss with AI Coach

After completing a Conversation Safety Check, you can now click "Discuss with AI Coach" to open an AI Chat session that already has your full safety report and conversation as context. The AI Coach can help you process the results, explore next steps, and work through what the report means for your situation.

Improvement

Import: more conversation formats supported

The conversation importer now handles additional export formats so more real-world conversation files import correctly.

  • UTC format— "Date Time UTC - Name: message" (common in some exports) is now parsed correctly
  • .log files — Files with a .log extension are treated as plain text
  • CSV/JSON encoding — UTF-8 BOM encoding is handled automatically
  • "I am" sender selection — When the importer detects multiple senders, you can select which one is you from a dropdown
Improvement

Michael–Emily Mail: delete confirmation, offline handling, and accessibility

Michael–Emily Mail now uses an in-app confirmation when removing a letter, respects offline state, and improves keyboard and screen-reader use.

  • Remove letter — Removing a letter so you can redraft now opens a confirmation dialog instead of a browser prompt; Cancel and Remove letter buttons are clearly labeled.
  • Offline— When you're offline, Send letter and Send reply are disabled and a short message explains that sending requires an internet connection.
  • Focus and keyboard — After sending a letter or reply, focus moves to the letter view. The right-click verse suggestion menu can be used with the keyboard (focus moves to the menu; Enter inserts, Escape closes).
Improvement

Michael–Emily Mail: spell check, auto-correct, and Bible verse suggestion

When you write or reply in Michael–Emily Mail, you now get spell checking, auto-correct, and a Bible verse suggestion that works like a spell checker.

  • Spell checker — Subject and message fields use the browser’s built-in spell check (red underlines, right-click to correct).
  • Auto-correct — Common typos (e.g. teh → the, dont → don’t, becuase → because) are fixed when you leave the field.
  • Bible verse suggestion — As you type, the most relevant verse appears in a compact bar under the message (like a spell-check suggestion). Right-click in the message to insert the suggested verse.
Fix

Dashboard and admin: correct mail icon for Invite Partner and Lead Management

The Invite Partner card on the dashboard and the Lead Management card on the admin dashboard now show the mail icon (📧) instead of the text "Mail", matching other dashboard cards. Michael–Emily Mail read receipt tooltips were updated for clarity.

Improvement

Michael–Emily Mail: access from any linked account

Partners using Michael–Emily Mail can now open and use mail from any of their linked accounts. You no longer need to be on the primary linked account to read or manage shared mail.

Improvement

Mobile layout for chat and mail; admin Safety Check upload

Layout and usability improvements for smaller screens and a new admin tool for Safety Check uploads.

  • Dashboard chat and Michael–Emily Mail — Mobile layout fixes so chat and mail views behave correctly on narrow viewports
  • Admin: Safety Check upload — New admin page to upload and run Safety Check for support or internal use
Improvement

Safety Check report language: clearer, direct, and trauma-informed

Conversation Safety Check reports now follow stricter language guidelines so they stay helpful and honest without pathologizing. Risk and severity reasoning use clear Observed vs Interpretation framing where it helps; analysts describe behaviors and expressed distress instead of diagnostic labels; and the tone stays direct about risk without softening important concerns.

Fix

Safety Check Step 1: correct icons for Email Import and Safe Chat Storage

On Conversation Safety Check Step 1 (Add Conversation), the Email Import and Safe Chat Storage options now show the correct icons (envelope and speech bubble) instead of the text "Mail" and "Chat" in all designs (Wizard, Cards, Minimal, Guided).

Fix

Universal AI Chat MCP tools: only run for configured servers; clearer errors

When the AI or the system tried to run MCP tools with invalid or topic-like names, you could see errors like "MCP server X not found in database." That is fixed.

  • Known servers only— Tool requests are only executed for servers that are configured and enabled in Admin → MCP Servers. Other requests are skipped so you never get database or "not found" errors from them.
  • User-facing errors— If a tool fails for availability or configuration reasons, the chat now shows "This tool is not available" instead of raw technical messages.
Improvement

Safety Check & import: rate limit message, paste limit, and splitting options

Several improvements for conversation import and Safety Check.

  • Rate limit— When you hit the upload/Safety Check limit, the message now says how long to wait (e.g. "You can try again in 12 minute(s)") and the limit is 20 runs per hour (was 10).
  • Pasted text — Maximum paste size for Safety Check and Bible evaluation is now 2 MB (was 500 KB). Larger conversations still use file upload.
  • Import splitting— On Dashboard → Import, when running Safety Check on sessions, you can choose "Recommended" (by size) or "2 parts", "3 parts", "4 parts", or "5 parts" per long conversation.
Fix

Import: two-sided conversation when two senders but no &quot;me&quot; label

If you uploaded a conversation with two distinct people (e.g. you and a coworker) but neither name was recognized as "me", the import could show "This import does not have messages from both people."

The importer now detects when there are exactly two senders and assigns one as you and one as the other person so the session is two-sided. You can still use "Which person are you?" to correct who is who for the Safety Check report.

Improvement

Conversation import: Safety Check / iPhone-style and two-line formats

The conversation importer (SMS/text paste for Safety Check and AI Chat) now correctly parses more export formats so messages and senders are not mis-split.

  • Name (10:05 AM): message— Single-line "Name (H:MM AM/PM): message" or "Name (HH:MM AM/PM): message" is parsed as one message; the colon in the time no longer splits the line incorrectly
  • Two-line header + message— Lines like "Name (10:20 AM)" or "Name (10:20 AM):" with the message on the next line are now recognized and combined into one message
  • Format 3 (Name: Message)— Prefer splitting on ": " (colon-space) so "Name (10:05 AM): message" is not split at the time colon; time fragments and mis-split sender names are skipped
Improvement

Offline handling: global banner and disabled send/analyze when offline

When you're offline, the app now makes it clear and prevents sending or analyzing until you're back online.

  • Global banner— A banner at the top of every page says "You're offline" and that some features may not work until connected
  • AI Chat (Universal)— Message input shows "AI responses require an internet connection" and the Send button is disabled when offline
  • Dashboard Chat — Same message and disabled Send when offline
  • Safety Check— "Safety analysis requires an internet connection" and the Analyze for safety button is disabled when offline
Improvement

Guided cognitive rewiring session: saved history, chart, and session details

The 8-step Guided session (Dashboard → Therapeutic → Guided session (8 steps)) now saves each completed session to your history and lets you review past sessions and certainty over time.

  • Past sessions — Completed sessions appear in an expandable list with date, belief summary, and certainty before → after
  • View details— Click "View" on any past session to see the full flow: emotion, belief, facts, interpretations, alternatives, certainty, accountability, balanced statement, and what you learned
  • Certainty over time — Averaged summary line and a bar chart (before vs after per session, last 12 sessions) to see calibration over time
  • Romantic/relationship prompts — Checkbox adds optional prompts at the emotional awareness step (e.g. imperfect but not malicious; pattern vs single incident)
  • From the Therapeutic hub, View session history opens the Guided session page with Past sessions expanded
  • Export (CSV) — Download your session history (date, belief, certainty before/after, emotion) from the Past sessions section
New

Conversation Safety Check: Bible, Pastor's Lens, and Law (Iowa/federal) lenses

When you run a Conversation Safety Check, you can optionally include up to three "lenses" in the same run: Bible evaluation, Pastor's Lens summary, and Law evaluation (Iowa and federal). Results appear in separate sections on the report and in exports.

Bible evaluation

  • Evaluates the other person's words against Scripture (lying, slander, malice, rage, manipulation, etc.)
  • Categories, Bible references, and quoted examples—for reflection and pastoral preparation only

Pastor's Lens summary

  • Short pastoral summary (2–4 sentences) based on the Bible evaluation; for reflection only

Law evaluation (Iowa/federal)

  • Flags potential concerns under Iowa Code (e.g. harassment, stalking, threats) and federal law
  • For reflection and possible attorney referral only; not legal advice

On the Safety Check page, check the optional lens boxes before clicking Analyze. Lenses are included in shared report links and in Download as text, CSV, and Print/save as PDF.

Improvement

Safety Check: relationship required and comparison scoped by relationship

Safety Check now requires you to select a relationship type (e.g. Ex-partner, Mom) and enter a name or label for the other person (e.g. first name, Ex 1). This lets us compare results to your recent checks for this relationship only and show trends per person.

  • "Compared to your recent checks" is based on your last 30 runs for this relationship, not all runs
  • Use the same name each time for the same person so trends stay accurate
  • A one-time data reset was applied: previous safety check reports and share links are no longer available; run a new check to generate a report
Improvement

Safety Check: past relationship context and expanded relationship options

Safety Check reports now use your history with the same relationship when available, and the "Your relationship with the other person" dropdown has many more options.

Past relationship context

  • When you run a check for a relationship you've analyzed before, the report can reference your past checks (count, baseline severity, trend)
  • You may see "This analysis considered your past safety checks for this relationship" and a "Compared to your recent checks" section when severity or patterns differ from recent runs

Relationship dropdown

  • New options: Son, Daughter, Child, Grandmother, Grandfather; Brother-in-law, Sister-in-law; Stepfather, Stepmother, Stepson, Stepdaughter; Cousin; Ex-partner, Ex-spouse; Coworker, Boss, Supervisor, Roommate, Neighbor
  • Clearer placeholder ("Select relationship…") and "Other" field (e.g. Cousin, Coach, Landlord)
Improvement

Reflections: edit and delete

You can now edit or delete existing reflections from the Reflections list (Dashboard → Reflections).

  • Edit: update prompt, response, or AI-generated insights (linked verses stay the same)
  • Delete: remove a reflection after confirming
  • Edit and Delete appear on each reflection card when you have at least one reflection
Fix

Chat and dashboard stability

Dashboard chat and layout fixes so the experience stays smooth while you read or stream messages.

Chat page

  • Chat no longer jumps when you hover over messages or while responses are streaming
  • Message action toolbar and timestamps overlay without shifting layout
  • Auto-scroll only when a new message is added or loading state changes

Performance and reliability

  • Bible chapter, bookmarks, and memorization endpoints are faster (caching and background processing)
  • Deploy script waits and retries so the backend is active after restart
New

Therapeutic module: hub, chat, and exercises

A dedicated Therapeutic hub (Dashboard → Therapeutic) with chat and structured exercises.

  • Hub: Progress summary and quick access to Therapeutic Chat and six exercises (Schema Work, Empathy Training, Affect Labeling, DBT: TIPP, STOP, DEAR MAN)
  • Therapeutic Chat: Reflective conversation with optional defense detection; support resources shown when relevant
  • Exercises: Step-by-step flow (Back / Next / Complete) with toasts and return to hub on completion
Fix

Clarity and logging fixes

Resolved a runtime error that could occur on some pages (Clarity/page-tagging) and cleaned up duplicate logging.

  • Page-type tagging for analytics moved so it no longer causes "reading 'call'" errors
  • Backend and frontend logging simplified so messages are not duplicated
Improvement

Dashboard Quick actions and security

Dashboard home and account menu are easier to use; production security is stricter.

  • Quick actions row (top 6 by usage) at the top of the dashboard
  • Account menu: Preferences and Reset password grouped under "Advanced"
  • Production backend will not start with a default secret key; CORS warning when using a permissive origin in prod
New

Goal progress reminders and Bible Research history

Gentle reminders when goals go quiet, and Bible Research keeps conversation history.

  • Goal reminders: In-app (and optional email) nudge when you have active goals with no progress in 5+ days; respects notification preferences, once per 24 hours
  • Bible Research:Sidebar shows conversation history; "New conversation" and "Close conversation"; sessions filtered by "Bible Research"
Improvement

Couples: full-page views and event delete/reject

Every Couples feature now has a dedicated page from the Couples Overview Quick Actions, and shared calendar events can be deleted or rejected.

Dedicated Couples pages

  • Milestones, Calendar, Health, Memories, Love Languages, and Gratitude each have a full-page view (Dashboard → Couples → Quick Action)
  • Same widgets as on the Connection and Growth tabs, with a back link and clear titles

Shared calendar events

  • Upcoming events: Reject (remove from calendar) or Delete (remove for both partners)
  • Past events: Delete to remove from the list
New

Fight Room context, Safety Check & Attachment Type, Couples Milestones & Calendar

New ways to bring conversation context into the Fight Room, clearer "select both parties" flows for Safety Check and Attachment Type, and new Couples pages.

Fight Room: past conversation context

  • Open the "Past conversation context" panel to paste a conversation or load from Safe Chat Storage
  • Select who you are and who the other person is (pill buttons when two participants are detected)
  • Your first message in the session can include this context so the AI moderates with the real exchange in mind

Safety Check & Attachment Type Wizard

  • Safety Check: paste or upload a conversation, then select both parties (you and the other person) before analysis
  • Attachment Type Wizard: requires a two-sided conversation; clearer guidance and validation
  • Shared participant parsing so both features recognize "Name (9:26 PM): message" style text consistently

Couples: Milestones & Calendar

  • New Milestones and Calendar entries on the Couples Tools grid (Dashboard → Couples)
  • Quick access to relationship milestones and shared events

Docs & in-app copy

  • Features, About, and FAQ updated with Safety Check, Communications Wizard, Prayer Wizard, Messages, Wizards, and Fight Room
  • Help and navigation docs aligned with current product
Improvement

Fight Room: dark mode and saved sessions

Couples Fight Room (Dashboard → Couples → Fight Room) now supports dark mode and clearer saved-session handling.

Dark mode

  • Sidebar and conflict details follow your theme
  • Chat bubbles and message input use dark-friendly colors when dark mode is on

Saved sessions

  • Session labels are human-readable (e.g. date and topic) instead of raw IDs
  • Clear empty state when you have no saved sessions yet
New

Changelog page is here

We've added a dedicated changelog so you can follow the latest improvements and updates to Emily's Growth Portal.

What's included

  • Changelog section with date, badge, and full entry body
  • Consistent navigation from About and Features
  • Clear structure for future release notes
Improvement

Dashboard preferences and import flows

Improvements to how your dashboard behaves and how you bring conversation data into the platform.

Dashboard preferences

Your preferred dashboard view and layout are now remembered so the dashboard opens the way you left it.

Import and AI persona

  • Import page: upload one or more message files for analysis and Past imports
  • AI Chat: upload an SMS file to build an AI persona from a conversation style
  • Create persona from a completed import, or save a persona analysis as an import
  • Clear options for "Is this export from your phone or your partner's?"