Skip to content

feat: BetaBloom feedback — seekable timeline, Ultra Fast speed, algorithm use-case tips, and landing page critical-path improvements - #216

Merged
ayoub3bidi merged 5 commits into
developfrom
fix/betabloom-feedback
Aug 1, 2026
Merged

feat: BetaBloom feedback — seekable timeline, Ultra Fast speed, algorithm use-case tips, and landing page critical-path improvements#216
ayoub3bidi merged 5 commits into
developfrom
fix/betabloom-feedback

Conversation

@ayoub3bidi

@ayoub3bidi ayoub3bidi commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Contribution workflow

  • Base branch is develop: This PR targets develop, not main.
  • Guidelines and docs: I have read CONTRIBUTING.md and the docs relevant to my change (DEVELOPMENT.md, ARCHITECTURE.md as needed).
  • This template: I kept the PR template structure and filled in the sections below that apply to this change.

Description

Addresses feedback collected from the BetaBloom review of the visualizer UX. This branch ships three related improvements:

  1. Faster playback & timeline seeking — animation speeds were tightened (SLOW 8000ms → 5000ms, MEDIUM 4800ms → 3000ms, FAST 2400ms → 1500ms, VERY_FAST 1200ms → 700ms) and a new Ultra Fast preset (350ms) was added. A new seekable timeline lets Free-tier users scrub to any step; anonymous/gated users see the same grab handle with a "Sign in to skip steps" gate (timeline_scrub) that opens the sign-in prompt.
  2. Algorithm use-case tips — a one-time-per-session toast (AlgorithmTipToast) and a Settings panel "Use cases" line explain the real-world value of each selected algorithm, translated into en/fr/ar.
  3. Landing page critical path reduction — route-level code splitting (lazy-loaded pages/panels: VisualizerApp, Monaco, Pyodide, Remotion), a cache-first GitHub repo service (githubRepoService) with 24h TTL + stale-while-revalidate, es2022 build target, Inter latin woff2 preload, decorative icons marked aria-hidden, and /llms.txt served as markdown to LLM crawlers.

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • ⚡ Performance improvement

Related Issues

Fixes #

Changes Made

  • Add ULTRA_FAST speed preset and retune existing animation speeds in src/constants/index.js (matching settingsConfig, video/constants, docs, and mocks)
  • Refactor useVisualization autoplay scheduler and add seekToStep() (clamped, silent, autoplay-aware)
  • Make the ControlPanel progress bar a seekable timeline (Free tier) / gated button (anonymous tier) with grab handle and microcopy
  • Add AlgorithmTipToast shown once per algorithm per session + "Use cases" line in SettingsPanel
  • Add algorithmUses.* copy for all 45 algorithms across en/fr/ar locales (verified 1:1 with ALGORITHM_KNOWLEDGE)
  • Add githubRepoService (localStorage cache, 24h TTL, stale-while-revalidate) and use it in Footer and GitHubRepoBadge
  • Lazy-load app routes via React.lazy + Suspense fallback spinner in AppRoutes
  • Target es2022 and preload Inter latin woff2 in built index.html (rolldown closeBundle plugin)
  • Serve /llms.txt as text/markdown to LLM crawlers in worker/index.js
  • Mark decorative icons aria-hidden (Google sign-in, YouTube, Instagram, TikTok)
  • Update AGENTS/REFERENCE/ARCHITECTURE docs and public markdown for the new speeds

Algorithm Details (if applicable)

N/A — no new algorithms; algorithm metadata additions only (use-case strings).

Testing

  • All existing tests pass (pnpm test:run)
  • New tests added for new functionality
  • Manual testing completed

Test Results

 Test Files  168 passed (168)
      Tests  1959 passed (1959)

 pnpm lint        → 0 errors (1 pre-existing warning, untouched file)
 pnpm format:check → pass
 pnpm build        → pass (chunk-size advisory warning only)

Screenshots/GIFs

N/A

Code Quality

  • Code follows the project's coding standards
  • ESLint passes (pnpm lint)
  • Prettier formatting applied (pnpm format)
  • No console errors or warnings
  • Code is properly documented with JSDoc (if applicable)

Performance Impact

  • Performance improved — smaller initial bundle via code splitting, deferred GitHub API calls off the critical path, font preloading

Accessibility

  • Keyboard navigation works correctly (timeline gate button supports Enter/Space)
  • Screen reader compatibility maintained (role="status"/aria-live toast, aria-label on slider, aria-hidden on decorative icons)

Breaking Changes

  • None

