Commit Graph
48 Commits
Author SHA1 Message Date
hz 4bbac27b84 Add freemium access economy and token store 2026-07-27 22:20:21 -05:00
hz 46953ee71a Reach Settings/Profile from the pause menu, with a way back
The pause menu (Escape during a question/CCS/flashcards run) only had
Resume/UI Sounds/Exit Run/Log Out. Settings already has an equivalent
"Interface sounds" toggle, so drop the duplicate from the pause menu.
More importantly, "player" and "ccs_player" hide the entire app shell
(header + sidebar), so there was no way to reach Settings or Profile
at all mid-session - add Profile/Settings buttons to the pause menu to
close that gap.

Navigating there follows the existing return_screen payload
convention (already used by simulation_history/results/review) rather
than inventing new navigation infrastructure: _navigate_from_pause()
remembers current_screen_name and passes it through show_screen's
payload. Both screens show a "Back to session" button when that's
set, and hide it otherwise (including on ordinary non-paused visits).

show_screen() unconditionally resumes the question timer via
_close_app_menu() as a side effect of any navigation, so
_navigate_from_pause() re-pauses it immediately when leaving "player" -
the timer then resumes for real, for free, when the user actually
returns via show_screen(return_screen).

progress_profile.gd rebuilds its whole child tree on every theme
toggle (_rebuild -> _build), which would otherwise wipe the button's
visibility - added _refresh_back_to_session_visibility(), called both
after _build() and from on_show(), so it survives a theme change while
paused.

Flipped tests/web_responsive_test.gd's assertion, which previously
required the pause menu NOT to have a Profile button.

Verified end-to-end headlessly: opening the pause menu from a live
"player" session, navigating to Settings and Profile, confirming
current_question_pause_started_at is correctly paused while away and
resumed on return, confirming the back-to-session button appears only
when reached via pause (not on ordinary nav), and confirming it
survives a dark/light theme toggle on the Profile screen.
2026-07-25 22:30:03 -05:00
hz c1a71b1192 Feature-gate Flashcards to UAT only
Same treatment as Dynamic Questions and CCS Cases: hide the nav
sidebar entry and the dashboard's "flashcards due" review card unless
step3/deployment_environment is "uat".
2026-07-25 00:30:06 -05:00
hz 6df0a88fd4 Feature-gate Dynamic Questions and CCS Cases to UAT only
Both are still in progress and shouldn't be reachable in production
(or local dev) yet - hide every entry point (nav sidebar, the
dashboard's "dynamic concepts due" review card, and the CCS Cases
mode card on the study selector) unless step3/deployment_environment
is "uat", the same setting that already drives the UAT badge. Added
Brand.is_uat_environment() as the shared check.
2026-07-24 23:12:47 -05:00
hz e174b5db15 Return dynamic question runs to dashboard 2026-07-23 13:52:24 -05:00
hz 6a6e703aa4 Fix dynamic questions sidebar icon 2026-07-23 13:19:32 -05:00
hz fcbc288a49 Add data-driven dynamic question mode 2026-07-23 12:33:23 -05:00
hz 8e216eac32 Rebuild CCS case workflow 2026-07-23 04:43:02 -05:00
hz 489b9c3d7c Fix text zoom not actually syncing, and expose it in Settings
Two real gaps meant the account-synced zoom (from the previous
"sync through the account" change) never reached the screen:
_load_cache() updated AccountProfileService.preferences but never
emitted profile_changed, so question_player.gd/ccs_service.gd (already
built and listening before login even happens) never found out a
cached value had loaded. And nothing forced a server refresh
right after login - it only fired if the user happened to open the
profile/progress screen, so a fresh device/session had no path to
the true synced value at all.

main.gd now calls AccountProfileService.refresh() once per login
(not on every silent token refresh) so the real preferences GET
always runs right after signing in, on any device.

Also added Question bank/CCS case text size steppers to the Settings
screen next to dark mode, per user request, reusing the same
AccountProfileService/CCSService plumbing as the in-screen A-/A+
buttons.
2026-07-23 04:37:45 -05:00
hz 3a01e9156c Keep the app sidebar visible on the flashcards study screen
The study screen was still treated as a fullscreen immersive view (like
the question player), hiding the main nav sidebar entirely. The mockup
and the user's request both call for keeping the app's left menu while
studying, with the deck panel living inside the screen alongside it.
2026-07-22 01:20:48 -05:00
hz 09b670d5d4 Close the gap between the flashcards study screen and the mockup
Add real session-history navigation (Previous/Next/Shuffle), compact
side panels, and a segmented progress row to match the mockup layout.
Flashcards now opens straight into Study, with library management
moved into the Options menu ("Manage Flashcards") and Export hidden
from the UI (Import stays). Shuffle is backed by a real, due-before-new
randomized pick on the backend, not a decorative toggle.
2026-07-22 00:43:52 -05:00
hz 70aa425fde Rebuild flashcard study screen from mockup, with real backend-backed stats
Study screen now matches the provided mockup's layout: a "Current
Deck" panel with a circular mastery-progress ring, and a "Spaced
Repetition" panel (New/Due/Learning/Review counts, streak, daily
goal) on either side of the card. Kept the app's real global sidebar
rather than the mockup's own nav, per direction.

