v1.0.0-dev.1
Pre-release
Pre-release
1.0.0-dev.1 (2026-06-19)
Bug Fixes
- #86erqa08y clear toasted activity card after session completion (faf73fb), closes #86erqa08y
- #86erqa08y fix toggle active color and persist bundle selection when box filtering (14502c4)
- #86erqa08y refactor to content/gap row pattern for correct centering (707651e), closes #86erqa08y
- #86erqa08y resolved HourSelector overlap issue (018bd5d)
- #86erqa08y verify and optimize Leitner auto-entry in phrase triggers (9a4acf2), closes #86erqa08y
- #86exgqfpu stabilize auth lifecycle and fix logout button (7810302)
- add null check for transcript before updating conversation dialogs and live session record (8c0e95c)
- analytics: align Stripe lifecycle events with the metrics plan (2f8f0e0)
- analytics: fire flashcard_review_started only when a review has cards (914c210)
- cap freemium voice session at server-computed remaining minutes (9337182)
- checkout: don't pass returnUrl to confirm() (session already sets return_url) (9b52103)
- checkout: mount Stripe Elements after render + scroll tall panel (797777d)
- ci: set DASHBOARD_BASE_URL so getSubscriptionDetails resolves a paid tier; revert period diag (0f0d48f)
- correct button click handler in DetailCard component and add max follow-up practice limit in live session instructions (14d3a15)
- correct redirect URI in auth router to remove hash mode for proper token exchange (c8b368c)
- correct routing path for subscription navigation in ProfileButton component (e6a9e7a)
- correct unknown cost percentage and adjust token calculations in live session; ensure accurate cost representation by subtracting cached tokens from total tokens (7407198)
- docker: copy subscription module so frontend build resolves tier types (943572c)
- downgrade @codebridger/lib-vue-components to version 1.16.0 and update ProfileButton component to use computed profilePicture (005a746)
- layout: clip horizontal overflow from decorative page backgrounds (8998654)
- live-session: drop empty parameters from no-arg finish_practice tool #86exr424h (aad0f83), closes #86exr424h
- live-session: freemium card no longer overlaps the voice-minutes line (20dc3bf)
- live-session: persist Gemini token usage for the final/AI-only turn (01f6b47)
- live-session: preserve Gemini thought_signature so text tool-calling works #86exr424h (82ebc77), closes #86exr424h
- live-session: restrict text-session model to the priced allow-list #86exr424h (5674854), closes #86exr424h
- live-session: scroll the session modal on small screens, pin the footer (d1f757c)
- live-session: UTF-8-safe base64 for the session request (non-ASCII bundle titles) (72d708b)
- merge voice minutes into freemium session card as inline pill (1274a81)
- phrase,translation: chunk subdoc schema, match-by-phrase, token headroom (50af640)
- redirect to the subscription page after a successful payment, with refetch and animated waiting state (3f6d88f)
- refine auth middleware for improved login handling and update button links to remove hash mode for consistent routing (dcdf282)
- refresh voice-minute balance when a live session ends (8f44a04)
- remove default color from Button in PracticeToolScaffold component (4b80fdd)
- restrict phrase marking as practiced to user input instead of trigger actions #86etkgdqu (f8650de), closes #86etkgdqu
- route Start New Session through the live-session dispatcher instead of a 404 route (358cc1d)
- schedule: #86ewfyjet add timezone support testing and fix catch-up logic (bb7d155)
- schedule: make scheduled-job creation idempotent to prevent duplicate-key crash (04b5159)
- subscription: apply plan upgrades fully (tier, budgets, label) and block stacking (a28b485)
- subscription: read current_period bounds item-first with subscription fallback; revert e2e collection rename (e3424a2)
- subscription: rewrite Stripe product metadata authoritatively in setup-stripe-pricing (260be05)
- subscription: show price skeleton while probing local currency to avoid GBP flash (96b4ed1)
- subscription: show real text-chat usage on the active-plan card (was "Unlimited") (93ef5ef)
- subscription: use Stripe's true fx rate for localized card prices (30bca53)
- suppress the global tier-limit modal when a page renders the lock inline (ca443e2)
- translation: only extract chunks from the marked text, not its context (f408e83)
- translation: retry + validate structured LLM output to cut error rate (dd5019b)
- ui: use IconPlayCircle — IconPlay is not a pilotui icon (rendered nothing) (594c3f6)
- update audio transcription model in live session to use gpt-4o-mini-transcribe (be7494a)
- update auth middleware to use fullPath for root redirect and adjust login route to hash mode (3662084)
- update button links to use hash mode for consistent routing in live session and flashcard navigation (5e243f9)
- update docker-compose.yml to change service port mapping from 8080 to 80 (f52d9b6)
- update login_with_token component to use loginWithToken method and add error logging on authentication failure (7afcd91)
- update loginWithToken method to include second parameter for enhanced authentication flow (0769ef5)
- update redirect URIs in auth router to use hash mode for improved routing (9173430)
- update return_url in getSubscription function to use DASHBOARD_BASE_URL instead of FRONTEND_URL; remove FRONTEND_URL from sample.env (3a60399)
- update router configuration to enable hash mode and adjust redirect logic in auth middleware (b8451ba)
- update routing for subscription navigation in ProfileButton component (e3ec16e)
- update vocabulary handling in live-session component to use selectedPhrases for accurate word indexing (e7fc12a)
- use singular "Sign in with Google" copy on login page #86exkh11q (3c506ab), closes #86exkh11q
Features
- #86erqa08y Add an empty trigger slot to the LeitnerPhrasePicker Modal. (ab1940e), closes #86erqa08y
- #86erqa08y add configurable review interval to Leitner settings. (24b67fe), closes #86erqa08y
- #86erqa08y Add Daily Limit configuration and enforcement (a61c6e1), closes #86erqa08y
- #86erqa08y Bring back the Total box input on the Leitner box setting section (e57672b), closes #86erqa08y
- #86erqa08y create reusable Toggle component and fix empty box filtering logic (3ac08f4)
- #86erqa08y Ensure the leitner-review-job always performs catch-up regardless of its explicit catchUp flag. (17ed4cc), closes #86erqa08y
- #86erqa08y fix search input spacing and add box-only filter toggle (e585404)
- #86erqa08y Implement a catch-up mechanism for recurrent scheduled jobs and pass execution times to job callbacks. (27e2c24), closes #86erqa08y
- #86erqa08y Implement Leitner Box Spaced Repetition System (b4a806a), closes #86erqa08y
- #86erqa08y implement leitner box user preferences and settings ui (2bbf1dc), closes #86erqa08y
- #86erqa08y Implement Leitner System and Board Activity (63ef0af), closes #86erqa08y
- #86erqa08y Implement persistent board activities with
meta.isActivefor Leitner box reviews and addBoardServicetests. (e257177), closes #86erqa08y - #86erqa08y implement phrase-to-box tracking and refactor picker to dataProvider.list (94da625), closes #86erqa08y
- #86erqa08y implement refined Leitner notification system (3152be9), closes #86erqa08y
- #86erqa08y overhaul board page aesthetics and fix rendering issues (b93f1cf)
- #86erqa08y prevent phrase picker auto-close and defer state refresh until modal closure (52f651d)
- #86erqa08y set up documentation download and conversion script in server/scripts (8f8f7bf), closes #86erqa08y
- #86erqa08y sync phrase removal and refine user context in Leitner system (dcb92c4), closes #86erqa08y
- #86erqa08y Update Leitner Box due date logic to include items due by the end of the current day, add corresponding tests, and remove the
initLeitnerfunction. (390ab2d), closes #86erqa08y - #86erqa08y use custom Toggle component for Auto-Entry in Preferences (d3eeb1e), closes #86erqa08y
- #86erzxm7p - add new collections for subscription and daily credits in config (3d763b0), closes #86erzxm7p
- #86erzxm7p add subscription details retrieval and integrate triggers in payment processing to add creadit into subscription system after succesfull payment. (b891eca), closes #86erzxm7p
- #86erzxm7p enhance payment gateway with multi-provider support, including webhook handling and payment verification improvements (915af8c), closes #86erzxm7p
- #86erzxm7p implement Stripe payment integration with checkout session handling, payment verification, and user subscription management (90ff598), closes #86erzxm7p
- #86et6azkg add text-to-speech functionality and voice listing in translation module (4ecb1fa), closes #86et6azkg
- #86etkgdg7 implement freemium credit allocation system with default values and user management (8e94091), closes #86etkgdg7
- #86etkgdg7 update freemium credit allocation to 1M and adjust subscription handling in usage recording (d10f676), closes #86etkgdg7
- #86etkgdqu implement Gemini Live API for live sessions (fbf147b), closes #86etkgdqu
- #86etp28k1 enhance freemium limitation modals across components for improved user experience and consistency (d80207f), closes #86etp28k1
- #86etp28k1 implement freemium timer functionality in live session with modal alerts for session expiration (3e87839), closes #86etp28k1
- #86eu01jz0 enhance PhraseCard component to handle 'linguistic' phrases by disabling submit button and preventing submission (81796c6), closes #86eu01jz0
- #86eu01jz0 enhance PhraseSchema and createPhrase function to support 'linguistic' type phrases, including additional fields for context and language information (9a57ffe), closes #86eu01jz0
- #86eu01jz0 extend PhraseSchema to include detailed linguistic data structure, enhancing support for translation and contextual information (93b9ae0), closes #86eu01jz0
- #86eu01jz0 update PhraseCard component to dynamically handle translation and definition placeholders based on phrase type, and introduce computed property for translation value (8769580), closes #86eu01jz0
- #86ewevg3v Internationalize Leitner components and integrate Leitner box statistics fetching and display. (b3f9c4e), closes #86ewevg3v
- #86ewevg3v Update "Quota" label to "Cards Per Session" in English localization. (531f124), closes #86ewevg3v
- #86ewevg3y Implement common
PageHeaderandBreadcrumbcomponents, updating bundle pages and documentation. (93731d9), closes #86ewevg3y - #86ewevg42 Implement custom Leitner review sessions for bundles with a dedicated frontend component and server-side logic. (273304d), closes #86ewevg42
- #86ewfyjet Enhance Leitner settings with timezone clarification for review intervals and add related translations. (c2348f2), closes #86ewfyjet
- #86ewfyjet Implement a new TimezonePicker component and integrate it into the profile settings page, replacing the native select dropdown. (b2dc50c), closes #86ewfyjet
- #86ewfyjet Implement automatic Leitner box schedule resynchronization when a user's timezone is updated. (f747592), closes #86ewfyjet
- #86ewfyjet Implement timezone support for Leitner box review scheduling and display. (b3f240e), closes #86ewfyjet
- #86ewfyjet Implement user timezone setting (2d3aef5), closes #86ewfyjet
- Add @nuxtjs/i18n module for internationalization support (03d7548)
- add 3-tier pricing backend with 3-day credit-card trial #86exkhcza (5b37c61), closes #86exkhcza
- add Billing and Settings pages with navigation and subscription details (48c6bc6)
- add ClickUp rules documentation and update package dependencies for improved functionality (4759cb8)
- add CORS configuration to server for specified origins and methods (b1836f0)
- add deployment workflows for EC2 and ECR, create Dockerfile for dashboard-v2, and update .gitignore and .dockerignore files (856970e)
- add dialog filtering in live session query and enhance live session record handling (382b40d)
- Add e2e testing guide and apply authentication middleware to the board page. (789f22a)
- add error messages and navigation button to live session page (025183e)
- add expiration index for freemium credits based on duration configuration (f3d99f9)
- add freemium user limitation for allowed lived sessions and update related functionality (04b5fa4)
- Add Google Meet to allowed CORS origins. (247aa76)
- add install-extension nudge banner on dashboard #86exkh0z3 (a656a3d), closes #86exkh0z3
- add mic level visualization and spacebar toggle, and include translation-masking mode in live sessions #86etkgdqu (042e67f), closes #86etkgdqu
- add native language selection for AI sessions and implement text input for live practice #86etkgdqu (a0b77ab), closes #86etkgdqu
- add new translation keys for Subscription and Billing sections, and update Sign Out labels (0384fb8)
- add opt-in text-based message composer with microphone toggle fallback #86etkgdqu (de37822), closes #86etkgdqu
- add profile reset functionality to subscription settings for testing purposes, including UI updates and backend integration (dde8bde)
- add README.md for SubTurtle Dashboard App and update live-session component to handle audio transcript deltas; refactor server to use environment variable for MongoDB prefix (fa73f32)
- add session expiry message and update UI to display session expiration details (8302996)
- add Sidebar component for profile navigation with tabs for Profile, Subscription, and Billing (fb69dd5)
- add subscription settings page and profile management, update translations for subscription features (d1e00ac)
- Add Teams.microsoft.com to allowed CORS origins. (1b3d84c)
- add ThemeSwitcher component and update layout to include theme selection; redirect root route to /statistic (9d67f85)
- allow all origins in CORS configuration for dashboard server (ef8ced8)
- allow wildcard origin in CORS configuration (73282d4)
- analytics: convention-named lifecycle events + missing engagement events (001209f)
- checkout: embedded Custom Checkout with Adaptive Pricing localized prices (3210cdd)
- decrement freemium allocation on phrase deletion in bundle store for improved resource management (b4b48c3)
- disable submit button when phrase or translation is empty in PhraseCard component (5495555)
- Enhance
development/SKILL.mdwith E2E testing and navigation guidelines, and new principles for testing, documentation, and UI component usage. (16d4f81) - enhance CORS configuration to dynamically handle origins and log unauthorized requests (fce9b74)
- enhance GenerativeCard and WordGenerativeCover components with click handling and navigation (7e8b5ef)
- enhance live session features by adding metadata support and updating UI components for session details and history (f980555)
- enhance live session functionality with dynamic word handling and improved instructions (d64023b)
- enhance live session page with empty state handling and new session prompts (b3274f7)
- enhance phrase management with improved delete functionality and freemium allocation tracking (2419740)
- enhance PracticeToolScaffold with dynamic body class and integrate into live session page (729cc0d)
- enhance subscription handling with freemium allocation and type updates (6683bb1)
- fetch subscription to update freemium allocation after starting live session (88b4535)
- flashcard: modularize card modes + unified flip toggle (4249a0c)
- flashcard: new translation shape + L3+ fill-in cloze (62613d4)
- gateway: single-currency GBP checkout with Stripe Adaptive Pricing (S7) (9bb38f5)
- implement cancelSubscriptionByProviderAndSubscriptionId function in subscription service; enhance StripeAdapter to handle subscription deletion events and update subscription status management (2ed6f15)
- implement create and update phrase functionality with freemium allocation management in bundle store and backend (0c24754)
- implement empty state for bundles page with user prompts and loading state management (de51624)
- implement freemium alerts with add phrase functionality in a new component (50c78c9)
- implement freemium allocation updates on phrase bundle creation and deletion (f4a38d2)
- implement getSubscription function to streamline subscription retrieval; refactor getSubscriptionDetails to utilize new function and enhance response normalization for Stripe payments (096d06a)
- implement live session store with conversation dialog handling (805c7a2)
- implement removePhrase function with freemium allocation update (efc06dc)
- implement subscription page with monthly plan details and checkout functionality (b8bedf6)
- implement subscription renewal [cacelletion and extnesion] for stripe integration (9ce3808)
- improve phrase display and refactor active phrase handling in live session (ffa987e)
- integrate StartLiveSessionForm component into bundle page and update modal trigger for improved user experience (454382c)
- live-session: add text-only conversation mode #86exr424h (d9abac4), closes #86exr424h
- live-session: mode-aware limits in the Start-Live-Session modal (f51aa46)
- live-session: mode-aware limits on the /sessions/new start screen (4ea1c8a)
- live-session: single /practice/live-session gate + server voice list (9bb25ec)
- live-session: single /practice/live-session gate + server voice list (9dcea17)
- persist Google profile picture as base64 in localStorage with broken-URL fallback #86exkh0z3 (8011909), closes #86exkh0z3
- rebuild subscription page for 3-tier pricing and cap-moment upgrades #86exkhcza (0430e26), closes #86exkhcza
- refactor audio transcription handling in live session to improve event processing (57c243e)
- refactor phrase schema and enhance createPhrase function to include translation_language and prevent duplicate phrases in bundles (4c4cb3d)
- Reorganize agent documentation by introducing a development skill, integrating lib-vue-components docs, and updating doc download paths with conditional markdown conversion. (dcca8b2)
- reset session state on creation and improve native language detection for live sessions #86etkgdqu (9b8a85f), closes #86etkgdqu
- schedule: implement schedule service and tests CU-86erqa08y (8a99fb8)
- sessions: show live-session duration on history and detail pages (f461783)
- show dashboard version in a global footer #86exqazkq (8e58fb5), closes #86exqazkq #footer
- simplify get_next_word handler and enhance session creation response (ada1855)
- subscription: add Stripe metadata entitlement parser and resolver (S1) (873a1a0)
- subscription: add voice-minute fields to subscription + free_credit, seed on grant (S4) (ed1de09)
- subscription: build getSubscriptionPlans from live Stripe with last-known-good cache (S3) (97b92dc), closes hi#traffic
- subscription: cap Reader text chat — 60 chats/mo + 60 msgs/chat (S16) (0de9fa6)
- subscription: enforce save_words, weekly_insights & live-session caps from entitlements (1d76506)
- subscription: gate full session history behind session_history (Learner+) via list-live-sessions RPC (de43b4c)
- subscription: gate the sessions page via list-live-sessions RPC and debit voice minutes on session end (f7ab65b)
- subscription: global upgrade modal when a tier limit blocks an RPC (1e67ae9)
- subscription: grant entitlements from Stripe metadata with idempotency (S2) (fb760b7)
- subscription: localize pricing-card prices via Adaptive Pricing (EUR for EU) (a8c453f)
- subscription: make paid-tier copy, badge, highlight & trial Stripe-driven (single source of truth) (6ea0bc9)
- subscription: meter voice minutes per tier (gate + debit) and fix paid-tier entitlement lookup (b0b55c6)
- subscription: Reader text-chat counter + Reader-specific limit copy (S17) (06460d0)
- subscription: render pricing page from backend plans, drop currency picker (S9) (0b27c00)
- subscription: script-provision the Stripe portal config, with setup guards and a startup check (7762f00)
- subscription: shared FeatureLocked panel — gate /statistic, refactor /sessions (S15) (4f0563c)
- subscription: show all plan entitlements on the active-plan "This month" card (6248228)
- subscription: show Starter as a plan card with current-plan and downgrade-to-free states (31355ef)
- subscription: Starter free-tier usage card on the subscription page (455fe63)
- subscription: voice balance meter + "This month" section (S12) (2ab6a20)
- subscription: voice top-up packs — grant webhook + active_top_ups payload (S11) (aeaf21c)
- subscription: voice top-up purchase flow + /settings/billing (S14) (2d8ff15)
- subscription: voice-cap 80% banner + 100% Start-Voice-Chat modal (S13) (60cd505)
- translation,phrase: chunk-aware save schema, AI advisor, bundle suggestion (82abb5e)
- translation: per-chunk definition for chunk-aware save (363fe39)
- update @modular-rest/server dependency to version 1.15.0 (325a9d8)
- update createPhrase functionality to support multiple bundle IDs for improved phrase management and access verification (ef151f5)
- update dashboard navigator to reduce the nesting complexity, the nvigator dosent has nested items now. (94be814)
- update Dockerfile to include .npmrc and modify GitHub Actions workflow to create .npmrc file during deployment (8394f42)
- update Gemini token tracking to include tool use, thoughts, and dedicated video token metrics #86etkgdqu (8cebf65), closes #86etkgdqu
- update live session page to ensure bundleId is a string and maintain consistent structure (ea8cb07)
- update live session page with improved layout and dynamic phrase display (a65814a)
- update membership plans page with new subscription terminology and enhanced UI components (f101e12)
- update Pro plan feature label to reflect 60 monthly chat limit (1f17577)
- update subscription button logic in settings page; differentiate between freemium and paid plans for better user experience (26631c0)
- update subscription status handling to include additional states and modify active subscription query logic (3d74382)
Performance Improvements
- live-session: cache static text-turn prefix to cut token cost #86exr424h (636a25a), closes #86exr424h