Changelog¶
All notable changes to OktaPT will be documented in this file.
[2026-03-16]¶
Added¶
- Admin Panel — User Management: Admins can now view, search, filter, and delete users across all tenants from a dedicated management page. Doctor accounts can be approved or unapproved via toggle switches. Includes sortable columns and a safety confirmation modal for deletions.
- Admin Panel — Create Admin: Admins can create new admin accounts directly from the admin area with email and password.
- Admin Panel — Feature Flags UI: Admins can now toggle per-tenant feature flags from a visual dashboard instead of updating the database directly.
- Admin Panel — Access Guardrails: Admin routes are now protected by centralized middleware on both frontend and backend, replacing per-controller authorization checks.
Fixed¶
- Mobile HEP Session Loading: The doctor's HEP management view now automatically reschedules overdue patient workouts before displaying sessions, preventing stale past-dated workouts from appearing. Default session window increased from 5 to 10 days.
[2026-03-15]¶
Added¶
- Mobile HEP Management: Doctors can now view and edit patient home exercise plans directly from the mobile app. Plans are organized by session (day), with inline dosage editing for sets, reps, duration, and weight. An AI composer lets doctors describe changes in natural language and preview AI-suggested modifications before applying them.
- Gated by the
therapistMobileHepManagementtenant feature flag
Fixed¶
- Doctor Messages: Fixed an issue with doctor message delivery on mobile.
[2026-03-13]¶
Added¶
- Mobile Exercise Management: Doctors can now browse, search, filter, create, edit, and delete exercises directly from the mobile app. The new Exercises tab includes tag-based filtering with AND/OR mode, segment views (All Exercises, My Private, Favorites), video and photo capture via device camera, and favorite toggling with haptic feedback.
- Gated by the
therapistExerciseManagementtenant feature flag
[2026-03-12]¶
Changed¶
- API Modular Architecture: Refactored the backend from a monolithic entry point into a modular structure with a
createApp()factory, dedicated database client module, and singleton service management. Legacy routes (5700+ lines) are extracted to a separate module. External client modules (OpenAI, S3, Telegram) use lazy-initialized singletons. CORS origins are now configurable via environment variable.
Added¶
- API Test Infrastructure: Added Jest-based test suite with Prisma mocking, supertest helpers, JWT token generation for authenticated tests, and fixture data. Initial test coverage includes auth middleware, tenant middleware, messages, user authentication, and workouts.
[2026-03-09]¶
Added¶
- Doctor Mobile Patient Onboarding: Doctors can now invite and onboard new patients directly from the mobile app. The onboarding form collects name, email, and date of birth, with optional therapist assignment when the feature is enabled. After sending the invite, doctors can generate a QR code for in-clinic patients or share the invite link.
[2026-03-04]¶
Changed¶
- Mobile Onboarding Polish: Improved the mobile AI workout builder onboarding flow with tenant-themed colors, animated input focus states, haptic feedback on back buttons, redesigned plan preview cards with day badges, a loading spinner during AI analysis, and styled follow-up question cards. Also moved several hardcoded strings to translation files.
[2026-03-03]¶
Added¶
- RTM Time-Based Billing in Dashboard: Time-based billing codes (98979, 98980, 98981) now appear alongside workout-based codes in the unified Billable Codes table. The billing store fetches both tracks in parallel, and status updates for time records automatically sync across all related codes for the same patient and month.
- Streak Recalculation Script: New admin tool (
npm run recalculate-streaks) that replays all patients' full workout history to recompute streak values. Runs in dry-run mode by default; pass--applyto write changes. Processes users in batches and reports a detailed before/after diff.
Fixed¶
- Streak Week-Transition Logic: Fixed a bug where the streak evaluation could double-process a week boundary crossing, potentially breaking streaks that should have survived. Also fixed a case where exceeding rest days in the current week (after a valid week transition) wasn't properly detected.
[2026-03-02]¶
Changed¶
- Mobile AI Onboarding Experience: The AI-powered patient intake flow on mobile now shows real-time visual progress as the AI processes responses and generates workout plans. Instead of raw streaming text, patients see an animated stage checklist (analyzing, evaluating, building synopsis, generating plan), rotating contextual tips, and content sections — synopsis, plan overview, goals, and individual workouts — that appear progressively as they're generated.
- Plan sections stream in as partial data, so patients can start reading the synopsis while workouts are still being built
- Follow-up questions appear individually as they become ready, rather than all at once when generation completes
[2026-02-27]¶
Added¶
- Personalized Exercise Videos: Doctors can now record custom exercise demonstration videos for individual patients from the mobile app. Select a patient, search for an exercise, and record up to 2 minutes of video. The personalized video automatically replaces the default exercise video in that patient's workout playback once processing completes.
- Videos are uploaded to S3 and transcoded to Cloudflare Stream in the background
- When a newer video is recorded for the same patient and exercise, the previous one is automatically deactivated
- Gated by the
therapistPersonalizedExerciseVideotenant feature flag - Exercise Auto-Canonicalization: When a therapist creates a new exercise, the system automatically checks for duplicates using both exact name matching and AI-powered fuzzy matching. Duplicate exercises are merged transparently -- all workout references, tags, favorites, templates, and personalized videos are repointed to the canonical exercise.
- Stage 1: fast exact match on normalized name (lowercase, trimmed, collapsed whitespace)
- Stage 2: AI fuzzy match (gpt-4.1-mini) for near-duplicates like abbreviations, plurals, and word order variations, with a 93% confidence threshold
- Full audit trail of all merge and skip decisions
- Gated by the
exerciseAutoCanonicalizationtenant feature flag - Doctor "Manage" Tab (Mobile): Doctors now see a dedicated "Manage" tab in the mobile app for quick access to recently completed clinical assessments with patient name badges.
- In-Clinic Patient Management (Mobile): Doctors can add patients to a session-persistent "in-clinic" list on their dashboard. Each patient card provides quick actions to start a clinical assessment or record a personalized exercise video.
Changed¶
- Mobile App Consolidation: The separate "Clinics" mobile apps (Okta Health Clinics, Otera Health Clinics) have been deprecated. All app store links and redirect pages now point to the main Okta Health and Otera Health apps. Old clinic-specific pages (
/mobile-oktaclinics,/mobile-oteraclinics) automatically redirect to the consolidated pages. - Mobile Feature Flags: The mobile app now fetches per-tenant feature flags from the server on authentication and when returning to the foreground, enabling conditional feature visibility (e.g., personalized video recording) without requiring an app update.
[2026-02-23]¶
Added¶
- Clinical Assessment Patient Assignment: Doctors can now assign completed clinical assessments to specific patients for record-keeping. An "Assign to Patient" button on the results screen opens a searchable patient picker; the assigned patient's name then appears on assessment cards in the dashboard and recent tests list. Supports reassignment and unassignment.
- Clinics with the "All Active Patients" feature enabled see all organization patients in the picker; otherwise only the doctor's directly connected patients appear
Changed¶
- Exercise Query Consolidation: Centralized exercise visibility logic into a shared helper, ensuring consistent filtering (active + public-or-owner) across all exercise-related endpoints.
- Mobile Workout Experience: Reworked the mobile workout screens with loading skeletons, smoother video loading for Kinescope exercises, animated progress bars, redesigned feedback modal, and various Android layout fixes.
- Video player now shows a thumbnail placeholder while loading for all video sources (Kinescope, Cloudflare, YouTube)
- Exercise list and feedback modals converted from RN Modal to inline overlays to fix Android WebView/Camera layering issues
- Extracted shared workout styles into a dedicated styles module
Fixed¶
- Mobile AI Workout Plans: Mobile app AI workout plan endpoints now return exercises from the user's own clinic instead of always querying the default tenant. Previously, non-default-tenant users could receive empty or incorrect exercise lists.
[2026-02-19]¶
Added¶
- Mobile Role Separation: The mobile app now routes patients and doctors through separate screen flows with access control. Patients see workouts, plan management, and messaging; doctors see clinical assessment tools. A RoleGuard component prevents cross-role navigation, and a new shared HTTP client replaces duplicated auth/fetch logic across all services.
Changed¶
- Streak Calculations: Streak logic now uses the patient's device timezone for all date comparisons, preventing issues where late-night workouts could register on the wrong calendar day.
- Streak Days Off: Users can now take up to 3 rest days per week (Mon–Sun) without breaking their daily streak. A 4th missed day in a week breaks the streak. Users who start a new streak mid-week only have days counted from their first workout onward.
- The weekly day calendar now shows rest days in blue (allowed) and missed days in red (exceeded limit), instead of marking all missed days as red.
- A "rest days remaining" indicator appears below the weekly calendar on both mobile and web.
- The web dashboard now syncs the user's timezone on every visit, matching the mobile app's existing behavior.
- Mobile Navigation: Redesigned the mobile tab bar with a floating pill-shaped design, per-tab accent colors, animated indicators, and a compact streak widget in the dashboard header showing daily streak count and a weekly calendar.
[2026-02-16]¶
Added¶
- Clinical Video Assessment (Doctor): Doctors can now record patient movement videos and receive AI-powered clinical analysis. The doctor describes the test, records up to 2 minutes of video, and the system processes it through a multi-stage pipeline: frame extraction, MediaPipe pose estimation with skeleton overlays, biomechanical metric derivation, and a 3-pass GPT analysis (visual, biomechanical, cross-validation). Results include an overall assessment, key findings, recommendations, and a scrollable gallery of pose overlay frames.
- Doctor-Specific Mobile Dashboard: Doctors now see a simplified mobile dashboard with just a "Start Test" button and access to the Profile tab. Patient-oriented tabs (Messages, History) and workout UI are hidden for the doctor role.
- Clinical Video Processing Service: New Python/FastAPI microservice (
clinical-video-service) that handles video frame extraction, MediaPipe Pose landmark detection, skeleton overlay generation, and joint angle metric derivation. Runs in Docker on port 8000.
[2026-02-15]¶
Added¶
- AI Plan Generation — File Attachments: Therapists can now attach images and PDF files alongside their clinical notes when generating AI workout plans. Attached files are sent to the AI model for analysis, enabling richer context for plan generation.
- AI Plan Generation — Assistant Side Panel: After an AI plan is generated, therapists can open a side panel to refine the plan through conversation. Ask the AI to adjust exercises, change difficulty, or modify the plan, and review proposed changes in a comparison view before accepting.
- AI Plan Generation — Drag-and-Drop Attachments: Therapists can now drag and drop files directly onto the notes input area instead of using the attach button.
- AI Plan Editing — Chat File Attachments: Therapists can now attach files directly in the AI assistant chat when refining a plan. Attach a new MRI scan or updated referral mid-conversation via the paperclip button or by dragging files onto the chat panel, and the AI will incorporate the new context into its suggestions.
Changed¶
- AI Plan Generation — Loading Experience: Replaced the streaming text display with a skeleton card UI that shows day cards appearing progressively as the AI generates each workout, providing a clearer sense of progress.
[2026-02-13]¶
Changed¶
- RTM Billing Dates: Bill dates for workout-based and time-based RTM codes now land on the first Sunday on or after the billing period ends, since RTM codes (except 98975) cannot be billed on service days.
- Workout codes (98985/98977): bill date is the first Sunday on or after the 30-day window end
- Time codes (98979/98980/98981): new bill date field set to the first Sunday on or after the calendar month end
[2026-02-12]¶
Added¶
- All Active Patients Dashboard: Therapists can now view all active patients across their entire clinic in a dedicated sub-tab on the doctor dashboard. This feature is controlled per clinic via feature flag.
- Therapist-Patient Assignment: Therapists can now assign patients to other therapists within the same clinic. Available from the "All Active Patients" table (therapist column with quick-assign buttons) and from the patient management modal. During patient invite, therapists can also pre-assign additional therapists. This feature is controlled per clinic via feature flag.
Changed¶
- RTM Billing Insights: Simplified the insights dashboard and projected codes calculator to focus on code counts and trends, removing the expected revenue calculations.
- Date of Birth Input: The three-field DOB input now displays a human-readable date preview below the fields so users can verify the date they entered.
- Cross-Therapist Plan Editing: Any therapist within the same clinic can now edit any patient's workout plan, regardless of which therapist is assigned to that patient.
Fixed¶
- Login & Signup Navigation: Fixed an issue where stale authentication state could persist when navigating to the login or signup pages, which could cause unexpected behavior. The app now clears any leftover session data before showing these pages.
[2026-02-09]¶
Added¶
- RTM Time-Based Billing (CPT codes 98979, 98980, 98981): The system now automatically tracks how much time therapists spend managing each patient per calendar month and generates the appropriate billing codes.
- Time is tracked automatically in the background as therapists view patient details, edit plans, send messages, and use other patient-facing screens
- New "Time Tracking" sub-tab in the In Progress view shows all patients with their accumulated time, progress toward billing thresholds, and projected codes
- Time-based codes appear in the Billable Codes table and Insights dashboard alongside existing workout-based codes
- Therapists can set custom reimbursement rates for each time-based code
- Before marking a time code as billed, therapists must confirm that synchronous communication (phone/video) occurred
[2026-02-05]¶
Changed¶
- Date of Birth Input Redesign: Replaced HTML5 date picker with three separate text input fields (day, month, year) for birthday entry across the platform. This improves mobile usability and provides consistent behavior across browsers.
- Field order is determined by domain: MDY (Month/Day/Year) for US domains, DMY (Day/Month/Year) for international domains
- Auto-advance focus when field is complete
- Input validation on blur with user-friendly error messages
- Leap year handling and invalid date detection (Feb 30, Apr 31, etc.)
Added¶
DOBFieldInputcomponent (components/ui/DOBFieldInput.tsx) - Reusable date of birth input with three separate fieldsuseDateFormathook (lib/hooks/useDateFormat.ts) - Runtime domain detection for date format preferencedateValidationutilities (lib/utils/dateValidation.ts) - Date validation and formatting functions
[2026-02-03]¶
Added¶
- Extended RTM CPT Billing Dashboard. We now show an inprogress and insights tabs. The inprogress tab shows a kanban board of patients grouped by their RTM progress status. The insights tab shows a dashboard of analytics and trends for the RTM billing data.
- Added filtration and sorting to the RTM CPT Billing Dashboard.
[2026-02-02]¶
Added¶
- RTM CPT Billing Dashboard: First version of billing codes dashboard for CPT codes 98975, 98985, and 98977. Therapists can view and manage RTM billing records, mark items as billed or won't bill, and refresh calculations for all tenant patients. Feature is toggleable per tenant via feature flag.
[2026-02-01]¶
Added¶
- Added logging for all interactions with the AI endpoints
Fixed¶
- Edit Plan modal no longer shows "unsaved changes" confirmation when closing without making any changes
[2026-01-31]¶
Added¶
- AI-Assisted Plan Editing: Therapists can now modify patient workout plans using natural language instructions (e.g., "make this workout easier" or "remove all dumbbell exercises")
[2026-01-30]¶
Added¶
- Drag and drop exercise reordering: Exercises can now be reordered within a workout via drag and drop
- Exercise block ordering: Exercises now automatically reposition in the workout list when their block type is changed (e.g., moving from Main Session to Warm Up)