Skip to content

fix: landing page & visualizer UI/UX makeover - #221

Merged
ayoub3bidi merged 12 commits into
developfrom
fix/makeovers
Aug 4, 2026
Merged

fix: landing page & visualizer UI/UX makeover#221
ayoub3bidi merged 12 commits into
developfrom
fix/makeovers

Conversation

@ayoub3bidi

@ayoub3bidi ayoub3bidi commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Contribution workflow

  • Base branch is develop: This PR targets develop, not main. (If the base is wrong, edit the PR on GitHub and change the base branch.)
  • 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

This PR is a UI/UX makeover focused on the landing page and the visualizer experience. It introduces a new academic-lab visual identity for marketing headings (Source Serif 4 display font), rebuilds several landing sections (Hero with an interactive visualizer demo, ProPreview, FAQ, SocialProofStrip), improves the visualizer's timeline seek UX and loading states, and clarifies video-export messaging by removing daily export limits for free users.

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📚 Documentation update
  • 🎨 Style/UI improvement
  • ⚡ Performance improvement
  • 🧪 Test addition or improvement
  • 🔧 Chore (maintenance, dependencies, etc.)

Related Issues

Fixes #

Changes Made

  • Landing page redesign: new display typography system (Source Serif 4 Variable on .landing-h1/.landing-h2) and updated design tokens in DESIGN.md / .impeccable/design.json.
  • New landing sections: Hero now renders an interactive HeroVisualizerDemo (live array visualizer preview) driven by heroVisualizerDemoConfig.js; added SocialProofStrip, ProPreview, and FAQ components; removed the old LearnYourWay section.
  • ArrayVisualizer / visualization engine: timeline seek support, updated animation speed presets, new app defaults, and demo-ready generation wiring in useVisualization / useSortingVisualization.
  • Sign-in UX: informative loading state (spinner + localized "Signing in…") on Google sign-in buttons in UserMenu and SignInPromptModal instead of a silent disabled state.
  • Video export messaging: removed the free-tier daily export limit (50/day) and its localStorage tracking from entitlementService; clarified export copy in the UI.
  • Algorithm tips: updated AlgorithmTipToast messages for clarity/consistency across locales.
  • Settings panel: spacing/layout cleanup and renamed the "algorithm mode" control to "algorithm category".
  • Roadmap: TimelineItem now supports highlight flags and external article links; roadmap data and highlights updated.
  • i18n: all new/updated strings added across en, fr, and ar locales.

Algorithm Details (if applicable)

N/A — no new algorithms in this PR.

Testing

  • All existing tests pass (pnpm test:run)
  • New tests added for new functionality
  • Manual testing completed
  • Cross-browser testing (if UI changes)

Test Results

Test Files  23 passed (23)
      Tests  527 passed (527)
pnpm lint          ✓ (1 pre-existing warning, 0 errors)
pnpm format:check  ✓
pnpm build         ✓

Screenshots/GIFs

N/A — visual change; interactive demo can be previewed on the landing page.

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

  • No performance impact
  • Performance improved
  • Performance impact assessed and acceptable
  • Performance benchmarks included

Accessibility

  • Keyboard navigation works correctly
  • Screen reader compatibility maintained
  • Color contrast meets WCAG guidelines
  • Focus indicators are visible

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 commented my code, particularly in hard-to-understand areas
  • 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
  • Any dependent changes have been merged and published

Additional Notes

The branch currently sits on top of develop at the last merge-base; develop has since moved ahead with the Cloudflare Turnstile signup changes. There is no file overlap, so the merge is clean.

Summary by CodeRabbit

  • New Features
    • Refreshed the landing page with an animated sorting demo, Pro plan comparison, FAQ accordion, expanded feature highlights, and updated roadmap content.
    • Added improved sign-in loading feedback with spinners and accessibility states.
    • Added landing-page language switching and refined responsive layouts.
    • Free-tier signed-in users can now make unlimited video exports; watermark customization remains a Pro feature.
  • Improvements
    • Updated typography with Source Serif 4 for landing headings.
    • Improved settings controls, algorithm tips, translations, and roadmap article links.
    • Added replay support for autoplay visualizations and enhanced reduced-motion behavior.

@github-actions github-actions Bot added documentation Improvements or additions to documentation style Improve styling, design, and animation dependencies tests labels Aug 4, 2026
@socket-security

socket-security Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​fontsource-variable/​source-serif-4@​5.3.082100848390

View full report

@coderabbitai

coderabbitai Bot commented Aug 4, 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: 41 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

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: 4f8c2b42-5528-4cbd-98d6-319973d9a755