Mastery/Streak/Daily Goal weren't tracked anywhere, so this adds real
backend support rather than showing fabricated numbers:
- Mastered = graduated to review state AND FSRS stability >= 21 days
  (FlashcardScheduleStore.MasteryStabilityDaysThreshold), stricter
  than the plain Review-state count
- CurrentStreakDays = consecutive UTC days with a review, computed
  from review-log timestamps in the new pure FlashcardScheduling
  .ComputeStreakDays (unit tested, habit-streak semantics: doesn't
  reset to 0 the instant a new day starts before today's first review)
- DailyGoal/ReviewsToday reuse the account's existing ReviewsPerDay
  setting rather than inventing a new one
Also removes the exit "X" button in favor of the same Escape/pause
menu the question-player flow uses (main.gd's shared app_menu, with
an "Exit Study Session" action), and adds a new circular_progress.gd
reusable ring control plus a real "Options" menu (bury/suspend the
current card) wired to schedule endpoints that had no UI before.
2026-07-21 23:20:14 -05:00
hz 48a8c8361d Add flashcards feature with spaced repetition scheduling
Adds a full flashcards system: FSRS-based scheduling, cloze/basic
card types, CSV import/export, media storage, and study UI, wired
into navigation and the dashboard alongside existing question flows.
2026-07-21 15:08:52 -05:00
hz 17747d96a0 Add isolated UAT and production environments 2026-07-20 20:32:22 -05:00
hz dae3a31b71 Add legal consent and reliable external redirects 2026-07-20 02:16:20 -05:00
hz d176640cff Rebrand app as RanaZe Step 3 Trainer 2026-07-20 00:04:29 -05:00
hz dec5e74aa7 Add Stripe donation flow 2026-07-19 22:26:33 -05:00
hz dacf2b89b2 Implement responsive profile and account data controls 2026-07-19 13:39:15 -05:00
hz 7508d4fe1d Implement persistent review queue 2026-07-19 12:51:24 -05:00
hz 2dcac51452 Add user progress dashboard 2026-07-18 23:45:38 -05:00
hz 2e52a7ea0a Add synced question bookmarks 2026-07-18 23:07:22 -05:00
hz d0bb271b14 Add synced user notes 2026-07-18 22:22:29 -05:00
hz a232e18c46 Add session expiry renewal flow 2026-07-18 15:53:11 -05:00
hz 8c349314ad Refine question toolbar icons and pause menu 2026-07-18 15:37:05 -05:00
hz c8c877a3a5 Reorder header theme and account controls 2026-07-18 15:01:04 -05:00
hz dca09d818f Launch question bank directly from navigation 2026-07-18 14:57:33 -05:00
hz 722d91fe94 Simplify application header 2026-07-17 21:57:21 -05:00
hz fd372532b5 Fix remaining web study mode artifacts 2026-07-16 23:28:19 -05:00
hz ae283c2243 Fix narrow web layouts and loader branding 2026-07-16 23:07:26 -05:00
hz a778a680e0 Redesign exam and CCS experiences 2026-07-16 22:42:03 -05:00
hz c8bfc26645 Implement nested question remediation and review content 2026-07-16 21:46:56 -05:00
hz 6d1787b3eb Redesign study navigation and light theme 2026-07-16 02:37:37 -05:00
hz 0eca0c4cbf Apply MedMind branding and authentication flows 2026-07-16 00:22:22 -05:00
hz aec56f168e Add general app feedback reporting 2026-07-15 20:55:13 -05:00
hz 52d435fa2e Complete CCS results and rating flow 2026-07-15 11:08:13 -05:00
hz 7256f93002 Add interactive CCS case practice 2026-07-15 10:17:53 -05:00
hz 3b946c2bc5 Move simulation history into profile 2026-07-14 21:38:03 -05:00
hz 705f079997 Add functional simulation question review 2026-07-14 17:49:23 -05:00
hz 206a5c0124 Add full-length Step 3 Day 1 simulation 2026-07-14 16:54:11 -05:00
hz abbe6cf9f8 Add persistent light and dark themes 2026-07-14 13:39:42 -05:00
hz f5c5d9f00e Deploy browser pre-alpha 2026-07-14 00:50:17 -05:00
hz 6eae6c9690 Add interface sound feedback 2026-07-11 12:59:17 -05:00
hz 8bd7f5e4e8 Add study selection and account registration flows 2026-07-11 12:39:10 -05:00
hz ad6b3863cc Add wrong answer follow-up prompts 2026-07-11 02:16:01 -05:00
hz c716b16c53 Add server-side ELO ratings 2026-07-11 02:05:43 -05:00
hz 8a86734a0b Track real first attempt question stats 2026-07-11 01:42:18 -05:00
hz e991dccbb2 Add core game retry flow and question stats 2026-07-10 14:05:57 -05:00
hz 277076a245 Initial STEP 3 study game and questions API 2026-07-09 20:50:33 -05:00