New features, improvements and fixes in each TherapyCRM release.
v0.2.46 ·
Production Import/Export, Timezone, and E2E Reliability Release
Production release for the import/export and timezone improvements, including expanded CSV workflows for leads, staff, clients, and treatment plans, safer client CSV concurrency handling, timezone fixes for scheduling flows, and a hardened Kubernetes Playwright validation pipeline.
New features
Leads now support CSV import/export workflows for bulk operational updates with server-side validation and tenant-aware safeguards
Staff management now supports CSV import/export workflows for roster maintenance and administrative review
Client CSV import/export has been expanded with optimistic-concurrency checks so stale spreadsheet uploads are rejected before overwriting newer data
Treatment plan workflows include export-ready data paths and route coverage needed for production reporting and review
Production deployment is validated by the Kubernetes Playwright E2E workflow against the PR preview service before promotion
Improvements
Scheduling and reminder flows now preserve appointment timing more consistently across timezone-sensitive code paths
Import/export endpoints enforce role and tenant boundaries consistently across leads, staff, clients, and treatment plans
CSV workflows use safer parsing, validation, and error reporting so admins can fix upload issues before records are changed
Playwright Kubernetes CI now installs required runner tools, uses the correct preview service URL, preserves shard indexes during manifest rendering, and publishes a multi-architecture test image for the mixed datainn-k3s cluster
Bug fixes
Fixed Kubernetes Playwright checks failing before execution because kubectl, yq, and envsubst were missing from the runner
Fixed Playwright test jobs targeting a stale staging service instead of the PR preview service
Fixed GHCR image pull failures caused by uppercase image names, missing pull secrets, and mismatched deployed image tags
Fixed exec format errors on arm64 k3s nodes by publishing linux/amd64 and linux/arm64 Playwright test images
Fixed stale client CSV upload handling so outdated rows no longer overwrite fresher client records
v0.2.44 ·
Clients CSV Import/Export & Role-Guarded Deletes
Adds a round-trip CSV import/export for bulk client updates with full row-level validation, restores role-based protection on client delete/create, and fixes a lead edit regression that blocked saves for formatted phone numbers.
New features
Clients page has a new Import / Export dropdown that lets managers export the client list to CSV and bulk-update records by uploading a modified copy
CSV export uses a stable, import-friendly schema (UTF-8 with BOM for Excel, ISO-8601 dates, raw enum values) and respects the current branch and status filters
CSV import validates every row before writing: required fields, email/phone format, enum values (gender, status, relationship, contact method), date sanity, zip/country format, duplicate ids, cross-tenant protection, and branch ownership
Import supports dry-run and force modes; stale uploads are rejected with an optimistic-concurrency check against the row's last-updated timestamp
Improvements
Client edit screen now loads guardians and emergency contacts alongside the rest of the record so all tabs populate end-to-end
Lead and Client phone fields accept common formatting (spaces, dashes, parentheses, dots) so existing records remain editable without reformatting
Bug fixes
Client edit: primary guardian name and relationship now appear on the Guardians tab (previously only visible on the list card)
Client edit: removed the spurious 'Failed to load funding programs' toast caused by a stubbed endpoint
Client create: the New Client intake form again accepts Canadian postal codes and the full set of intake fields (guardians, emergency contacts, consent) that were being stripped by an overly strict validator
Lead edit: Save Changes now works for leads whose phone numbers contain parentheses, spaces, or dashes
v0.2.43 ·
Client & Lead Edit Fixes: Guardians, Funding Programs, Phone Validation
Maintenance release that restores full data population on the Client edit screen, clears the funding programs load error, and unblocks Lead edits for records with formatted phone numbers.
Improvements
Client edit screen now loads guardians and emergency contacts for every tab, so parent/guardian details are visible and editable alongside the rest of the record
Lead and Client phone validators accept common formatting characters (spaces, dashes, parentheses, dots) so stored phone numbers remain editable without manual reformatting
Bug fixes
Client edit: Guardians tab now populates the primary guardian name and relationship shown on the client card (previously empty on the edit form)
Client edit: removed the spurious 'Failed to load funding programs' toast caused by a stubbed endpoint returning 400
Client create: New Client intake form now accepts Canadian postal codes and the full set of intake fields (guardians, emergency contacts, consent) that were being stripped by an overly strict validator
Lead edit: Save Changes now works for leads whose phone numbers contain parentheses, spaces, or dashes (e.g. '(647) 865-3088')
v0.2.42 ·
Staff CRUD Fixes, Richer Client Detail, Lead UX Polish
Maintenance release that unblocks staff edits, retains lead history after client conversion, and improves lead/client visibility across the pipeline.
New features
Column sorting on the Leads list (name, status, score, source, assigned, last contact)
Communications, Tasks, and Documents tabs on the Client detail page that retain data from the lead stage
Primary guardian name and relationship shown on client cards and list rows
First Enquiry and Inactive/Discharged dates on the Client Since card
Improvements
Client detail consolidated: Emergency contacts and guardians moved into Contact Information; Treatment Plans moved onto Overview; Therapy tab removed; tabs spread corner-to-corner
Clients page now loads all clients (previously capped at 20 of 68) and defaults to Active status
Family leads no longer repeat the household name on each child card
Staff list excludes inactive members by default; UI passes includeInactive=true so the Active/Inactive filter continues to work
Staff detail endpoints now return dateOfBirth, employmentType, specializations, and branchPreferences so edits round-trip correctly
Bug fixes
Staff edit wizard no longer blocks on Next when date of birth is missing — DOB is now optional
Saving blank DOB no longer fails with a date-parse error on the server
Staff updated_at timestamp now bumps on save so the UI reflects the most recent change
Missing Specializations warning icon clears immediately after saving specializations
Lead-to-client conversion keeps the prospect’s own last name instead of inheriting the parent’s, so converted children appear in client search
Client status updates (active/inactive/discharged) now actually persist — the field was being silently stripped during validation
Client Since card shows Inactive Since / Discharged On when a client’s status changes
v0.2.40 ·
CRM Review: Configurable Lead Statuses, Household Grouping, Job Scheduler
Major release addressing CRM review feedback. Introduces configurable lead pipeline statuses, household grouping for multi-child families, always-visible prospect/child fields, and automated lead scoring.
New features
Configurable lead pipeline statuses — each practice can customize their own stages
Household grouping — link related family members together across leads
Prospect/client information always visible on lead views and forms
Lead scores displayed on pipeline cards with color indicators
Automated lead scoring on creation and status changes
Daily scheduled lead scoring for all practices
Lead status management with delete protection
Admin tools for scheduled job management
Improvements
Pipeline view dynamically reflects configured statuses and ordering
Lead filters and bulk actions updated for custom statuses
Status colors and labels are now configurable
Lead forms reorganized for better visibility of client information
Household members shown inline when selecting an existing household
Improved confirmation dialogs throughout the application
Better spacing and layout on lead detail pages
Bug fixes
Fixed clients page not displaying converted leads
Fixed certain pipeline statuses not appearing after configuration
Fixed converted clients not visible after lead conversion
Fixed admin access to job management features
v0.2.39 ·
CRM Review: Configurable Lead Statuses, Household Grouping, Job Scheduler
Major release addressing CRM review feedback. Introduces per-practice configurable lead pipeline statuses, household grouping for multi-child families, always-visible prospect/child fields, automated lead scoring, and a centralized job scheduler with Redis distributed locking for production.
New features
Configurable lead statuses per practice with settings UI at /practice/lead-statuses
Household grouping for leads — autocomplete with member preview, pipeline grouping, detail page member links
Prospect/client fields always visible on lead detail, create, and edit forms (disabled when contact=client)
Prospect name and age shown on pipeline cards with color-coded lead score bars
Centralized job scheduler with 7 registered jobs (lead scoring enabled, others ready to activate)
Lead scoring on creation (rule-based initial score) and on status change (async AI scoring)
Daily batch lead scoring via GAE cron with Redis distributed locking
Admin API for job management: GET/POST /api/admin/jobs
Lead status settings with delete validation — blocks deletion when leads exist with proper dialog message
Production SQL fix script for data corrections (Samar Rizvi, household assignments, legacy statuses)
Improvements
Lead pipeline dynamically renders stages from configured statuses with correct ordering
Lead list status filter and bulk actions use dynamic statuses
Lead detail page uses configurable status colors and names
Reordered create and edit lead forms — prospect section moved above address for visibility
Added contactIsClient toggle to edit lead form (was missing)
Fixed spacing between Prospect/Client and Guardian cards on detail page
Delete confirmation uses proper AlertDialog instead of browser alerts
Household members shown inline on create/edit forms after selecting existing household
CI/CD updated to deploy cron.yaml alongside app for GAE cron scheduling
Environment safety guard — scheduler only runs intervals in production
Bug fixes
Fixed clients page not showing converted leads (data extraction for flat array response)
Fixed 500 error on clients API caused by missing household_name column before migration
Fixed missing legacy lead statuses (lead_nurturing, lead_cold, prospect_proposal etc.) in configured defaults
Fixed Samar Rizvi (id=109) not showing on clients page due to is_active=false after conversion
Fixed admin role check to handle roles array instead of single role field