📥 Commits

Reviewing files that changed from the base of the PR and between 417e17a and 0668c46.

📒 Files selected for processing (9)
  • src/components/ArrayVisualizer.jsx
  • src/components/SettingsPanel.jsx
  • src/components/landing/ProPreview.jsx
  • src/components/landing/ProPreview.test.jsx
  • src/components/ui/Button.jsx
  • src/i18n/i18n.test.js
  • src/i18n/locales/ar/translation.json
  • src/i18n/locales/en/translation.json
  • src/i18n/locales/fr/translation.json
📝 Walkthrough

Walkthrough

The pull request updates the landing page with new sections, typography, and an autoplay visualizer. It improves authentication and settings feedback, restructures roadmap data, expands localization, changes algorithm tips, and removes daily signed-in video-export limits.

Changes

Product experience updates

Layer / File(s) Summary
Design and typography foundation
.impeccable/design.json, DESIGN.md, package.json, src/index.css, src/main.jsx
Source Serif 4 is defined for landing headings. Inter remains the product UI font. New radius and scrollbar tokens are documented.
Hero visualization and playback controls
src/components/ArrayVisualizer.jsx, src/components/landing/Hero*.jsx, src/hooks/*
The landing hero uses a non-interactive Bubble Sort demo. Visualizers support hidden chrome, disabled sound, reduced-motion rendering, and autoplay replay.
Landing sections and page composition
src/components/landing/*, src/pages/LandingPage.jsx, src/components/ui/Section.jsx, src/i18n/locales/*, docs/*
LearnYourWay is replaced by ProPreview and FAQ. SocialProofStrip is feature-gated. Features, landing translations, documentation, and section ordering are updated.
Application UI and authentication feedback
src/components/Header.jsx, src/components/SettingsPanel.jsx, src/components/SignInPromptModal.*, src/components/UserMenu.*, src/components/AlgorithmTipToast.*, src/i18n/*
The language switcher, settings controls, algorithm tips, and sign-in controls receive updated labels, compact styling, loading indicators, busy states, and localization coverage.
Roadmap data and timeline rendering
src/data/roadmapData*, src/components/roadmap/TimelineItem*
Roadmap descriptions become highlight lists. Completed entries can link to external articles. Data validation covers highlight content and HTTP(S) URLs.
Video export entitlement changes
src/services/entitlementService.js, src/services/__tests__/*, src/pages/VisualizerApp.test.jsx, AGENTS.md
Daily export counters and the signed-in daily guard are removed. Signed-in Free and Pro users can export without a daily limit.

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

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.84% 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 pull request's primary landing page and visualizer UI/UX redesign.
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/makeovers

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.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Preview for Bayan Flow Staging ready!

Name Link
🔨 Latest commit 0668c46
🔍 Latest deploy log https://github.com/ayoub3bidi/bayan-flow/actions/runs/30929901023
😎 Deploy Preview https://pr-221-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-221 on the staging worker. Updates automatically with new commits.

@codecov

codecov Bot commented Aug 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@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: 8

🤖 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 `@src/components/ArrayVisualizer.jsx`:
- Around line 194-197: Update the ArrayVisualizer label setup around
arrayPaneLabel to add localization keys for both interactive and non-interactive
labels, then obtain each label through the existing t(...) translation function.
Preserve the current wording and interactive/non-interactive selection behavior
while ensuring screen readers receive the localized value.
- Around line 287-312: The caption animation boundary in ArrayVisualizer should
remain mounted regardless of showCaption. Keep AnimatePresence as the outer
element and move the showCaption condition inside it, while preserving the
existing description check and motion.div enter/exit behavior.

In `@src/components/landing/ProPreview.jsx`:
- Around line 164-170: Update the Pro CTA rendering in Button and its usage
around the Link in ProPreview so only one interactive element is produced: when
Button receives to or href, render a noninteractive inner element while
preserving the existing link navigation, styling, and CTA text behavior.

In `@src/components/landing/ProPreview.test.jsx`:
- Around line 7-12: Update the beforeEach setup in the ProPreview test suite to
explicitly set the shared i18n language to English before each test, ensuring
renderWithI18n produces the English text and aria-label values asserted by the
tests.

In `@src/components/SettingsPanel.jsx`:
- Around line 215-226: Add aria-pressed={isActive} to the category selector
button in the button rendering loop, preserving the existing mutually exclusive
selection behavior and accessibility labels.

In `@src/i18n/i18n.test.js`:
- Around line 86-117: Update both tests around the algorithmTips and
algorithmUses assertions to read each locale’s translation resources directly,
or disable i18n fallback during these checks, so missing French or Arabic
entries cannot resolve to English values. Preserve the existing coverage and
duplicate-content assertions for every algorithm key and locale.

In `@src/i18n/locales/en/translation.json`:
- Around line 1481-1495: Update the FAQ answers under the visible “difference,”
“beginner,” “learn,” and “try” entries so manual pause/step controls and input
customization are explicitly qualified by the account tier that provides them,
while preserving accurate general access for anonymous and Free users. Remove or
reword any unqualified claims that all users can use these gated capabilities.

In `@src/i18n/locales/fr/translation.json`:
- Line 92: Correct the localized Pro preview copy in
src/i18n/locales/fr/translation.json at lines 92-92 by replacing “sans
watermark” with “sans filigrane”, and in src/i18n/locales/ar/translation.json at
lines 1461-1461 by replacing “تصوّر كل الـخوارزمية” with “تصوّر كل الخوارزميات”.
🪄 Autofix

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: e905df2d-45e7-4565-b270-b402cdf4abf4

📥 Commits

Reviewing files that changed from the base of the PR and between 2c1bb81 and 417e17a.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (52)
  • .impeccable/design.json
  • AGENTS.md
  • DESIGN.md
  • docs/AGENTS_REFERENCE.md
  • docs/ARCHITECTURE.md
  • package.json
  • src/components/AlgorithmTipToast.jsx
  • src/components/AlgorithmTipToast.test.jsx
  • src/components/ArrayVisualizer.appDefaults.test.jsx
  • src/components/ArrayVisualizer.jsx
  • src/components/Header.jsx
  • src/components/SettingsPanel.jsx
  • src/components/SignInPromptModal.jsx
  • src/components/SignInPromptModal.test.jsx
  • src/components/UserMenu.jsx
  • src/components/UserMenu.test.jsx
  • src/components/landing/FAQ.jsx
  • src/components/landing/FAQ.test.jsx
  • src/components/landing/Features.jsx
  • src/components/landing/Features.test.jsx
  • src/components/landing/Hero.jsx
  • src/components/landing/Hero.test.jsx
  • src/components/landing/HeroVisualizerDemo.jsx
  • src/components/landing/HeroVisualizerDemo.test.jsx
  • src/components/landing/LearnYourWay.jsx
  • src/components/landing/LearnYourWay.test.jsx
  • src/components/landing/ProPreview.jsx
  • src/components/landing/ProPreview.test.jsx
  • src/components/landing/SocialProofStrip.jsx
  • src/components/landing/SocialProofStrip.test.jsx
  • src/components/landing/heroVisualizerDemoConfig.js
  • src/components/landing/landingSocialProof.js
  • src/components/roadmap/TimelineItem.jsx
  • src/components/roadmap/TimelineItem.test.jsx
  • src/components/ui/Section.jsx
  • src/data/roadmapData.js
  • src/data/roadmapData.test.js
  • src/hooks/useSortingVisualization.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/index.css
  • src/main.jsx
  • src/pages/LandingPage.jsx
  • src/pages/LandingPage.test.jsx
  • src/pages/VisualizerApp.jsx
  • src/pages/VisualizerApp.test.jsx
  • src/services/__tests__/entitlementService.test.js
  • src/services/entitlementService.js
💤 Files with no reviewable changes (3)
  • src/pages/VisualizerApp.jsx
  • src/components/landing/LearnYourWay.test.jsx
  • src/components/landing/LearnYourWay.jsx

Comment thread src/components/ArrayVisualizer.jsx Outdated
Comment thread src/components/ArrayVisualizer.jsx Outdated
Comment thread src/components/landing/ProPreview.jsx Outdated
Comment thread src/components/landing/ProPreview.test.jsx
Comment thread src/components/SettingsPanel.jsx
Comment thread src/i18n/i18n.test.js Outdated
Comment thread src/i18n/locales/en/translation.json Outdated
Comment thread src/i18n/locales/fr/translation.json Outdated
- Localize array pane labels (interactive + static) for screen readers
- Keep AnimatePresence mounted so caption exit animation runs
- Render a single interactive element for CTA link buttons (no nested <button>)
- Reset i18n to English before ProPreview tests
- Expose selected category state via aria-pressed in SettingsPanel
- Read algorithmTips/algorithmUses directly from locale resources in tests
- Qualify gated FAQ capabilities by account tier (en/fr/ar)
- Fix FR 'sans watermark' and AR 'كل الـخوارزمية' translation typos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies 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