Conversation
Stand up a semantic-release pipeline (mirroring the extension's) that owns the dashboard version in frontend/package.json, expose it to the SPA via Nuxt runtimeConfig, and render it in a global footer on every authenticated page. - frontend/package.json: name, version placeholder, release scripts, and semantic-release devDeps - frontend/release.config.cjs: dual changelog, main + dev-prerelease, runs from frontend/ so @semantic-release/npm bumps frontend/package.json - .github/workflows/release.yml: release-only job on push to main/dev - frontend/nuxt.config.ts: bake APP_VERSION from package.json into runtimeConfig.public - AppVersionFooter.vue wired into the DashboardShell #footer slot, with an app.version i18n string Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…azkq Document the convention in CLAUDE.md's Commits & versioning section: append the bare ClickUp task id as `#<taskId>` to the commit subject and the PR title (so it survives a squash-merge into dev). The Conventional Commits type prefix still drives the semver bump. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The release job ran `yarn release` with nothing verifying first, so a push to main/dev with failing tests could still cut a version. Add a `yarn test` step before the Release step. E2E is left out (needs Playwright browsers + a live backend); PRs already run the full suite via test.yml. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…md #86exqazkq This PR's feat commit wires up semantic-release for the frontend, so the existing blockquote claiming no release automation exists is now false and would mislead future contributors. Update it: frontend release automation is live (release.config.cjs, release.yml, versioned frontend/package.json); the server remains unversioned (0.0.0, no pipeline). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…-both-dashboard-and-Exension_Navid-Shad feat: show dashboard version in a global footer #86exqazkq
# 1.0.0-dev.1 (2026-06-19) ### Bug Fixes * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y clear toasted activity card after session completion ([faf73fb](https://github.com/codebridger/subturtle-dashboard-app/commit/faf73fbe9cf05475c029516e862ea87161e8150e)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y fix toggle active color and persist bundle selection when box filtering ([14502c4](https://github.com/codebridger/subturtle-dashboard-app/commit/14502c4224cf794f09d8790cc958b2105d587611)) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y refactor to content/gap row pattern for correct centering ([707651e](https://github.com/codebridger/subturtle-dashboard-app/commit/707651ea993a5a2d1b90fe194f6a380f125c5ca9)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y resolved HourSelector overlap issue ([018bd5d](https://github.com/codebridger/subturtle-dashboard-app/commit/018bd5d26a640577e11bac8b78b994ad2f65e0fb)) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y verify and optimize Leitner auto-entry in phrase triggers ([9a4acf2](https://github.com/codebridger/subturtle-dashboard-app/commit/9a4acf2e008b8d2bba617312a4e6f7dd845a7791)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exgqfpu stabilize auth lifecycle and fix logout button ([7810302](https://github.com/codebridger/subturtle-dashboard-app/commit/78103029804980041fb4c0de032a03b9af1c6763)) * add null check for transcript before updating conversation dialogs and live session record ([8c0e95c](https://github.com/codebridger/subturtle-dashboard-app/commit/8c0e95cad63017e09ed1a336c560a7728ba53ca6)) * **analytics:** align Stripe lifecycle events with the metrics plan ([2f8f0e0](https://github.com/codebridger/subturtle-dashboard-app/commit/2f8f0e053cff093f92f8acc6a63c0a849c26dd28)) * **analytics:** fire flashcard_review_started only when a review has cards ([914c210](https://github.com/codebridger/subturtle-dashboard-app/commit/914c21028c5638e69903f7a78998acb9dceca0ca)) * cap freemium voice session at server-computed remaining minutes ([9337182](https://github.com/codebridger/subturtle-dashboard-app/commit/9337182286cb17ce410e7a73c67b4d52aebe8b04)) * **checkout:** don't pass returnUrl to confirm() (session already sets return_url) ([9b52103](https://github.com/codebridger/subturtle-dashboard-app/commit/9b52103736949e20747a6235cb746097d90ff7d7)) * **checkout:** mount Stripe Elements after render + scroll tall panel ([797777d](https://github.com/codebridger/subturtle-dashboard-app/commit/797777ddd4bfae86007dce307400acaa0d991622)) * **ci:** set DASHBOARD_BASE_URL so getSubscriptionDetails resolves a paid tier; revert period diag ([0f0d48f](https://github.com/codebridger/subturtle-dashboard-app/commit/0f0d48ffb7379259b8047e8f388fd969f0d01423)) * correct button click handler in DetailCard component and add max follow-up practice limit in live session instructions ([14d3a15](https://github.com/codebridger/subturtle-dashboard-app/commit/14d3a158078cfdbb090a611e3b568f7ca9a8cbdb)) * correct redirect URI in auth router to remove hash mode for proper token exchange ([c8b368c](https://github.com/codebridger/subturtle-dashboard-app/commit/c8b368c2a495c80ee352155bf1cfccd6a8137523)) * correct routing path for subscription navigation in ProfileButton component ([e6a9e7a](https://github.com/codebridger/subturtle-dashboard-app/commit/e6a9e7a968f47000f6c9f6df44fc0410d23b19fb)) * correct unknown cost percentage and adjust token calculations in live session; ensure accurate cost representation by subtracting cached tokens from total tokens ([7407198](https://github.com/codebridger/subturtle-dashboard-app/commit/7407198865dcf77e47978d4a1285b0d57319c223)) * **docker:** copy subscription module so frontend build resolves tier types ([943572c](https://github.com/codebridger/subturtle-dashboard-app/commit/943572caa8d204591269ea631fbe5ed086a3df87)) * downgrade @codebridger/lib-vue-components to version 1.16.0 and update ProfileButton component to use computed profilePicture ([005a746](https://github.com/codebridger/subturtle-dashboard-app/commit/005a746cb59c9750be64d1cbbe665f132ee710f5)) * **layout:** clip horizontal overflow from decorative page backgrounds ([8998654](https://github.com/codebridger/subturtle-dashboard-app/commit/899865437f8b503d920b3a8b02f7273abf0015c9)) * **live-session:** drop empty parameters from no-arg finish_practice tool [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exr424h ([aad0f83](https://github.com/codebridger/subturtle-dashboard-app/commit/aad0f8303dfa809a634b37ddbcc44fbbfc31338d)), closes [#86exr424h](https://github.com/codebridger/subturtle-dashboard-app/issues/86exr424h) * **live-session:** freemium card no longer overlaps the voice-minutes line ([20dc3bf](https://github.com/codebridger/subturtle-dashboard-app/commit/20dc3bf8f4e5c50cac29e7c731d46750fb6a3039)) * **live-session:** persist Gemini token usage for the final/AI-only turn ([01f6b47](https://github.com/codebridger/subturtle-dashboard-app/commit/01f6b47f312903e63c6aecb0499fdc02a38e4c34)) * **live-session:** preserve Gemini thought_signature so text tool-calling works [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exr424h ([82ebc77](https://github.com/codebridger/subturtle-dashboard-app/commit/82ebc776d1f43c291f8ced7d0d1ac8e5de373d4b)), closes [#86exr424h](https://github.com/codebridger/subturtle-dashboard-app/issues/86exr424h) * **live-session:** restrict text-session model to the priced allow-list [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exr424h ([5674854](https://github.com/codebridger/subturtle-dashboard-app/commit/5674854464b0df67c86801624231a91925a6972c)), closes [#86exr424h](https://github.com/codebridger/subturtle-dashboard-app/issues/86exr424h) * **live-session:** scroll the session modal on small screens, pin the footer ([d1f757c](https://github.com/codebridger/subturtle-dashboard-app/commit/d1f757c868d2a5d6d7807e3de196e10af841b963)) * **live-session:** UTF-8-safe base64 for the session request (non-ASCII bundle titles) ([72d708b](https://github.com/codebridger/subturtle-dashboard-app/commit/72d708b7e1dba7ad4e485af74f92aa1a009ae117)) * merge voice minutes into freemium session card as inline pill ([1274a81](https://github.com/codebridger/subturtle-dashboard-app/commit/1274a8140f07f55b9b437e872e8ea37617e3ad4a)) * **phrase,translation:** chunk subdoc schema, match-by-phrase, token headroom ([50af640](https://github.com/codebridger/subturtle-dashboard-app/commit/50af64013bade30c36597e1bb1c96a5e0e0f1713)) * redirect to the subscription page after a successful payment, with refetch and animated waiting state ([3f6d88f](https://github.com/codebridger/subturtle-dashboard-app/commit/3f6d88f206ca77f3ba5ee6d36e0dc992997ac3a9)) * refine auth middleware for improved login handling and update button links to remove hash mode for consistent routing ([dcdf282](https://github.com/codebridger/subturtle-dashboard-app/commit/dcdf28255111ccde8cae9bd265ff30bd336302bc)) * refresh voice-minute balance when a live session ends ([8f44a04](https://github.com/codebridger/subturtle-dashboard-app/commit/8f44a0400fb202b458dd2a3d9a66fda513389339)) * remove default color from Button in PracticeToolScaffold component ([4b80fdd](https://github.com/codebridger/subturtle-dashboard-app/commit/4b80fddf5b5880f113f7fd2e752eaa27889d26fe)) * restrict phrase marking as practiced to user input instead of trigger actions [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu ([f8650de](https://github.com/codebridger/subturtle-dashboard-app/commit/f8650de19738925bf7258a0e283e962fe62e8f6d)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * route Start New Session through the live-session dispatcher instead of a 404 route ([358cc1d](https://github.com/codebridger/subturtle-dashboard-app/commit/358cc1d4c6bd9b9edb466e1d923402457c3e4783)) * **schedule:** [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewfyjet add timezone support testing and fix catch-up logic ([bb7d155](https://github.com/codebridger/subturtle-dashboard-app/commit/bb7d15526a4573f9000a5286a15f13ac060ddf2e)) * **schedule:** make scheduled-job creation idempotent to prevent duplicate-key crash ([04b5159](https://github.com/codebridger/subturtle-dashboard-app/commit/04b5159846e805286dd8fb755dc56903961f3d41)) * **subscription:** apply plan upgrades fully (tier, budgets, label) and block stacking ([a28b485](https://github.com/codebridger/subturtle-dashboard-app/commit/a28b485df7dead00dd1de09af852aae04554c5a0)) * **subscription:** read current_period bounds item-first with subscription fallback; revert e2e collection rename ([e3424a2](https://github.com/codebridger/subturtle-dashboard-app/commit/e3424a24a5c30d41ed25f657f6e4c81381b76422)) * **subscription:** rewrite Stripe product metadata authoritatively in setup-stripe-pricing ([260be05](https://github.com/codebridger/subturtle-dashboard-app/commit/260be05db07291dd53fad543ae133a9c5b4d95db)) * **subscription:** show price skeleton while probing local currency to avoid GBP flash ([96b4ed1](https://github.com/codebridger/subturtle-dashboard-app/commit/96b4ed10b6703f051e7e2b315574f4aeeeb76a97)) * **subscription:** show real text-chat usage on the active-plan card (was "Unlimited") ([93ef5ef](https://github.com/codebridger/subturtle-dashboard-app/commit/93ef5efbd410fde1a99e16570048eb5ab525ded9)) * **subscription:** use Stripe's true fx rate for localized card prices ([30bca53](https://github.com/codebridger/subturtle-dashboard-app/commit/30bca535ec93fe86a88e84172eebf695f2b5e3de)) * suppress the global tier-limit modal when a page renders the lock inline ([ca443e2](https://github.com/codebridger/subturtle-dashboard-app/commit/ca443e2aac740bf61c4118d1ae3fa579cd210806)) * **translation:** only extract chunks from the marked text, not its context ([f408e83](https://github.com/codebridger/subturtle-dashboard-app/commit/f408e832825f1ac9115d6db47d66221d48765cbc)) * **translation:** retry + validate structured LLM output to cut error rate ([dd5019b](https://github.com/codebridger/subturtle-dashboard-app/commit/dd5019b0dce4a6580a9c70ca745a8a0f7a9c0700)) * **ui:** use IconPlayCircle — IconPlay is not a pilotui icon (rendered nothing) ([594c3f6](https://github.com/codebridger/subturtle-dashboard-app/commit/594c3f64f7d82b8180a90c3083214c046df18264)) * update audio transcription model in live session to use gpt-4o-mini-transcribe ([be7494a](https://github.com/codebridger/subturtle-dashboard-app/commit/be7494af71a43be5f6c2c5e8c1128e6b1e2f8036)) * update auth middleware to use fullPath for root redirect and adjust login route to hash mode ([3662084](https://github.com/codebridger/subturtle-dashboard-app/commit/36620844cf48becabd36fa45c37f03f9f2b9c39c)) * update button links to use hash mode for consistent routing in live session and flashcard navigation ([5e243f9](https://github.com/codebridger/subturtle-dashboard-app/commit/5e243f9ca28fbcda5c8649ee9cb1ecfcbb94a01d)) * update docker-compose.yml to change service port mapping from 8080 to 80 ([f52d9b6](https://github.com/codebridger/subturtle-dashboard-app/commit/f52d9b63a446f22cdfe5aa572123b4f59445de5c)) * update login_with_token component to use loginWithToken method and add error logging on authentication failure ([7afcd91](https://github.com/codebridger/subturtle-dashboard-app/commit/7afcd91a16774dc64b87375a9e50d40bb2360caf)) * update loginWithToken method to include second parameter for enhanced authentication flow ([0769ef5](https://github.com/codebridger/subturtle-dashboard-app/commit/0769ef5a2f3f7e7bba00601dd6c818c89e0f95b9)) * update redirect URIs in auth router to use hash mode for improved routing ([9173430](https://github.com/codebridger/subturtle-dashboard-app/commit/917343083e7c77ea6532f45c89e8535483de92f2)) * update return_url in getSubscription function to use DASHBOARD_BASE_URL instead of FRONTEND_URL; remove FRONTEND_URL from sample.env ([3a60399](https://github.com/codebridger/subturtle-dashboard-app/commit/3a60399479e87adcdf8fd71ed6e97a0a7c5e3321)) * update router configuration to enable hash mode and adjust redirect logic in auth middleware ([b8451ba](https://github.com/codebridger/subturtle-dashboard-app/commit/b8451ba04a6dd0aaa0f3119d490802cbbaf19c5e)) * update routing for subscription navigation in ProfileButton component ([e3ec16e](https://github.com/codebridger/subturtle-dashboard-app/commit/e3ec16e473e9cbd40c96e6a7bdbe5c8665ecce3d)) * update vocabulary handling in live-session component to use selectedPhrases for accurate word indexing ([e7fc12a](https://github.com/codebridger/subturtle-dashboard-app/commit/e7fc12a24bdfa0e2a3f71f08262bebaa14cb1e48)) * use singular "Sign in with Google" copy on login page [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkh11q ([3c506ab](https://github.com/codebridger/subturtle-dashboard-app/commit/3c506ab7a0cc2a6171583ebba5bb86ab575a3e02)), closes [#86exkh11q](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkh11q) ### Features * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Add an empty trigger slot to the LeitnerPhrasePicker Modal. ([ab1940e](https://github.com/codebridger/subturtle-dashboard-app/commit/ab1940ebe644136826411ab5327d36e748fac738)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y add configurable review interval to Leitner settings. ([24b67fe](https://github.com/codebridger/subturtle-dashboard-app/commit/24b67fe4f67d69a9aa05066e6f3e93d24b2a2772)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Add Daily Limit configuration and enforcement ([a61c6e1](https://github.com/codebridger/subturtle-dashboard-app/commit/a61c6e15f5236460c65f91e068e39473f349efaa)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Bring back the Total box input on the Leitner box setting section ([e57672b](https://github.com/codebridger/subturtle-dashboard-app/commit/e57672b9f679f81a61e309fbec333778dcc4f58e)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y create reusable Toggle component and fix empty box filtering logic ([3ac08f4](https://github.com/codebridger/subturtle-dashboard-app/commit/3ac08f495391d2f2175d447f61976b14097dec07)) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Ensure the leitner-review-job always performs catch-up regardless of its explicit catchUp flag. ([17ed4cc](https://github.com/codebridger/subturtle-dashboard-app/commit/17ed4cc34aa5db4b0adbbb9a8baca8ac3a6df8ca)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y fix search input spacing and add box-only filter toggle ([e585404](https://github.com/codebridger/subturtle-dashboard-app/commit/e585404cc0742e9346615098787cbe041814defe)) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Implement a catch-up mechanism for recurrent scheduled jobs and pass execution times to job callbacks. ([27e2c24](https://github.com/codebridger/subturtle-dashboard-app/commit/27e2c24dd6596efcb418e5eae9c563a7a0d3f8d2)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Implement Leitner Box Spaced Repetition System ([b4a806a](https://github.com/codebridger/subturtle-dashboard-app/commit/b4a806af7f04b5f8497b2dba76a3ee7c96c54657)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y implement leitner box user preferences and settings ui ([2bbf1dc](https://github.com/codebridger/subturtle-dashboard-app/commit/2bbf1dc404cedea1e58ef8b2c6574302e1965861)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Implement Leitner System and Board Activity ([63ef0af](https://github.com/codebridger/subturtle-dashboard-app/commit/63ef0af67ebef3d536d44cf4dda43d3639133d7d)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y Implement persistent board activities with `meta.isActive` for Leitner box reviews and add `BoardService` tests. ([e257177](https://github.com/codebridger/subturtle-dashboard-app/commit/e257177b6246751260d6d47c1c5d75a65cc79c8a)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y implement phrase-to-box tracking and refactor picker to dataProvider.list ([94da625](https://github.com/codebridger/subturtle-dashboard-app/commit/94da625eb50ccf183c07db8c52ae4c6478814853)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y implement refined Leitner notification system ([3152be9](https://github.com/codebridger/subturtle-dashboard-app/commit/3152be91ddbe875b799dd4b0c6244319fbe5f4f7)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y overhaul board page aesthetics and fix rendering issues ([b93f1cf](https://github.com/codebridger/subturtle-dashboard-app/commit/b93f1cf37dd8e1378f530e5d9139096a7d7e4fd4)) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y prevent phrase picker auto-close and defer state refresh until modal closure ([52f651d](https://github.com/codebridger/subturtle-dashboard-app/commit/52f651d1052798b6b7d6fa42d2ac7d82ee8b9691)) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y set up documentation download and conversion script in server/scripts ([8f8f7bf](https://github.com/codebridger/subturtle-dashboard-app/commit/8f8f7bf18ff0f81a902664cfdd02b1ef429c0034)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y sync phrase removal and refine user context in Leitner system ([dcb92c4](https://github.com/codebridger/subturtle-dashboard-app/commit/dcb92c44dbe0740ddacd4f1ba869702d61201c36)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y 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](https://github.com/codebridger/subturtle-dashboard-app/commit/390ab2d125ce055a1d9333723a89068adc8da0a8)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erqa08y use custom Toggle component for Auto-Entry in Preferences ([d3eeb1e](https://github.com/codebridger/subturtle-dashboard-app/commit/d3eeb1ea1a16162ee7cec2ad81f2564b7c718a1c)), closes [#86erqa08y](https://github.com/codebridger/subturtle-dashboard-app/issues/86erqa08y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erzxm7p - add new collections for subscription and daily credits in config ([3d763b0](https://github.com/codebridger/subturtle-dashboard-app/commit/3d763b0d5c44e45e66592a08c2289835e03b457e)), closes [#86erzxm7p](https://github.com/codebridger/subturtle-dashboard-app/issues/86erzxm7p) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erzxm7p add subscription details retrieval and integrate triggers in payment processing to add creadit into subscription system after succesfull payment. ([b891eca](https://github.com/codebridger/subturtle-dashboard-app/commit/b891eca054d3d78a64ecd1d9f71b06a2374693f6)), closes [#86erzxm7p](https://github.com/codebridger/subturtle-dashboard-app/issues/86erzxm7p) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erzxm7p enhance payment gateway with multi-provider support, including webhook handling and payment verification improvements ([915af8c](https://github.com/codebridger/subturtle-dashboard-app/commit/915af8c3304125c24cedb7129bfaacfc581584f2)), closes [#86erzxm7p](https://github.com/codebridger/subturtle-dashboard-app/issues/86erzxm7p) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)erzxm7p implement Stripe payment integration with checkout session handling, payment verification, and user subscription management ([90ff598](https://github.com/codebridger/subturtle-dashboard-app/commit/90ff59856459a0a0deac3657425af29dbc617aff)), closes [#86erzxm7p](https://github.com/codebridger/subturtle-dashboard-app/issues/86erzxm7p) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)et6azkg add text-to-speech functionality and voice listing in translation module ([4ecb1fa](https://github.com/codebridger/subturtle-dashboard-app/commit/4ecb1fa7c4353f79c736a7e472c4788deb95dcd0)), closes [#86et6azkg](https://github.com/codebridger/subturtle-dashboard-app/issues/86et6azkg) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdg7 implement freemium credit allocation system with default values and user management ([8e94091](https://github.com/codebridger/subturtle-dashboard-app/commit/8e94091787f29800398076ada1857a594cbac679)), closes [#86etkgdg7](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdg7) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdg7 update freemium credit allocation to 1M and adjust subscription handling in usage recording ([d10f676](https://github.com/codebridger/subturtle-dashboard-app/commit/d10f676d0dba2d76d2bd7fbdd1010e2f77e5d1c3)), closes [#86etkgdg7](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdg7) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu implement Gemini Live API for live sessions ([fbf147b](https://github.com/codebridger/subturtle-dashboard-app/commit/fbf147b96883aa42b3e5e2557514e0d051a4312b)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etp28k1 enhance freemium limitation modals across components for improved user experience and consistency ([d80207f](https://github.com/codebridger/subturtle-dashboard-app/commit/d80207f582b3279fb36fcc843a3a99217dc6fb17)), closes [#86etp28k1](https://github.com/codebridger/subturtle-dashboard-app/issues/86etp28k1) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etp28k1 implement freemium timer functionality in live session with modal alerts for session expiration ([3e87839](https://github.com/codebridger/subturtle-dashboard-app/commit/3e8783981341bf7c4a544f01052287b042ae8271)), closes [#86etp28k1](https://github.com/codebridger/subturtle-dashboard-app/issues/86etp28k1) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)eu01jz0 enhance PhraseCard component to handle 'linguistic' phrases by disabling submit button and preventing submission ([81796c6](https://github.com/codebridger/subturtle-dashboard-app/commit/81796c6c8cfcaacd14fac44ac4c6af25411094c4)), closes [#86eu01jz0](https://github.com/codebridger/subturtle-dashboard-app/issues/86eu01jz0) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)eu01jz0 enhance PhraseSchema and createPhrase function to support 'linguistic' type phrases, including additional fields for context and language information ([9a57ffe](https://github.com/codebridger/subturtle-dashboard-app/commit/9a57ffee336f6b0d0540279934532dd33014f37c)), closes [#86eu01jz0](https://github.com/codebridger/subturtle-dashboard-app/issues/86eu01jz0) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)eu01jz0 extend PhraseSchema to include detailed linguistic data structure, enhancing support for translation and contextual information ([93b9ae0](https://github.com/codebridger/subturtle-dashboard-app/commit/93b9ae0e94d7b525931541ec1c73293446102bf9)), closes [#86eu01jz0](https://github.com/codebridger/subturtle-dashboard-app/issues/86eu01jz0) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)eu01jz0 update PhraseCard component to dynamically handle translation and definition placeholders based on phrase type, and introduce computed property for translation value ([8769580](https://github.com/codebridger/subturtle-dashboard-app/commit/8769580d93a89e97b27e33ef5440fe611fdd89ad)), closes [#86eu01jz0](https://github.com/codebridger/subturtle-dashboard-app/issues/86eu01jz0) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewevg3v Internationalize Leitner components and integrate Leitner box statistics fetching and display. ([b3f9c4e](https://github.com/codebridger/subturtle-dashboard-app/commit/b3f9c4e48b69f7a1610881e89641747c9a8eb589)), closes [#86ewevg3v](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewevg3v) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewevg3v Update "Quota" label to "Cards Per Session" in English localization. ([531f124](https://github.com/codebridger/subturtle-dashboard-app/commit/531f1247c4f4841e6bff6d2a3ab93388751e3889)), closes [#86ewevg3v](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewevg3v) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewevg3y Implement common `PageHeader` and `Breadcrumb` components, updating bundle pages and documentation. ([93731d9](https://github.com/codebridger/subturtle-dashboard-app/commit/93731d9aeb9023245b8c5053cb22e7ad75d48b64)), closes [#86ewevg3y](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewevg3y) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewevg42 Implement custom Leitner review sessions for bundles with a dedicated frontend component and server-side logic. ([273304d](https://github.com/codebridger/subturtle-dashboard-app/commit/273304ddf5946d8db177a22ca3d08361bb6972b7)), closes [#86ewevg42](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewevg42) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewfyjet Enhance Leitner settings with timezone clarification for review intervals and add related translations. ([c2348f2](https://github.com/codebridger/subturtle-dashboard-app/commit/c2348f2e200de41eeee00826bfc9d536fc15b9eb)), closes [#86ewfyjet](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewfyjet) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewfyjet Implement a new TimezonePicker component and integrate it into the profile settings page, replacing the native select dropdown. ([b2dc50c](https://github.com/codebridger/subturtle-dashboard-app/commit/b2dc50c2705a5db234ee22456357bc829ff675cb)), closes [#86ewfyjet](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewfyjet) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewfyjet Implement automatic Leitner box schedule resynchronization when a user's timezone is updated. ([f747592](https://github.com/codebridger/subturtle-dashboard-app/commit/f747592008985a60639b4ab996bf73a2ce071c9e)), closes [#86ewfyjet](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewfyjet) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewfyjet Implement timezone support for Leitner box review scheduling and display. ([b3f240e](https://github.com/codebridger/subturtle-dashboard-app/commit/b3f240edeaefe3fd4639e96a497e34fe98a39db8)), closes [#86ewfyjet](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewfyjet) * [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)ewfyjet Implement user timezone setting ([2d3aef5](https://github.com/codebridger/subturtle-dashboard-app/commit/2d3aef5b94c60c3389a256ca5dd535365f5cd08c)), closes [#86ewfyjet](https://github.com/codebridger/subturtle-dashboard-app/issues/86ewfyjet) * Add @nuxtjs/i18n module for internationalization support ([03d7548](https://github.com/codebridger/subturtle-dashboard-app/commit/03d754824f29f1c2f705f3063a1a33aea581bfc6)) * add 3-tier pricing backend with 3-day credit-card trial [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkhcza ([5b37c61](https://github.com/codebridger/subturtle-dashboard-app/commit/5b37c61dc9e30298ba5204d6f90fcf7be210a4ba)), closes [#86exkhcza](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkhcza) * add Billing and Settings pages with navigation and subscription details ([48c6bc6](https://github.com/codebridger/subturtle-dashboard-app/commit/48c6bc67aa76447b3578384a448a7bd88723ab96)) * add ClickUp rules documentation and update package dependencies for improved functionality ([4759cb8](https://github.com/codebridger/subturtle-dashboard-app/commit/4759cb80e195b7ec896d61a8533f55c2c5b992f1)) * add CORS configuration to server for specified origins and methods ([b1836f0](https://github.com/codebridger/subturtle-dashboard-app/commit/b1836f0f7cf2506ae8806bb239801af2d4956249)) * add deployment workflows for EC2 and ECR, create Dockerfile for dashboard-v2, and update .gitignore and .dockerignore files ([856970e](https://github.com/codebridger/subturtle-dashboard-app/commit/856970e472d66e7e9d15a548436a53d6dd60801b)) * add dialog filtering in live session query and enhance live session record handling ([382b40d](https://github.com/codebridger/subturtle-dashboard-app/commit/382b40d371263b00af77e7470ea061793cedf554)) * Add e2e testing guide and apply authentication middleware to the board page. ([789f22a](https://github.com/codebridger/subturtle-dashboard-app/commit/789f22a7e714eaaa40a05094b2e468c8c4829bca)) * add error messages and navigation button to live session page ([025183e](https://github.com/codebridger/subturtle-dashboard-app/commit/025183eeb01003f074cf3285d70d8ff2adb25ec3)) * add expiration index for freemium credits based on duration configuration ([f3d99f9](https://github.com/codebridger/subturtle-dashboard-app/commit/f3d99f95ac958f647806f09a7adeafd8a36945ff)) * add freemium user limitation for allowed lived sessions and update related functionality ([04b5fa4](https://github.com/codebridger/subturtle-dashboard-app/commit/04b5fa424aa03b19ae6dbaf1c818835ea9681312)) * Add Google Meet to allowed CORS origins. ([247aa76](https://github.com/codebridger/subturtle-dashboard-app/commit/247aa769c0136460c8d5b1713cc25c8cdf6d865e)) * add install-extension nudge banner on dashboard [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkh0z3 ([a656a3d](https://github.com/codebridger/subturtle-dashboard-app/commit/a656a3de71405e91e0d475de881750323fda88da)), closes [#86exkh0z3](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkh0z3) * add mic level visualization and spacebar toggle, and include translation-masking mode in live sessions [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu ([042e67f](https://github.com/codebridger/subturtle-dashboard-app/commit/042e67fd375777b1c10e32bd4713ca309163b8a2)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * add native language selection for AI sessions and implement text input for live practice [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu ([a0b77ab](https://github.com/codebridger/subturtle-dashboard-app/commit/a0b77ab3fd97db6fb1480abe4b7bc8c2002e74f8)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * add new translation keys for Subscription and Billing sections, and update Sign Out labels ([0384fb8](https://github.com/codebridger/subturtle-dashboard-app/commit/0384fb808daa8eeb558f4785ce8e3dd57cf58307)) * add opt-in text-based message composer with microphone toggle fallback [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu ([de37822](https://github.com/codebridger/subturtle-dashboard-app/commit/de378220de14f04da75b7d50a63c7ff35bef641f)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * add profile reset functionality to subscription settings for testing purposes, including UI updates and backend integration ([dde8bde](https://github.com/codebridger/subturtle-dashboard-app/commit/dde8bdef6746016b4a6ba3dbda29b486a128fbe2)) * 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](https://github.com/codebridger/subturtle-dashboard-app/commit/fa73f329456719f2178112f1b904597884477a77)) * add session expiry message and update UI to display session expiration details ([8302996](https://github.com/codebridger/subturtle-dashboard-app/commit/8302996a641b4a474a907f9598819a72cd854cf9)) * add Sidebar component for profile navigation with tabs for Profile, Subscription, and Billing ([fb69dd5](https://github.com/codebridger/subturtle-dashboard-app/commit/fb69dd54e002d7af4c49b34dad9db686b4cff48f)) * add subscription settings page and profile management, update translations for subscription features ([d1e00ac](https://github.com/codebridger/subturtle-dashboard-app/commit/d1e00ac55d6e4af38d7b7c03ae958cfd1ceacac1)) * Add Teams.microsoft.com to allowed CORS origins. ([1b3d84c](https://github.com/codebridger/subturtle-dashboard-app/commit/1b3d84c837e8bb61c8d6d0c92a7bae56b1ca9d48)) * add ThemeSwitcher component and update layout to include theme selection; redirect root route to /statistic ([9d67f85](https://github.com/codebridger/subturtle-dashboard-app/commit/9d67f855e878ccb585217279ed27229460874a37)) * allow all origins in CORS configuration for dashboard server ([ef8ced8](https://github.com/codebridger/subturtle-dashboard-app/commit/ef8ced87be3bad7992222b7266da3be610d03318)) * allow wildcard origin in CORS configuration ([73282d4](https://github.com/codebridger/subturtle-dashboard-app/commit/73282d4f8092d9845c1cd821b30211ae75d0eb23)) * **analytics:** convention-named lifecycle events + missing engagement events ([001209f](https://github.com/codebridger/subturtle-dashboard-app/commit/001209fb7ce9f240cf7d0f0827c76c888ab8bd8a)) * **checkout:** embedded Custom Checkout with Adaptive Pricing localized prices ([3210cdd](https://github.com/codebridger/subturtle-dashboard-app/commit/3210cdd93a9ec3131244c93cf2eda0115e9be7d2)) * decrement freemium allocation on phrase deletion in bundle store for improved resource management ([b4b48c3](https://github.com/codebridger/subturtle-dashboard-app/commit/b4b48c35be5811d788fb00d04632706b7cc26531)) * disable submit button when phrase or translation is empty in PhraseCard component ([5495555](https://github.com/codebridger/subturtle-dashboard-app/commit/54955557011b5ab4292ea9eb803e5996c4253eae)) * Enhance `development/SKILL.md` with E2E testing and navigation guidelines, and new principles for testing, documentation, and UI component usage. ([16d4f81](https://github.com/codebridger/subturtle-dashboard-app/commit/16d4f816152322923bec3e8343b631d88fa15239)) * enhance CORS configuration to dynamically handle origins and log unauthorized requests ([fce9b74](https://github.com/codebridger/subturtle-dashboard-app/commit/fce9b7452abd0237f1dabae487bfa046536f3c05)) * enhance GenerativeCard and WordGenerativeCover components with click handling and navigation ([7e8b5ef](https://github.com/codebridger/subturtle-dashboard-app/commit/7e8b5ef39e251484db440c29a476f85865356700)) * enhance live session features by adding metadata support and updating UI components for session details and history ([f980555](https://github.com/codebridger/subturtle-dashboard-app/commit/f9805557072b097f7b1d407670541458025ffa65)) * enhance live session functionality with dynamic word handling and improved instructions ([d64023b](https://github.com/codebridger/subturtle-dashboard-app/commit/d64023b2ecea00540787dcdbb2f6669d38b1545e)) * enhance live session page with empty state handling and new session prompts ([b3274f7](https://github.com/codebridger/subturtle-dashboard-app/commit/b3274f793a26e5e91968b5b733ef5e80f01fc5ae)) * enhance phrase management with improved delete functionality and freemium allocation tracking ([2419740](https://github.com/codebridger/subturtle-dashboard-app/commit/2419740de425e123f8f5cbe2f36df0a01dec86ad)) * enhance PracticeToolScaffold with dynamic body class and integrate into live session page ([729cc0d](https://github.com/codebridger/subturtle-dashboard-app/commit/729cc0d119da468744698a6e565e23db11062cba)) * enhance subscription handling with freemium allocation and type updates ([6683bb1](https://github.com/codebridger/subturtle-dashboard-app/commit/6683bb1bca82314bd1bb902a9691013e7e1f8796)) * fetch subscription to update freemium allocation after starting live session ([88b4535](https://github.com/codebridger/subturtle-dashboard-app/commit/88b4535fd3d947d0d5a58a86b6a979bf401c91dd)) * **flashcard:** modularize card modes + unified flip toggle ([4249a0c](https://github.com/codebridger/subturtle-dashboard-app/commit/4249a0cd81df37c63bf4a16f5e352e0c1ba8af4c)) * **flashcard:** new translation shape + L3+ fill-in cloze ([62613d4](https://github.com/codebridger/subturtle-dashboard-app/commit/62613d4c7b57c7d32a6e5ad542aa676b05ed81e4)) * **gateway:** single-currency GBP checkout with Stripe Adaptive Pricing (S7) ([9bb38f5](https://github.com/codebridger/subturtle-dashboard-app/commit/9bb38f50cca530d4a3f084d5c9440c8fd95c475d)) * implement cancelSubscriptionByProviderAndSubscriptionId function in subscription service; enhance StripeAdapter to handle subscription deletion events and update subscription status management ([2ed6f15](https://github.com/codebridger/subturtle-dashboard-app/commit/2ed6f15799171c7aae7fa06f00a51a997ebf2913)) * implement create and update phrase functionality with freemium allocation management in bundle store and backend ([0c24754](https://github.com/codebridger/subturtle-dashboard-app/commit/0c24754806c4d11ba110d41d90ffd297a411b582)) * implement empty state for bundles page with user prompts and loading state management ([de51624](https://github.com/codebridger/subturtle-dashboard-app/commit/de51624fac483d0b5ae170df734ae143fc8478fe)) * implement freemium alerts with add phrase functionality in a new component ([50c78c9](https://github.com/codebridger/subturtle-dashboard-app/commit/50c78c96691ce93238cf414168bf7f02264b3df0)) * implement freemium allocation updates on phrase bundle creation and deletion ([f4a38d2](https://github.com/codebridger/subturtle-dashboard-app/commit/f4a38d2efb9a338372b1a3a7c3c52371a99959f9)) * implement getSubscription function to streamline subscription retrieval; refactor getSubscriptionDetails to utilize new function and enhance response normalization for Stripe payments ([096d06a](https://github.com/codebridger/subturtle-dashboard-app/commit/096d06a485bb6a1eafa55becb358f71b6ccf4cdc)) * implement live session store with conversation dialog handling ([805c7a2](https://github.com/codebridger/subturtle-dashboard-app/commit/805c7a2b63a859dabac9923336cbedda50baac8f)) * implement removePhrase function with freemium allocation update ([efc06dc](https://github.com/codebridger/subturtle-dashboard-app/commit/efc06dc7933ea2c31114c7801f54e1a96a0e6435)) * implement subscription page with monthly plan details and checkout functionality ([b8bedf6](https://github.com/codebridger/subturtle-dashboard-app/commit/b8bedf6507692c5d17be480baa5469c7a30688f5)) * implement subscription renewal [cacelletion and extnesion] for stripe integration ([9ce3808](https://github.com/codebridger/subturtle-dashboard-app/commit/9ce3808a14fa850918a707c305153f14b96b8975)) * improve phrase display and refactor active phrase handling in live session ([ffa987e](https://github.com/codebridger/subturtle-dashboard-app/commit/ffa987e6e7c9b8092a73f8c56de692ac530e6c1c)) * integrate StartLiveSessionForm component into bundle page and update modal trigger for improved user experience ([454382c](https://github.com/codebridger/subturtle-dashboard-app/commit/454382c24ead67c9cbccbcc33d29aabe56679708)) * **live-session:** add text-only conversation mode [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exr424h ([d9abac4](https://github.com/codebridger/subturtle-dashboard-app/commit/d9abac4a7e008d7889706918756bc39e532aa563)), closes [#86exr424h](https://github.com/codebridger/subturtle-dashboard-app/issues/86exr424h) * **live-session:** mode-aware limits in the Start-Live-Session modal ([f51aa46](https://github.com/codebridger/subturtle-dashboard-app/commit/f51aa46a0fad9a5060f91e026e612b58f3d008e7)) * **live-session:** mode-aware limits on the /sessions/new start screen ([4ea1c8a](https://github.com/codebridger/subturtle-dashboard-app/commit/4ea1c8afcbd0e02475e1bf86ccdf8aeb7ad134b3)) * **live-session:** single /practice/live-session gate + server voice list ([9bb25ec](https://github.com/codebridger/subturtle-dashboard-app/commit/9bb25ecf93f866d32f936399b1a5a03f378cb9be)) * **live-session:** single /practice/live-session gate + server voice list ([9dcea17](https://github.com/codebridger/subturtle-dashboard-app/commit/9dcea1798c01372f1f54d82ddd22d72f6c3835a5)) * persist Google profile picture as base64 in localStorage with broken-URL fallback [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkh0z3 ([8011909](https://github.com/codebridger/subturtle-dashboard-app/commit/8011909a49412e3bba3db17d4cff0034ea9f5adc)), closes [#86exkh0z3](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkh0z3) * rebuild subscription page for 3-tier pricing and cap-moment upgrades [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkhcza ([0430e26](https://github.com/codebridger/subturtle-dashboard-app/commit/0430e26a86165a86c54b902219c1e610df55a309)), closes [#86exkhcza](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkhcza) * refactor audio transcription handling in live session to improve event processing ([57c243e](https://github.com/codebridger/subturtle-dashboard-app/commit/57c243e05d77534a9e8bb5ff941d37f249f58d8f)) * refactor phrase schema and enhance createPhrase function to include translation_language and prevent duplicate phrases in bundles ([4c4cb3d](https://github.com/codebridger/subturtle-dashboard-app/commit/4c4cb3daddb2fb704941bb6bef62bcd3896b6ddd)) * Reorganize agent documentation by introducing a development skill, integrating lib-vue-components docs, and updating doc download paths with conditional markdown conversion. ([dcca8b2](https://github.com/codebridger/subturtle-dashboard-app/commit/dcca8b2c41fc47e735c18dda3ffc4f0a84f23606)) * reset session state on creation and improve native language detection for live sessions [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu ([9b8a85f](https://github.com/codebridger/subturtle-dashboard-app/commit/9b8a85fc620cb1bcaab0fbbb7587cff8100bb2a4)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * **schedule:** implement schedule service and tests CU-86erqa08y ([8a99fb8](https://github.com/codebridger/subturtle-dashboard-app/commit/8a99fb87678dc6bfc872b66ec37d336d62660be8)) * **sessions:** show live-session duration on history and detail pages ([f461783](https://github.com/codebridger/subturtle-dashboard-app/commit/f461783fc0e6c9110d9a33cfa5d2b51094c6242d)) * show dashboard version in a global footer [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exqazkq ([8e58fb5](https://github.com/codebridger/subturtle-dashboard-app/commit/8e58fb5febba3aec837c6ac35b1c5aa2c9969db2)), closes [#86exqazkq](https://github.com/codebridger/subturtle-dashboard-app/issues/86exqazkq) [#footer](https://github.com/codebridger/subturtle-dashboard-app/issues/footer) * simplify get_next_word handler and enhance session creation response ([ada1855](https://github.com/codebridger/subturtle-dashboard-app/commit/ada1855f419f5687849fd43d06048918b1e0eba6)) * **subscription:** add Stripe metadata entitlement parser and resolver (S1) ([873a1a0](https://github.com/codebridger/subturtle-dashboard-app/commit/873a1a0c4082baaf01d3d50f35bafa4bcebb3a9f)) * **subscription:** add voice-minute fields to subscription + free_credit, seed on grant (S4) ([ed1de09](https://github.com/codebridger/subturtle-dashboard-app/commit/ed1de09f61336992b9df11e0e5d9099907ac7c23)) * **subscription:** build getSubscriptionPlans from live Stripe with last-known-good cache (S3) ([97b92dc](https://github.com/codebridger/subturtle-dashboard-app/commit/97b92dc688539a37085997bc9d42764c4410d64a)), closes [hi#traffic](https://github.com/hi/issues/traffic) * **subscription:** cap Reader text chat — 60 chats/mo + 60 msgs/chat (S16) ([0de9fa6](https://github.com/codebridger/subturtle-dashboard-app/commit/0de9fa64dbc398eef7a8cf0537fc57cc4bd42ab0)) * **subscription:** enforce save_words, weekly_insights & live-session caps from entitlements ([1d76506](https://github.com/codebridger/subturtle-dashboard-app/commit/1d765068085ea78c57636781d8e078bddafd00eb)) * **subscription:** gate full session history behind session_history (Learner+) via list-live-sessions RPC ([de43b4c](https://github.com/codebridger/subturtle-dashboard-app/commit/de43b4cd674d571182aea4595372f81cbe77b981)) * **subscription:** gate the sessions page via list-live-sessions RPC and debit voice minutes on session end ([f7ab65b](https://github.com/codebridger/subturtle-dashboard-app/commit/f7ab65b335e9d9abf01060210cec845cc3b344a7)) * **subscription:** global upgrade modal when a tier limit blocks an RPC ([1e67ae9](https://github.com/codebridger/subturtle-dashboard-app/commit/1e67ae9cf7a6faa96c46319aefbabc67b8206de2)) * **subscription:** grant entitlements from Stripe metadata with idempotency (S2) ([fb760b7](https://github.com/codebridger/subturtle-dashboard-app/commit/fb760b7384fa89623f8c2d0139ab1173c5f24cfc)) * **subscription:** localize pricing-card prices via Adaptive Pricing (EUR for EU) ([a8c453f](https://github.com/codebridger/subturtle-dashboard-app/commit/a8c453f981d240a9ce6733ae52df35c70ed7fec1)) * **subscription:** make paid-tier copy, badge, highlight & trial Stripe-driven (single source of truth) ([6ea0bc9](https://github.com/codebridger/subturtle-dashboard-app/commit/6ea0bc998169e513a8cd12eb202fdd08318fab9e)) * **subscription:** meter voice minutes per tier (gate + debit) and fix paid-tier entitlement lookup ([b0b55c6](https://github.com/codebridger/subturtle-dashboard-app/commit/b0b55c6dedeb02ce5838b2e5561eb6d564c192ba)) * **subscription:** Reader text-chat counter + Reader-specific limit copy (S17) ([06460d0](https://github.com/codebridger/subturtle-dashboard-app/commit/06460d064c0993f3f94ab3baada60a25d51181d3)) * **subscription:** render pricing page from backend plans, drop currency picker (S9) ([0b27c00](https://github.com/codebridger/subturtle-dashboard-app/commit/0b27c00c2c0ae5b1e9b3ef47c8bd0f44b92e0e96)) * **subscription:** script-provision the Stripe portal config, with setup guards and a startup check ([7762f00](https://github.com/codebridger/subturtle-dashboard-app/commit/7762f00ef9e7f2ae9a053ac8132ff927e1d01b38)) * **subscription:** shared FeatureLocked panel — gate /statistic, refactor /sessions (S15) ([4f0563c](https://github.com/codebridger/subturtle-dashboard-app/commit/4f0563c696e20c521a8eebef5c43142c4f7d1f7a)) * **subscription:** show all plan entitlements on the active-plan "This month" card ([6248228](https://github.com/codebridger/subturtle-dashboard-app/commit/62482284c742343d2671b7925a3ec2c1e64548cc)) * **subscription:** show Starter as a plan card with current-plan and downgrade-to-free states ([31355ef](https://github.com/codebridger/subturtle-dashboard-app/commit/31355eff2432689652cd38fca6401b8e9514567c)) * **subscription:** Starter free-tier usage card on the subscription page ([455fe63](https://github.com/codebridger/subturtle-dashboard-app/commit/455fe63478f3ad61f771fa8c581a737ade11415b)) * **subscription:** voice balance meter + "This month" section (S12) ([2ab6a20](https://github.com/codebridger/subturtle-dashboard-app/commit/2ab6a209ab021ef779476c10df8202b399e4bdee)) * **subscription:** voice top-up packs — grant webhook + active_top_ups payload (S11) ([aeaf21c](https://github.com/codebridger/subturtle-dashboard-app/commit/aeaf21c0ee90017ee23c45e59b477f6deb72640e)) * **subscription:** voice top-up purchase flow + /settings/billing (S14) ([2d8ff15](https://github.com/codebridger/subturtle-dashboard-app/commit/2d8ff156cc24fc5516a849ac589652732d0b1ed7)) * **subscription:** voice-cap 80% banner + 100% Start-Voice-Chat modal (S13) ([60cd505](https://github.com/codebridger/subturtle-dashboard-app/commit/60cd505c57a9a826438d86da5b6934e4fb1da66a)) * **translation,phrase:** chunk-aware save schema, AI advisor, bundle suggestion ([82abb5e](https://github.com/codebridger/subturtle-dashboard-app/commit/82abb5edfe456028d4d9c540bcc9f1cb3e96645a)) * **translation:** per-chunk definition for chunk-aware save ([363fe39](https://github.com/codebridger/subturtle-dashboard-app/commit/363fe395daecf55f4fac5fc3266b47134a79e46d)) * update @modular-rest/server dependency to version 1.15.0 ([325a9d8](https://github.com/codebridger/subturtle-dashboard-app/commit/325a9d845c26c9cd83169866278de29a47347e12)) * update createPhrase functionality to support multiple bundle IDs for improved phrase management and access verification ([ef151f5](https://github.com/codebridger/subturtle-dashboard-app/commit/ef151f5df68b4f92e0ab76bacca88b237bbdc8b7)) * update dashboard navigator to reduce the nesting complexity, the nvigator dosent has nested items now. ([94be814](https://github.com/codebridger/subturtle-dashboard-app/commit/94be8147685c00d8cb61cf1fbaa468f314ad33d5)) * update Dockerfile to include .npmrc and modify GitHub Actions workflow to create .npmrc file during deployment ([8394f42](https://github.com/codebridger/subturtle-dashboard-app/commit/8394f42b32411c6ecd2c3ff1674d59ff24c3fb2c)) * update Gemini token tracking to include tool use, thoughts, and dedicated video token metrics [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)etkgdqu ([8cebf65](https://github.com/codebridger/subturtle-dashboard-app/commit/8cebf65672a1d4088d2284f42ea71349bbd946f6)), closes [#86etkgdqu](https://github.com/codebridger/subturtle-dashboard-app/issues/86etkgdqu) * update live session page to ensure bundleId is a string and maintain consistent structure ([ea8cb07](https://github.com/codebridger/subturtle-dashboard-app/commit/ea8cb07673eb9bfff2a510993bb33b9541457f8a)) * update live session page with improved layout and dynamic phrase display ([a65814a](https://github.com/codebridger/subturtle-dashboard-app/commit/a65814a124346f258231f6b3f1876ffab8e594c5)) * update membership plans page with new subscription terminology and enhanced UI components ([f101e12](https://github.com/codebridger/subturtle-dashboard-app/commit/f101e1251da72386196fdc655584e8ab5854d54b)) * update Pro plan feature label to reflect 60 monthly chat limit ([1f17577](https://github.com/codebridger/subturtle-dashboard-app/commit/1f175774f832deed9d2d17bab7cfe26b12ec7f08)) * update subscription button logic in settings page; differentiate between freemium and paid plans for better user experience ([26631c0](https://github.com/codebridger/subturtle-dashboard-app/commit/26631c0a0de6fb087f50db1eed52d75cad2169a7)) * update subscription status handling to include additional states and modify active subscription query logic ([3d74382](https://github.com/codebridger/subturtle-dashboard-app/commit/3d743822bdd8cd8041164487d8e148e3a1c1a88e)) ### Performance Improvements * **live-session:** cache static text-turn prefix to cut token cost [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exr424h ([636a25a](https://github.com/codebridger/subturtle-dashboard-app/commit/636a25a1fe2ce1e63412b7d19d824aa665c320dd)), closes [#86exr424h](https://github.com/codebridger/subturtle-dashboard-app/issues/86exr424h)
…ms for L3+ fill-in #86exnxph5 Surface two flat fields on every item returned by get-review-session (getDueItems) and get-custom-review-session (getCustomReviewItems): - confirmed_chunk: text of the phrase's primary chunk (highest confidence, tie-break earliest), or null when the phrase has no chunks so the renderer falls back to the recognition card. - source_sentence: the phrase's context, kept whole (no AI-trim), or null. Read-path only; no schema change. Ratified by Council 005 (primary-chunk rule). Adds a ReviewItem type and unit tests covering highest-confidence selection, tie-break, and the null-fallback cases. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…w-bundle-return-confirmed_chunk-source_sentence-L3-fill-in_Navid-Shad feat(leitner): return confirmed_chunk + source_sentence on review items for L3+ fill-in #86exnxph5
# [1.0.0-dev.2](v1.0.0-dev.1...v1.0.0-dev.2) (2026-07-03) ### Features * **leitner:** return confirmed_chunk + source_sentence on review items for L3+ fill-in [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exnxph5 ([2856a3b](2856a3b)), closes [#86exnxph5](https://github.com/codebridger/subturtle-dashboard-app/issues/86exnxph5)
…ettings surfaces #86exnxp4t #86exnxpez Introduce a per-user Pool that holds newly saved phrases for a first-encounter (encode) step before they enter Leitner spaced repetition. Backend (86exnxp4t): - New pool module (collection, PoolService, get-pool / complete-pool-session RPCs). - Route phrase saves (insert-one/insert-many) into the Pool instead of Leitner L1. - Forgot×2 at L1 re-routes a stuck card back to the Pool (reuses consecutiveIncorrect). - Daily 03:00 age-out job promotes items past the user's cut-off into L1 silently. - Consolidate reviewHour/reviewInterval + new poolAgeCutoffDays/poolChunkSize on the profile doc, with a profile-first fallback and a one-time backfill script. - promote() is crash-safe/idempotent via addPhraseToBox onlyIfAbsent; encountered flag distinguishes encoded-then-promoted from aged-out. Frontend (86exnxpez): - Pinia pool store; count-adaptive PoolCard on /board (Start / Do the next N). - PoolReviewSession + PoolReviewItem encode flow reusing ClozeCard; progress dots. - Pool settings section on /settings/preferences (age cut-off, chunk size, review time). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Split the preferences page into a segmented Smart Review / Pool switcher so only one settings domain (and its single save bar) shows at a time, replacing the two stacked blocks with dueling save controls. - Rebuild the Pool settings as a self-contained card (icon header, divided rows, one save footer). - Adopt "Study" terminology in the sidebar: PRACTICE section -> STUDY, and the settings link renamed to "Study Settings" and moved to the end of the section (nav + profile menu). The in-tab card title stays "Smart Review Settings". Presentation/labels only — no behavior change; the update-settings flow is intact. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ot-2-Pool-routing-data-model-age-out-settings-persistence_Navid-Shad Pool system forgot 2 pool routing data model age out settings persistence navid shad #86exnxp4t #86exnxpez
# [1.0.0-dev.3](v1.0.0-dev.2...v1.0.0-dev.3) (2026-07-03) ### Features * **pool:** Pool encode queue, Forgot×2 routing, age-out, and board/settings surfaces [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exnxp4t [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exnxpez ([f6ebc1d](f6ebc1d)), closes [#86exnxp4t](https://github.com/codebridger/subturtle-dashboard-app/issues/86exnxp4t) [#86exnxpez](https://github.com/codebridger/subturtle-dashboard-app/issues/86exnxpez)
…ith pilotui modal #86exnxphy The Leitner flashcard runner called non-existent RPCs (get-review-bundle / submit-review-result), so its review mode never loaded cards, and ended a session with a raw browser alert(). Repoint it to the real get-review-session / submit-review endpoints (matching LeitnerReviewSession's shapes), replace the completion alert with a pilotui Modal (confetti + "Back to Board"), and convert the sibling save-error alert to a toastError. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…end-of-session-alert-with-a-pilotui-modal-toast_Navid-Shad fix(leitner): use real review RPCs and replace end-of-session alert with pilotui modal #86exnxphy
# [1.0.0-dev.4](v1.0.0-dev.3...v1.0.0-dev.4) (2026-07-04) ### Bug Fixes * **leitner:** use real review RPCs and replace end-of-session alert with pilotui modal [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exnxphy ([9543401](9543401)), closes [#86exnxphy](https://github.com/codebridger/subturtle-dashboard-app/issues/86exnxphy)
…ich Stripe lifecycle events #86exkh107 Close the Step 5 instrumentation gaps against the metrics framework (codebridger/subturtle-docs). Adds the activation-funnel and trial-to-paid events that were still missing, using the canonical [object]_[action] naming convention: - account_created (server-truth) on the new-user branch of both Google OAuth paths; props signup_provider, oauth_timezone, referrer. - phrase_saved_first-time (server-truth) on a user's first-ever phrase in createPhrase; props source_platform, language_pair. - pricing-page_viewed (client) on the subscription page with from_surface, threaded from the cap/limit banner entry points. - Enrich the Stripe lifecycle events: trial_started +currency; subscription_started +currency +subscription_id; subscription_canceled +tier +lifetime_value_cents (summed from payment records) +cancel_reason. Out of scope (per decisions): extension_installed (extension repo) and fluent_waitlist_signed_up (no dashboard trigger yet). Mixpanel funnels and the L1 Forgot-rate aggregate are defined for build-out once these deploy. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…bort the subscription page mount #86exkh107 When NUXT_PUBLIC_MIXPANEL_PROJECT_TOKEN is unset (CI/e2e), the Mixpanel plugin skips init and analytic.track() throws on the uninitialised instance. Fired at the top of onMounted, that aborted the mount before fetchPlans(), so the plan cards never rendered (Playwright subscription-ui "four plan cards" failed). Wrap the analytics call in try/catch — instrumentation is best-effort and must never break the page. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…tation-activation-funnel-trial-to-paid_Navid-Shad Cu 86exkh107 step 5 instrumentation activation funnel trial to paid navid shad
# [1.0.0-dev.5](v1.0.0-dev.4...v1.0.0-dev.5) (2026-07-10) ### Bug Fixes * guard pricing-page_viewed track so a token-less Mixpanel can't abort the subscription page mount [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkh107 ([71cf5e0](71cf5e0)), closes [#86exkh107](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkh107) ### Features * wire account_created, first-save & pricing-page analytics + enrich Stripe lifecycle events [#86](https://github.com/codebridger/subturtle-dashboard-app/issues/86)exkh107 ([5f49c7c](5f49c7c)), closes [#86exkh107](https://github.com/codebridger/subturtle-dashboard-app/issues/86exkh107)
Automated PR ReviewPrimary PR: Dev → Main (rolling integration PR) Task alignment#86exkh107 — Instrumentation (activation funnel + trial-to-paid)
#86exnxphy — Replace Leitner end-of-session
#86exnxp4t — Pool system backend
#86exnxpez — Pool UI surfaces
#86exnxph5 —
#86exqazkq — Show versions
Commit messages
Convention check🔴
Action needed: confirm the auto-import path, or add: const { authUser } = storeToRefs(useProfileStore())at the top of the 🟡 PHRASE_SAVED_FIRST_TIME: "phrase_saved_first-time",All other events use underscores throughout ( 🟡
🟡 Circular dependency via Both Prior review follow-upNo prior automated or manual reviews found on this PR. VerdictREQUEST CHANGES The Generated by Claude Code |
📋 Summary
This PR includes various fixes and features mainly focused on analytics instrumentation, UI improvements, and system enhancements. Key updates are:
pricing-page_viewedtracking to avoid aborting subscription page mount without a Mixpanel token.account_created,first-save, andpricing-pageanalytics, along with enriching Stripe lifecycle events.🔗 Related Tasks
#86exkh107 - Instrumentation activation funnel trial to paid
#86exnxphy - Replace Leitner end-of-session alert with a PilotUI modal toast
#86exnxp4t - Pool system: Forgot 2 Pool routing, data model, age-out, settings persistence
#86exnxpez - Pool system board/settings surfaces
#86exnxph5 - Update get review bundle return confirmed chunk and source sentence for L3+ fill-in
#86exqazkq - Show versions on both dashboard and extension
📝 Additional Details
.playwright-mcpdirectory to.gitignoreto prevent committing test artifacts.📜 Commit List