Checklist

  • I have completed the Contribution workflow checklist at the top of this template
  • My code follows the project's style guidelines
  • I have performed a self-review of my code
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes

Additional Notes

  • The position unused-variable warning in ProComingSoonPage.jsx is pre-existing on develop and not touched by this branch.
  • CI quality job treats ESLint warnings as non-fatal (0 errors).

Summary by CodeRabbit

  • New Features

    • Added an Ultra Fast animation speed and faster existing presets.
    • Added timeline seeking with keyboard and drag support; restricted access prompts sign-in.
    • Added practical algorithm tips and use-case descriptions in English, French, and Arabic.
    • Added loading feedback during page navigation.
    • Added an /llms.txt Markdown endpoint.
  • Accessibility

    • Improved labels, status messaging, keyboard interaction, RTL support, and reduced-motion behavior.
  • Performance

    • Improved page loading and font startup behavior.
    • Added cached repository information for faster version and repository displays.

- Route-level code splitting: lazy-load app pages (VisualizerApp, panels,
  Monaco, Pyodide, Remotion) so the landing page ships a smaller initial
  bundle; Suspense fallback spinner for lazy routes
- Cache GitHub repo data in localStorage (24h TTL) and defer refresh to
  idle, removing the render-blocking GitHub API chain from load
- Extract cache-first GitHub data into githubRepoService with fallback
  and stale-while-revalidate handling
- Target es2022 to drop legacy browser transforms
- Preload the Inter latin woff2 in built index.html via a closeBundle
  plugin (rolldown-vite emits HTML outside generateBundle)
- Mark decorative social icons aria-hidden (Google sign-in, YouTube,
  Instagram, TikTok)
- Serve /llms.txt as markdown to LLM crawlers in the worker
- Restore the URL global stub in useVideoExporter tests to fix a flaky
  singleFork coverage failure
@github-actions github-actions Bot added documentation Improvements or additions to documentation style Improve styling, design, and animation config tests labels Aug 1, 2026
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@ayoub3bidi, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 25 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 850dbc8d-b8b4-4c99-a097-1dea84c95c55

📥 Commits

Reviewing files that changed from the base of the PR and between 5a66a66 and 16f7aff.

📒 Files selected for processing (9)
  • AGENTS.md
  • src/config/settingsConfig.test.jsx
  • src/pages/VisualizerApp.jsx
  • src/pages/VisualizerApp.test.jsx
  • src/services/githubRepoService.js
  • src/services/githubRepoService.test.js
  • src/test/setup.js
  • worker/index.js
  • worker/index.test.js
📝 Walkthrough

Walkthrough

The PR adds seekable visualization timelines, algorithm use-case guidance, an algorithm tip toast, a fifth animation speed, cached GitHub metadata loading, lazy routes, font preloading, and direct /llms.txt serving.

Changes

Visualizer playback and guidance

