**ci:** use GITHUB_TOKEN for release-health branch protection reads ([#67](https://github.com/KitsuneKode/js-questions-lab/issues/67)) ([a414b0a](https://github.com/KitsuneKode/js-questions-lab/commit/a414b0a968a8408836ccd431a93e83c1fdb2803f))
**ci:** use git allowlist for metadata-only fast path detection ([#63](https://github.com/KitsuneKode/js-questions-lab/issues/63)) ([edc3893](https://github.com/KitsuneKode/js-questions-lab/commit/edc3893b0200ca5df571e5ba80e39c172239304c))
**ci:** fast-path metadata-only PRs and skip redundant dev push CI ([#59](https://github.com/KitsuneKode/js-questions-lab/issues/59)) ([bb58fb2](https://github.com/KitsuneKode/js-questions-lab/commit/bb58fb2cf29c2bd083aa50e7f08e5a0b45b30651))
**ci:** promote dev before release metadata ([#45](https://github.com/KitsuneKode/js-questions-lab/issues/45)) ([db5a173](https://github.com/KitsuneKode/js-questions-lab/commit/db5a1736d05d7b71da2cafe48343e35ecc616bf8))
add dom event replay ui and tests ([99db9dc](https://github.com/KitsuneKode/js-questions-lab/commit/99db9dc9e9cf744fadce8b3acc63dac98fdcbbc8))
add global sticky advertisement banner ([ae3d8f1](https://github.com/KitsuneKode/js-questions-lab/commit/ae3d8f1a6d912b8c2bf0ebe87a4acfa84a416fe1))
add Monaco editor, scratchpad, and resizable IDE layout ([32ff4c2](https://github.com/KitsuneKode/js-questions-lab/commit/32ff4c2321e082750615f157c5dc60a74cc11b6e))
add related topics component for internal linking ([23c827d](https://github.com/KitsuneKode/js-questions-lab/commit/23c827d6077f595c51310363a5754ec27de278ec))
complete dashboard intl and fix formatting errors ([835cb5e](https://github.com/KitsuneKode/js-questions-lab/commit/835cb5ee5b5b2215c26252f068d988329f78297f))
complete micro-copy intl and fix rich text syntax ([689cdb7](https://github.com/KitsuneKode/js-questions-lab/commit/689cdb7558eaaf13f5a1c5b43d61cf941be01143))
complete Obsidian Terminal UI redesign across all screens ([8bdde0e](https://github.com/KitsuneKode/js-questions-lab/commit/8bdde0e0332d32d9e4dae042f941e469a6a84ace))
complete Phase 4 teaching improvements and UI polish ([e9631a1](https://github.com/KitsuneKode/js-questions-lab/commit/e9631a14f946cc0d53d4fc18213e93d7415d3385))
**content:** add resources.json + merge into question loader at build time ([fd9d008](https://github.com/KitsuneKode/js-questions-lab/commit/fd9d008ba65fcaf1085399aae7c9a0ba1c687954))
**credits:** show upstream commit hash + update actions to Node 24 ([500c799](https://github.com/KitsuneKode/js-questions-lab/commit/500c799564ba686cd60084d64d0b245e244d674b))
**debugger:** expand Visual Debugger modal to full-screen size ([aaa6751](https://github.com/KitsuneKode/js-questions-lab/commit/aaa6751b09053065c48201e5c20b71e2ee8abee4))
**engagement:** leaderboard page, dashboard xp/streak badges, and i18n ([a3254c9](https://github.com/KitsuneKode/js-questions-lab/commit/a3254c91d8e3e4de1878c5826c2dfa1920a30398))
**engagement:** wire xp + streak sync to supabase on sign-in and answer ([c6ebbd4](https://github.com/KitsuneKode/js-questions-lab/commit/c6ebbd468b79ed4a09a681997ebb5d22b072f341))
**engagement:** xp engine, streak tracker, ui badges, resources loader ([e0c2a74](https://github.com/KitsuneKode/js-questions-lab/commit/e0c2a74afabd42c301ad935a6e65aa7f607fca65))
**engagement:** xp scoring engine, streak tracker, and ui badges ([5e431b9](https://github.com/KitsuneKode/js-questions-lab/commit/5e431b911f199a75154a02aac32a442fb9bc625c))
**filters:** add FilterPendingContext overlay for spinner over dimmed grid, no layout shift ([01e18c9](https://github.com/KitsuneKode/js-questions-lab/commit/01e18c9e8edabf5d2b5b8edbbb95f849a54b9d77))
**i18n:** add intl for DOM event simulator, scratchpad, and recommendation labels ([cbd4187](https://github.com/KitsuneKode/js-questions-lab/commit/cbd418723c18c3f62689d8bfc50b6011168f7160))
**i18n:** add intl support for Previous/Next in PaginationNav ([ab2ee99](https://github.com/KitsuneKode/js-questions-lab/commit/ab2ee99d94f3b5144262e12fc1db2266b057e50f))
**landing:** add react practice bento section and restructure page order ([6d99766](https://github.com/KitsuneKode/js-questions-lab/commit/6d997665d562c9422a1f8fedb71354195a18da87))
**landing:** react practice bento section and page restructure ([d302852](https://github.com/KitsuneKode/js-questions-lab/commit/d30285243dab2d90e9a88bde79507e42ef77381f))
**nav:** add leaderboard link; apply engagement db schema ([ee664b3](https://github.com/KitsuneKode/js-questions-lab/commit/ee664b3df448b96c832874f30c852b88aefc1ed0))
**nav:** add viewTransition cross-fades and question number morphing ([1fe364d](https://github.com/KitsuneKode/js-questions-lab/commit/1fe364d406a43fc3ce8e6bddc5436ed912e7ed57))
**nav:** add viewTransition cross-fades and question number morphing ([16d6b58](https://github.com/KitsuneKode/js-questions-lab/commit/16d6b582a73bbce4f85d75ee078e40e8d8eb93fe))
new IDE question page with Monaco editor and scratchpad ([51109b2](https://github.com/KitsuneKode/js-questions-lab/commit/51109b29c43220c18d4c5bd5d73cd0451e81dddf))
persistent practice mode and default to quiz mode ([23b39ab](https://github.com/KitsuneKode/js-questions-lab/commit/23b39ab948889a464359fd40c4a206e6e8e35638))
platform-wide intl support and UI polish ([5a00330](https://github.com/KitsuneKode/js-questions-lab/commit/5a00330ef1c015b5c33d0e3b1bd4eee8326eec20))
**questions:** add Resources panel and Bookmarks filter chip ([9e05a8c](https://github.com/KitsuneKode/js-questions-lab/commit/9e05a8ce8ebe21c8c8d857ac1a63cabd373b95fa))
rebrand app as JS Questions Lab ([1e355b4](https://github.com/KitsuneKode/js-questions-lab/commit/1e355b445d50efc9d50ff7c99b750262692c9d73))
redesign contact page and integrate Web3Forms ([5d625d0](https://github.com/KitsuneKode/js-questions-lab/commit/5d625d05b4c3c46980accc9fe2eecc035f664737))
**runtime:** harden execution flow and polish replay tools ([b17ddf8](https://github.com/KitsuneKode/js-questions-lab/commit/b17ddf8416da06c7699ccf05299d55b881169df6))
**seo:** implement comprehensive SEO and LLM optimization ([bd81256](https://github.com/KitsuneKode/js-questions-lab/commit/bd81256c23fb2bae119a5ddbdb2a321cc4a6c40e))
setup production tooling, active recall mode, and rename to js-mastery-atlas ([e2fef17](https://github.com/KitsuneKode/js-questions-lab/commit/e2fef177fe9e60968e01c089a57d720db4ed1f53))
**supabase:** rls migration for native auth + local dev config ([60977b6](https://github.com/KitsuneKode/js-questions-lab/commit/60977b639be9f3cb74b72a002c2ae3a983623d1f))
**ui:** add loading skeletons and improved filter transitions ([d2c8a69](https://github.com/KitsuneKode/js-questions-lab/commit/d2c8a69c0cfa3d9ba9daabae3d322720442a2e3a))
**ui:** apply high-fidelity interaction polish to filters and header ([07792ee](https://github.com/KitsuneKode/js-questions-lab/commit/07792eeb834bb15b771c6a847da7181b0a973dd9))
**ui:** convert Visual Debugger to side sheet layout ([7a96b97](https://github.com/KitsuneKode/js-questions-lab/commit/7a96b97c7ac108f1ff2b43c234b56d45a0163fee))
**ui:** implement Dark Forge aesthetic redesign ([7f231e5](https://github.com/KitsuneKode/js-questions-lab/commit/7f231e54bbd2ff4f30293b35268ba27d48591245))
**ui:** implement difficulty filtering and fix page paddings ([315b827](https://github.com/KitsuneKode/js-questions-lab/commit/315b827e78c92f22f9f6d259652ad3005e5dbfbb))
**ui:** move previous button to right side of ide header ([6623231](https://github.com/KitsuneKode/js-questions-lab/commit/662323101b1a4651b76163dd7a91452e0232cb6e))
**ui:** redesign call stack visualization with vertical layout and physics animations ([403ac8f](https://github.com/KitsuneKode/js-questions-lab/commit/403ac8f30df584bd7fa519cf1bc76412a3d317be))
**ui:** redesign js interview atlas with cyber-minimalist aesthetic and fix code block rendering ([8ebbc33](https://github.com/KitsuneKode/js-questions-lab/commit/8ebbc33f7007699518bb5691aa8ea57c7828dc33))
unify question scope between list and detail ([db91cee](https://github.com/KitsuneKode/js-questions-lab/commit/db91ceec4a254452812e404d4e8108534ab7f730))
**web:** optimize rendering, auth redirects, and dashboard UX ([2eb655a](https://github.com/KitsuneKode/js-questions-lab/commit/2eb655aad0c99ec712d82bf027ef51df8ac1125d))
Behoben
**a11y:** add DialogTitle to Visual Debugger dialog ([d22547d](https://github.com/KitsuneKode/js-questions-lab/commit/d22547d9b06ed1aabb0b2546429a067404ef1504))
add Monaco editor to question code display ([28ae98a](https://github.com/KitsuneKode/js-questions-lab/commit/28ae98a9b04c3c803d2e0cc664d31095cc30bc5b))
add rel="noopener noreferrer" to external links ([be1ba27](https://github.com/KitsuneKode/js-questions-lab/commit/be1ba27a3997b65ea71f60bff87095d7ac7f0d45))
add Run button and terminal output to Question tab ([8ddba75](https://github.com/KitsuneKode/js-questions-lab/commit/8ddba75047e0b102cea9454832441d4c0b7d07b3))
add setInterval support to worker sandbox ([d06aa8d](https://github.com/KitsuneKode/js-questions-lab/commit/d06aa8de4271846eed16d8297ff7240e96485a0c))
add Suspense boundary for question detail loading state ([36096e9](https://github.com/KitsuneKode/js-questions-lab/commit/36096e9c19f99311b69668daf4672b5cd69fcf18))
**auth:** add server-side fail fast check for clerk keys ([6173733](https://github.com/KitsuneKode/js-questions-lab/commit/6173733372e23eb26107fc56e5f32c9c11c655cb))
**auth:** align clerkEnabled constraints with AuthProvider ([3eb5176](https://github.com/KitsuneKode/js-questions-lab/commit/3eb51765ce60bbf989d8588637a3642d72835775))
**build:** define layout metadataBase and turbopack external trace ([36f4196](https://github.com/KitsuneKode/js-questions-lab/commit/36f41964bc769d6682d94a4187907bbad1c3efdd))
change Sheet z-index from z-[100] to z-50 ([4e2a6eb](https://github.com/KitsuneKode/js-questions-lab/commit/4e2a6ebc3e83ee6227a16778342bfceafee2f6bd))
**ci:** add CLERK_SECRET_KEY placeholder and polish kbd styling ([7b4b400](https://github.com/KitsuneKode/js-questions-lab/commit/7b4b40058d06a42d0b99fa872b6121946a8dcf09))
**ci:** turborepo environment stripping in e2e ([6fd0019](https://github.com/KitsuneKode/js-questions-lab/commit/6fd001998418627a2b89ed9a5b16222eea11610d))
code quality and UI cleanup ([76daa6b](https://github.com/KitsuneKode/js-questions-lab/commit/76daa6be97207acfd6be0255a94879a40614e376))
compute weekly leaderboard with running clamp semantics ([919cce4](https://github.com/KitsuneKode/js-questions-lab/commit/919cce4382b96ec341f06084114be34da8f94e63))
correct progress bar mastery calculation and totalQuestions ([1fd5934](https://github.com/KitsuneKode/js-questions-lab/commit/1fd59341295882dea0aff4ff4da569406ffd8619))
critical SEO improvements - metadataBase, sitemap, auth noindex, breadcrumbs, OG images ([98e2fd9](https://github.com/KitsuneKode/js-questions-lab/commit/98e2fd911a767672c789a7324a6c8596be680c5b))
**db:** mark leaderboard CTEs recursive in migration ([8eaa4db](https://github.com/KitsuneKode/js-questions-lab/commit/8eaa4db5c6b6f85dc125f3d5de06fdd883574162))
**debugger:** constrain code editor height in Visual Debugger ([cf759c7](https://github.com/KitsuneKode/js-questions-lab/commit/cf759c7db2c909a9bd5a056a558fef0a6fec1773))
**debugger:** match Event Loop Replay dialog structure ([4e02dfe](https://github.com/KitsuneKode/js-questions-lab/commit/4e02dfe0df0e5fadacbc3e8da1eb002a7002dc82))
**debugger:** match Event Loop Replay dialog styling ([7fa61e4](https://github.com/KitsuneKode/js-questions-lab/commit/7fa61e45a8cf8f8a0a54149c1a817a41434861cc))
**engagement:** address coderabbit review issues on xp engine ([614dc00](https://github.com/KitsuneKode/js-questions-lab/commit/614dc0086e6f6552f45a152c59e762df63cb8adf))
fail fast when Web3Forms access key is missing ([08637bc](https://github.com/KitsuneKode/js-questions-lab/commit/08637bc7fc0a5020e6571717049aca7451e96843))
**filters:** replace useOptimistic with useState for reliable multi-tag deselection ([78a2d63](https://github.com/KitsuneKode/js-questions-lab/commit/78a2d6358f32a47a4b11cf75b3ff28015a6c6296))
**filters:** useOptimistic for instant tag/difficulty deselection ([b8dfe64](https://github.com/KitsuneKode/js-questions-lab/commit/b8dfe641a5d8c5215a695725e5d52ab5e894f6d6))
global K shortcut for scratchpad and remove navigation restrictions ([bc8ae5a](https://github.com/KitsuneKode/js-questions-lab/commit/bc8ae5aa8a2ae8be51a8861764b850173dcc3268))
handle Japanese questions with no space after period in heading ([31726af](https://github.com/KitsuneKode/js-questions-lab/commit/31726afca5053f3a9597e7a91ea9008fb02fac32))
harden and cache leaderboard access ([16dd9a3](https://github.com/KitsuneKode/js-questions-lab/commit/16dd9a38b98109f77db145fed39bfa8e8e047274))
harden engagement schema defaults and policies ([b45be86](https://github.com/KitsuneKode/js-questions-lab/commit/b45be86db341c07ae7254b1774be60e90fefafca))
**ide:** address CodeRabbit review issues and stabilize e2e tests ([f19fc03](https://github.com/KitsuneKode/js-questions-lab/commit/f19fc03cdaabf10c069c8550fb74a4e86245853d))
**ide:** align loading skeleton layout with actual IDE panel structure ([78a2d63](https://github.com/KitsuneKode/js-questions-lab/commit/78a2d6358f32a47a4b11cf75b3ff28015a6c6296))
**ide:** dynamic ssr:false for QuestionIDEClient — fixes broken layout on hard refresh ([55ad77f](https://github.com/KitsuneKode/js-questions-lab/commit/55ad77f158237509a182bb558263fe6b5adac7a8))
implement progress system sync and review badge ([9f8f48f](https://github.com/KitsuneKode/js-questions-lab/commit/9f8f48f9c88652d308bca3ae234a5821e151fa14))
improve sign-in/sign-up page layout with proper container and centering ([4cd7d50](https://github.com/KitsuneKode/js-questions-lab/commit/4cd7d507e2bd2acc3ab01d4e18bf6008f48e540e))
**landing:** document patterns array intentionally english (technical terms) ([7a950f4](https://github.com/KitsuneKode/js-questions-lab/commit/7a950f4e5da2befcf5e89da7b831475d1499f438))
make engagement scoring server authoritative ([70e5cb3](https://github.com/KitsuneKode/js-questions-lab/commit/70e5cb3e2f654cb6108d6fd0f1a52afb6a16d762))
make xp ledger idempotent and persist authoritative totals ([017cb1e](https://github.com/KitsuneKode/js-questions-lab/commit/017cb1ecfb25c585b6af493a6430fb80096547e3))
only run hide-on-scroll logic when hideOnScroll is true ([8c23676](https://github.com/KitsuneKode/js-questions-lab/commit/8c23676985898ab8c0337d79cd055449c0e2bc89))
parse anchor tags in Japanese question headings (questions 55, 70, 79) ([60f7ea1](https://github.com/KitsuneKode/js-questions-lab/commit/60f7ea10b8a2887b8b69cdcd78cda24737646e13))
progress bar, content tags, tests, and schema ([0ba571f](https://github.com/KitsuneKode/js-questions-lab/commit/0ba571fd95ab2bdfbb531be4ba9aa8d3f2dd70bf))
**progress:** remove dispatch from public context interface ([a5e419f](https://github.com/KitsuneKode/js-questions-lab/commit/a5e419f732345ac060dadebb643e2dc58ca4bdad))
**questions:** aria-expanded on resources panel, simplify bookmark onclick guard ([db3b855](https://github.com/KitsuneKode/js-questions-lab/commit/db3b855755b0bf556f18f1b7a5e95b5f6141759a))
quote leaderboard return column names in rpc migrations ([ed0f37f](https://github.com/KitsuneKode/js-questions-lab/commit/ed0f37f1b1d1591257e95181293dc6e7db825c13))
refine content tag categorization and add new tags ([0e14fe5](https://github.com/KitsuneKode/js-questions-lab/commit/0e14fe5e9de32617b84f4b0fcc6852c9bac28dce))
remove all explicit any types from babel-transform ([f77ffc3](https://github.com/KitsuneKode/js-questions-lab/commit/f77ffc352992ec65531485f3aa20b5d1cbd80d6a))
remove server action directive from leaderboard module ([0e339e2](https://github.com/KitsuneKode/js-questions-lab/commit/0e339e23bae57c4850821b3579d7e64d7452774b))
resolve 10 localization and type issues across codebase ([fda6e4c](https://github.com/KitsuneKode/js-questions-lab/commit/fda6e4cb6b94eb28dab8d8d01f9a162ffb48a1d9))
resolve all lint issues and improve CI workflow ([3ac13bd](https://github.com/KitsuneKode/js-questions-lab/commit/3ac13bdd616be4db42bc6e859bbeeb8260f67850))
resolve critical security and stability issues ([6f29d2c](https://github.com/KitsuneKode/js-questions-lab/commit/6f29d2cc87b673bc6f9cb759450415d011778acb))
resolve intl formatting and refine scratchpad layout ([c7186a4](https://github.com/KitsuneKode/js-questions-lab/commit/c7186a4a5ba9073dfd83e813ded41df229ff4ad9))
resolve lint warnings and type errors ([c31cba7](https://github.com/KitsuneKode/js-questions-lab/commit/c31cba76b6c57e8bb0c0c9733ae662c25cdfa6c9))
resolve missing translation keys and intl errors ([8960691](https://github.com/KitsuneKode/js-questions-lab/commit/89606914d817a1eae49724b71b2e2120db791c9a))
resolve rich text syntax and localize scratchpad menu ([b038376](https://github.com/KitsuneKode/js-questions-lab/commit/b0383763a6c8a4c0278c0d402af11022edccb734))
resolve type errors in ReviewBadge test ([cd060d3](https://github.com/KitsuneKode/js-questions-lab/commit/cd060d374be42109993e0713e8dbd085b74d7a31))
resolve type errors in ReviewBadge test ([487c97a](https://github.com/KitsuneKode/js-questions-lab/commit/487c97a154f9eb6bdd4f8ebe6c04e795f5a1f58b))
**runtime:** harden sandbox execution and restore traced runs ([17b24ea](https://github.com/KitsuneKode/js-questions-lab/commit/17b24ea890b996e8ef57fd15728e3388f740c46c))
**runtime:** implement CodeRabbit nitpick fixes for worker environment ([1fe16dd](https://github.com/KitsuneKode/js-questions-lab/commit/1fe16ddf1d50eb1252eb67828552a07d43d59c8c))
**runtime:** tighten replay coverage and e2e CI ([e46476d](https://github.com/KitsuneKode/js-questions-lab/commit/e46476d34f07e12eb48cbade54f2d0f87179fa28))
**sandbox:** rewrite JS runtime with proper async lifecycle management ([9c70adf](https://github.com/KitsuneKode/js-questions-lab/commit/9c70adf9450adf385bec71b2d49c940ede863601))
scratchpad overlay z-index collision with global banner ([4cd8b3b](https://github.com/KitsuneKode/js-questions-lab/commit/4cd8b3bc9fbdd4428ab650419c5a728317cc3263))
scratchpad UX, SEO middleware, i18n polish, and URL deduplication ([8cd37cf](https://github.com/KitsuneKode/js-questions-lab/commit/8cd37cf494258163019f897b88a679f618037507))
**scratchpad:** focus editor on open, fix stale Ctrl+Enter, add reset shortcut ([63d35fc](https://github.com/KitsuneKode/js-questions-lab/commit/63d35fc1d74aa262aaf97c0e426385a55324fda8))
**scratchpad:** show run and reset kbd shortcuts in header ([bb73d68](https://github.com/KitsuneKode/js-questions-lab/commit/bb73d6872b14abaf2448e1bae2dc20390ac399e4))
**seo,i18n:** consolidate middleware into proxy.ts and fix scratchpad shortcut scope ([60a6174](https://github.com/KitsuneKode/js-questions-lab/commit/60a61741ee47ad7cda8bd2086b8a27e194d3e08c))
**seo:** add middleware to exclude robots.txt and sitemap.xml from next-intl routing ([877e0a1](https://github.com/KitsuneKode/js-questions-lab/commit/877e0a13f62c3a057d9a1704490be134fbff84c3))
**seo:** add missing twitter:card to locale layout ([201f0dd](https://github.com/KitsuneKode/js-questions-lab/commit/201f0dd9dcf4c11d54117c4e6689a9e36adc3cad))
**seo:** add missing twitter:card to locale layout metadata ([090637d](https://github.com/KitsuneKode/js-questions-lab/commit/090637d6595790fbbe48065386c84cfe733cc37f))
**seo:** remove global Content-Type header, let Next.js handle defaults ([b086dfb](https://github.com/KitsuneKode/js-questions-lab/commit/b086dfb3b5f78bddbcd393d37b6110d38f66daa9))
standardize on NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY everywhere ([65fb522](https://github.com/KitsuneKode/js-questions-lab/commit/65fb522cf13ec1bf949ce87b72c0b1832e035471))
standardize supabase publishable key naming across codebase ([b867e26](https://github.com/KitsuneKode/js-questions-lab/commit/b867e26eea4ffeaf08fe4a7fea6236247ad374cd))
**storage:** address CodeRabbit review — SSR guards and consistent error handling ([f9803da](https://github.com/KitsuneKode/js-questions-lab/commit/f9803daeeaf975bba125fb836697299d2d4b3b39))
**storage:** guest session ID pattern prevents cross-user localStorage contamination ([46fe43f](https://github.com/KitsuneKode/js-questions-lab/commit/46fe43fc90a2d85f92bc14809aa89ea9086fd0cb))
**supabase:** add env var guards and Array.isArray check ([0bbba7b](https://github.com/KitsuneKode/js-questions-lab/commit/0bbba7b156deda0d8d7fc8a011229e066fe9e000))
**supabase:** use auth.jwt()->>'sub' for Clerk third-party auth ([696bc00](https://github.com/KitsuneKode/js-questions-lab/commit/696bc00d4cc76de13fe487ecd170b319cef48bd5))
sync German locale copy ([5e92f73](https://github.com/KitsuneKode/js-questions-lab/commit/5e92f735b05fb88857a324f4ade417e0a8303c8c))
**sync:** replace sync queue with per-item immediate upsert ([75a923a](https://github.com/KitsuneKode/js-questions-lab/commit/75a923ad5d045c2160674d7dc938d59bb22683b6))
**toast:** migrate legacy dismiss key by existence ([a7cc3cb](https://github.com/KitsuneKode/js-questions-lab/commit/a7cc3cb7cecf98505af97c3cb2b70f3e33768f7d))
**toast:** remove session gate so guest prompt appears on first app load ([605d11f](https://github.com/KitsuneKode/js-questions-lab/commit/605d11fda066f455d8bc271ee2a5714ab1809bf6))
**toast:** replace permanent guest dismiss with 24h snooze ([8fa48b4](https://github.com/KitsuneKode/js-questions-lab/commit/8fa48b40384278f144bea93499801bc2cbc7547c))
**toast:** replace permanent guest dismiss with 24h snooze ([5bc90b1](https://github.com/KitsuneKode/js-questions-lab/commit/5bc90b17df756c4174a0372103a74c0968700387))
**toast:** restore session dedupe for guest signup prompt ([9deff8e](https://github.com/KitsuneKode/js-questions-lab/commit/9deff8ede5cd09a7f62bd499710b6f52bba7ab48))
**toast:** show signup sync prompt for logged-out users on session entry ([187ab82](https://github.com/KitsuneKode/js-questions-lab/commit/187ab824bb827f6e987096988fb8699320566c8a))
**toast:** use locale-aware signup redirect in guest prompt ([48e5ff1](https://github.com/KitsuneKode/js-questions-lab/commit/48e5ff10653334071fd64d966d9b497d976fc0aa))
**ui:** add missing status color tokens + env example + PRD docs ([7a8302a](https://github.com/KitsuneKode/js-questions-lab/commit/7a8302a9f2b6a41fe80b4abce58532f6c88e6de0))
**ui:** fix progress dailog and question loading states ([af6b439](https://github.com/KitsuneKode/js-questions-lab/commit/af6b4391a79f52a8a3b050220be0b08d4257a0af))
**ui:** remove duplicate close buttons, add scratchpad shortcuts to modal ([311fe7a](https://github.com/KitsuneKode/js-questions-lab/commit/311fe7aff4a1f84962a43d37fab9aeab8574ab75))
**ui:** stronger backdrop-blur on search bar and CommandDialog ([11c4d88](https://github.com/KitsuneKode/js-questions-lab/commit/11c4d88cc44ca72db50c4ee16111ec96d6f8388f))
unique key prop in dashboard shell and add missing dashboard i18n strings ([56c4639](https://github.com/KitsuneKode/js-questions-lab/commit/56c4639705e0384900342c6a8fa2a151cf1a401b))
update ja.json for proper Japanese and add questions namespace for interpolation ([445ab04](https://github.com/KitsuneKode/js-questions-lab/commit/445ab04dc65b61863bf80fe172400e1fd3bf233a))
wait for auth load before sync toasts ([2912b6b](https://github.com/KitsuneKode/js-questions-lab/commit/2912b6bbeea9e9806b2ff7d0e76cec299b0935df))
wait for auth load before sync toasts ([4af18fa](https://github.com/KitsuneKode/js-questions-lab/commit/4af18fa75e7116e74a700846559c6c7bebafc7c4))
**web:** address CI and OG image review feedback ([685a0ae](https://github.com/KitsuneKode/js-questions-lab/commit/685a0ae48ad6867a001b6543620f7492027d0521))
**web:** remove duplicate scratchpad error state ([67ffbe2](https://github.com/KitsuneKode/js-questions-lab/commit/67ffbe293691674a0201b62395f7d4e81c4e0c21))
**web:** static metadata assets and preserve discovery context ([b6fa4f5](https://github.com/KitsuneKode/js-questions-lab/commit/b6fa4f57690261fb27f6cbf1226cc053141827d4))
Performance
optimize nextjs static generation and client filtering ([1b8e0c9](https://github.com/KitsuneKode/js-questions-lab/commit/1b8e0c9e991d32d7a40e262ca17dbf89373a0612))