Skip to content

v1.0.0-dev.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Jun 17:10

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.isActive for Leitner box reviews and add BoardService tests. (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 initLeitner function. (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 PageHeader and Breadcrumb components, 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.md with 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