Layer / File(s) Summary
Animation speed presets
AGENTS.md, docs/..., src/constants/*, src/config/*, src/hooks/*, src/video/*, src/i18n/locales/*
Existing animation delays are shorter. ULTRA_FAST is added at 350 ms, with related configuration, video, translations, documentation, and tests.
Timeline seeking flow
src/hooks/useVisualization.js, src/components/ControlPanel.jsx, src/pages/VisualizerApp.jsx, src/i18n/locales/*, src/components/ControlPanel.test.jsx, src/pages/VisualizerApp.test.jsx, docs/AGENTS_REFERENCE.md
The visualization exposes seekToStep. The control panel supports ungated range seeking and gated keyboard or click interactions.
Algorithm guidance and tips
src/components/AlgorithmTipToast.jsx, src/components/SettingsPanel.jsx, src/pages/VisualizerApp.jsx, src/i18n/locales/*, src/i18n/i18n.test.js, src/components/*test.jsx, src/pages/VisualizerApp.test.jsx
Settings display translated algorithm use cases. Algorithm tips appear once per session, support dismissal and auto-close, and include localized content.
Cached repository metadata
src/services/githubRepoService.js, src/components/Footer.jsx, src/components/GitHubRepoBadge.jsx, src/services/githubRepoService.test.js, src/components/GitHubRepoBadge.test.jsx
Repository metadata uses localStorage caching, stale refreshes, fallback data, and idle loading through a shared service.

Application delivery

Layer / File(s) Summary
Lazy routes and asset delivery
src/AppRoutes.jsx, src/AppRoutes.test.jsx, vite.config.js, worker/index.js
Route pages are lazy-loaded with a spinner fallback. Vite targets ES2022 and injects an Inter font preload. The worker serves /llms.txt as Markdown with CORS headers.
Accessibility and test cleanup
src/components/Footer.jsx, src/components/UserMenu.jsx, src/video/useVideoExporter.test.js
Decorative icons are hidden from assistive technology, and video exporter tests restore stubbed globals after each test.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ControlPanel
  participant VisualizerApp
  participant useVisualization
  participant SignInPrompt
  User->>ControlPanel: Select a timeline step
  ControlPanel->>VisualizerApp: Call onSeek(index)
  VisualizerApp->>useVisualization: Call seekToStep(index)
  useVisualization-->>VisualizerApp: Update the selected step
  User->>ControlPanel: Activate locked seeking
  ControlPanel->>VisualizerApp: Call onGatedFeatureClick("timeline_scrub")
  VisualizerApp->>SignInPrompt: Open the sign-in prompt
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 21.05% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the PR's main UX and performance changes, including timeline seeking, Ultra Fast speed, algorithm tips, and landing-page improvements.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/betabloom-feedback

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Aug 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 99.68750% with 1 line in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/components/AlgorithmTipToast.jsx 98.24% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown

Preview for Bayan Flow Staging ready!

Name Link
🔨 Latest commit 16f7aff
🔍 Latest deploy log https://github.com/ayoub3bidi/bayan-flow/actions/runs/30697740852
😎 Deploy Preview https://pr-216-bayan-flow-staging.ayoub3bidi.workers.dev
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

Preview alias pr-216 on the staging worker. Updates automatically with new commits.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/pages/VisualizerApp.test.jsx (1)

92-96: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the timeline mock require available steps.

The sorting fixture has totalSteps: 0, but the mock renders seek-to-step-2 and gated-seek whenever the callbacks exist. Both timeline tests can therefore pass without a timeline.

Render these controls only when totalSteps > 0. Then switch the tests to the pathfinding fixture, which has two steps, or provide a dedicated sorting fixture with steps.

Also applies to: 308-340, 819-828, 885-893

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/VisualizerApp.test.jsx` around lines 92 - 96, Update the timeline
mock in VisualizerApp.test.jsx so seek-to-step-2 and gated-seek controls render
only when totalSteps > 0, preventing tests from passing without available steps.
Adjust the affected timeline tests to use the pathfinding fixture with two
steps, or add steps to a dedicated sorting fixture while preserving the existing
sorting coverage.
src/pages/VisualizerApp.jsx (1)

637-656: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fix the stale algorithm key used for the tip toast during cross-category favorite navigation.

In handleFavoriteNavigate, when category !== algorithmType, the code calls applyCategorySwitch(category) before setSelectedAlgorithms updates selectedAlgorithms[category] to algorithmKey. Inside applyCategorySwitch, maybeShowAlgorithmTip(selectedAlgorithms[newType]) reads the old selection for that category, not the algorithm the user is navigating to.

This call marks the wrong algorithm key as "shown" in shownAlgorithmTipsRef, even though its tip is immediately overwritten by the second, correct maybeShowAlgorithmTip(algorithmKey) call. The wrong algorithm then never gets a tip shown later in the session, even though it was never actually displayed.

Pass the target algorithm key into applyCategorySwitch so it does not depend on state that has not updated yet.

🐛 Proposed fix to pass the correct algorithm key explicitly
-  const applyCategorySwitch = newType => {
+  const applyCategorySwitch = (newType, tipAlgorithmKey) => {
     const cfg = CATEGORY_CONFIG[newType];
     if (cfg.sizeBinding === 'array') {
       const searchingKey = selectedAlgorithms[ALGORITHM_TYPES.SEARCHING];
       if (
         newType !== ALGORITHM_TYPES.SEARCHING ||
         !isNodeLinkSearchingAlgorithm(searchingKey)
       ) {
         const raw = cfg.generateData(arraySize);
         setArray(
           newType === ALGORITHM_TYPES.SORTING
             ? finalizeSortingInputArray(raw, sortOrder)
             : raw
         );
       }
     }
     setAlgorithmType(newType);
     visualizationMap[newType]?.reset();
-    maybeShowAlgorithmTip(selectedAlgorithms[newType]);
+    maybeShowAlgorithmTip(tipAlgorithmKey ?? selectedAlgorithms[newType]);
   };

   const handleFavoriteNavigate = (category, algorithmKey) => {
     if (category !== algorithmType) {
-      applyCategorySwitch(category);
+      applyCategorySwitch(category, algorithmKey);
+    } else {
+      maybeShowAlgorithmTip(algorithmKey);
     }
     setSelectedAlgorithms(prev => ({
       ...prev,
       [category]: algorithmKey,
     }));
-    maybeShowAlgorithmTip(algorithmKey);
     visualizationMap[category]?.reset();
   };

Also applies to: 658-668

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/VisualizerApp.jsx` around lines 637 - 656, Update
applyCategorySwitch to accept an optional target algorithm key and use it when
calling maybeShowAlgorithmTip, falling back to selectedAlgorithms[newType] only
when no target is supplied. In handleFavoriteNavigate, pass algorithmKey when
switching categories so the tip tracking uses the destination algorithm rather
than stale selected state.
🧹 Nitpick comments (2)
src/services/githubRepoService.test.js (1)

93-109: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add coverage for a non-OK repo response.

The current tests cover full success and full network failure, but not the case where repoResponse.ok is false while releaseResponse.ok is true (or vice versa). That branch in fetchGitHubRepo (lines 88-97 of githubRepoService.js) keeps fallback url/fullName/stars/forks but still applies the parsed release tag, and it currently has no direct test.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/services/githubRepoService.test.js` around lines 93 - 109, Add a test
alongside the existing cache-miss coverage that exercises fetchGitHubRepo when
one response is non-OK and the other is OK. Assert the result preserves fallback
url, fullName, stars, and forks while applying the parsed release versionTag,
and verify the expected persistence/cache behavior using the existing helpers
and symbols.
src/services/githubRepoService.js (1)

110-126: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Duplicate concurrent GitHub API calls from Footer and GitHubRepoBadge. loadGitHubRepoData has no in-flight request cache, and both Footer.jsx and GitHubRepoBadge.jsx independently run the same cache-check-then-idle-load logic. When the cache is stale or missing and both components mount on the same page, each triggers its own call to loadGitHubRepoData(), doubling the GitHub API requests (repo + release) against the 60 requests/hour unauthenticated limit, and duplicating the same effect logic across two files.

  • src/services/githubRepoService.js#L110-L126: cache the in-flight promise (module-level singleton, cleared on settle) inside loadGitHubRepoData so concurrent callers share one fetch instead of issuing separate requests.
  • src/components/Footer.jsx#L13-L41: once the service dedups in-flight requests, this effect is safe as-is; optionally extract this cache-read/idle-load logic into a shared hook (e.g., useGitHubRepoData) to remove the duplication with GitHubRepoBadge.jsx.
  • src/components/GitHubRepoBadge.jsx#L47-L67: same as above — extract the shared hook once the service-level dedup is in place.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/services/githubRepoService.js` around lines 110 - 126, Prevent duplicate
concurrent GitHub requests by adding a module-level in-flight promise singleton
used by loadGitHubRepoData; return it to concurrent callers and clear it when
the request settles, while preserving existing cache, fallback, and error
behavior. In src/services/githubRepoService.js lines 110-126, implement the
service-level deduplication. In src/components/Footer.jsx lines 13-41 and
src/components/GitHubRepoBadge.jsx lines 47-67, no direct change is required
once deduplication is added; optionally replace their duplicated
cache-read/idle-load effects with a shared useGitHubRepoData hook.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@AGENTS.md`:
- Line 70: Update the speed-policy documentation in AGENTS.md to state that Free
users have all five speed presets and align Anonymous MEDIUM with the defined
3000ms value; only retain 4800ms if explicitly documented as an Anonymous-only
override.

In `@src/services/githubRepoService.js`:
- Around line 78-108: Update fetchGitHubRepo to bound both requests with a fixed
timeout using an AbortController or the project’s existing timeout utility.
Apply the same timeout to the repository and latest-release fetch calls, ensure
timeout failures are handled so the function returns the existing fallback data,
and preserve the current successful-response parsing behavior.

In `@src/test/setup.js`:
- Line 73: Align the shared ANIMATION_SPEEDS mock in src/test/setup.js:73-73
with the complete production values, including ULTRA_FAST: 350, without
accelerated values outside timing-specific tests. Update
src/config/settingsConfig.test.jsx:65-73 to assert the production values
directly and remove the expectation that reads values from mocked constants.

In `@worker/index.js`:
- Around line 66-75: Preserve the status from env.ASSETS.fetch in the /llms.txt
handler by passing llmsResponse.status when constructing the new Response, so
missing or failed assets retain their non-success status. Add a test in
worker/index.test.js covering a missing /llms.txt asset and asserting the
response status.

---

Outside diff comments:
In `@src/pages/VisualizerApp.jsx`:
- Around line 637-656: Update applyCategorySwitch to accept an optional target
algorithm key and use it when calling maybeShowAlgorithmTip, falling back to
selectedAlgorithms[newType] only when no target is supplied. In
handleFavoriteNavigate, pass algorithmKey when switching categories so the tip
tracking uses the destination algorithm rather than stale selected state.

In `@src/pages/VisualizerApp.test.jsx`:
- Around line 92-96: Update the timeline mock in VisualizerApp.test.jsx so
seek-to-step-2 and gated-seek controls render only when totalSteps > 0,
preventing tests from passing without available steps. Adjust the affected
timeline tests to use the pathfinding fixture with two steps, or add steps to a
dedicated sorting fixture while preserving the existing sorting coverage.

---

Nitpick comments:
In `@src/services/githubRepoService.js`:
- Around line 110-126: Prevent duplicate concurrent GitHub requests by adding a
module-level in-flight promise singleton used by loadGitHubRepoData; return it
to concurrent callers and clear it when the request settles, while preserving
existing cache, fallback, and error behavior. In
src/services/githubRepoService.js lines 110-126, implement the service-level
deduplication. In src/components/Footer.jsx lines 13-41 and
src/components/GitHubRepoBadge.jsx lines 47-67, no direct change is required
once deduplication is added; optionally replace their duplicated
cache-read/idle-load effects with a shared useGitHubRepoData hook.

In `@src/services/githubRepoService.test.js`:
- Around line 93-109: Add a test alongside the existing cache-miss coverage that
exercises fetchGitHubRepo when one response is non-OK and the other is OK.
Assert the result preserves fallback url, fullName, stars, and forks while
applying the parsed release versionTag, and verify the expected
persistence/cache behavior using the existing helpers and symbols.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f6308917-fb7e-4ace-bec4-a41dbf63067c

📥 Commits

Reviewing files that changed from the base of the PR and between 64ae009 and 5a66a66.

📒 Files selected for processing (35)
  • AGENTS.md
  • docs/AGENTS_REFERENCE.md
  • docs/ARCHITECTURE.md
  • public/markdown/app.md
  • src/AppRoutes.jsx
  • src/AppRoutes.test.jsx
  • src/components/AlgorithmTipToast.jsx
  • src/components/AlgorithmTipToast.test.jsx
  • src/components/ControlPanel.jsx
  • src/components/ControlPanel.test.jsx
  • src/components/Footer.jsx
  • src/components/GitHubRepoBadge.jsx
  • src/components/GitHubRepoBadge.test.jsx
  • src/components/SettingsPanel.jsx
  • src/components/SettingsPanel.test.jsx
  • src/components/UserMenu.jsx
  • src/config/settingsConfig.js
  • src/config/settingsConfig.test.jsx
  • src/constants/index.js
  • src/constants/index.test.js
  • src/hooks/useVisualization.js
  • src/hooks/useVisualization.test.js
  • src/i18n/i18n.test.js
  • src/i18n/locales/ar/translation.json
  • src/i18n/locales/en/translation.json
  • src/i18n/locales/fr/translation.json
  • src/pages/VisualizerApp.jsx
  • src/pages/VisualizerApp.test.jsx
  • src/services/githubRepoService.js
  • src/services/githubRepoService.test.js
  • src/test/setup.js
  • src/video/constants.js
  • src/video/useVideoExporter.test.js
  • vite.config.js
  • worker/index.js

Comment thread AGENTS.md
Comment thread src/services/githubRepoService.js
Comment thread src/test/setup.js Outdated
Comment thread worker/index.js
- githubRepoService: add 10s fetch timeout via AbortController and dedupe
  concurrent in-flight requests
- settingsConfig/setup: align ANIMATION_SPEEDS test mock with production
  values (5000/3000/1500/700/350)
- worker: preserve ASSETS response status for /llms.txt
- VisualizerApp: show algorithm tip for the target algorithm when
  navigating via favorites (was showing stale key)
- VisualizerApp.test: render seek controls only when steps are available
- Add coverage for non-OK repo responses, fetch timeout signal, in-flight
  dedup, and /llms.txt status passthrough
@ayoub3bidi
ayoub3bidi merged commit 2055487 into develop Aug 1, 2026
15 checks passed
@ayoub3bidi
ayoub3bidi deleted the fix/betabloom-feedback branch August 1, 2026 11:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

config documentation Improvements or additions to documentation style Improve styling, design, and animation tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant