Skip to content

Feat/slider a11y - #1144

Merged
Itzzavdheshh merged 11 commits into
itzzavdhesh:mainfrom
desireddymohithreddy0925:feat/slider-a11y
Aug 13, 2026
Merged

Feat/slider a11y#1144
Itzzavdheshh merged 11 commits into
itzzavdhesh:mainfrom
desireddymohithreddy0925:feat/slider-a11y

Conversation

@desireddymohithreddy0925

@desireddymohithreddy0925 desireddymohithreddy0925 commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

✨ Feature Description

This PR improves the accessibility of the Voice Tuning panel by explicitly mapping the tabIndex and adding onKeyDown handlers to the pitch and speed sliders.

Fixes #759

🤔 Problem It Solves

Users with motor disabilities or those who rely on keyboard navigation could not precisely click and drag the HTML range sliders. This update makes the tuning features completely accessible to them.

💡 Proposed Solution

  • Added tabIndex={0} to the <input type="range"> elements so they are natively focusable via the Tab key.
  • Implemented onKeyDown event listeners so that when focused, pressing Left/Down arrows decrements the value, and Right/Up arrows increments it by the predefined step size (0.05).
  • Added Tailwind focus-visible:ring-2 focus-visible:ring-coral classes to ensure a clear visual focus ring appears around the active slider handle.

✅ Acceptance Criteria

  • Sliders can be reached via the Tab key.
  • Arrow keys successfully adjust the values up and down.
  • The UI visually indicates which slider currently has keyboard focus.

🌱 Contributor Checklist

  • I am participating via GSSoC
  • I have read the contribution guidelines
  • I checked for existing issues before creating this

Summary by cubic

Improve slider accessibility in Voice Tuning and harden voice cloning reliability. Also add repo-wide ESLint/Prettier checks to keep formatting consistent.

  • New Features
    • Sliders: make pitch/speed sliders keyboard-accessible with tab focus, Arrow Up/Right to increase and Arrow Down/Left to decrease by 0.05, and clear focus-visible rings.
    • Voice clone reliability: allow optional client-supplied voice_id on /api/voice/clone, validate voice existence in /api/voice/speak with clear 404s, and manage an in-memory voice cache with TTL and size limits. CI adds ESLint/Prettier checks and npm scripts for linting and format verification.

Written for commit f1c96f6. Summary will update on new commits.

Review in cubic

@vercel

vercel Bot commented Jul 25, 2026

Copy link
Copy Markdown

Someone is attempting to deploy a commit to the itzzavdhesh's projects Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions

Copy link
Copy Markdown

✍️ DCO Sign-off Needed

Hey @desireddymohithreddy0925! 👋 One or more commits in this PR are missing a Signed-off-by: line.

Warning

How to fix:

For the latest commit:

git commit --amend --signoff
git push --force-with-lease

For multiple commits, replace N with the number to update:

git rebase --signoff HEAD~N
git push --force-with-lease

This comment will update automatically after you push.


🤖 VoiceForge Automation · Updates automatically on edits

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

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

Next review available in: 27 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: c71e76aa-763f-4399-901e-5085fb6d68e1

📥 Commits

Reviewing files that changed from the base of the PR and between e915118 and f1c96f6.

⛔ Files ignored due to path filters (2)
  • package-lock.json is excluded by !**/package-lock.json
  • server/data/voiceforge.db is excluded by !**/*.db
📒 Files selected for processing (83)
  • .github/ISSUE_TEMPLATE/elusoc_bug_report.md
  • .github/ISSUE_TEMPLATE/elusoc_feature_request.md
  • .github/ISSUE_TEMPLATE/gssoc_bug_report.md
  • .github/ISSUE_TEMPLATE/gssoc_feature_request.md
  • .github/ISSUE_TEMPLATE/nsoc_bug_report.md
  • .github/ISSUE_TEMPLATE/nsoc_feature_request.md
  • .github/ISSUE_TEMPLATE/ssoc_bug_report.md
  • .github/ISSUE_TEMPLATE/ssoc_feature_request.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/PULL_REQUEST_TEMPLATE/elusoc.md
  • .github/PULL_REQUEST_TEMPLATE/gssoc.md
  • .github/PULL_REQUEST_TEMPLATE/nsoc.md
  • .github/PULL_REQUEST_TEMPLATE/ssoc.md
  • .github/workflows/lint.yml
  • .github/workflows/mentor-merge-eligibility.yml
  • .github/workflows/pr-review-handler.yml
  • .lintstagedrc
  • CONTRIBUTING.md
  • README.md
  • client/index.html
  • client/postcss.config.js
  • client/public/404.html
  • client/src/App.jsx
  • client/src/components/AudioTrimmer.jsx
  • client/src/components/FavoriteMessages.jsx
  • client/src/components/Footer.jsx
  • client/src/components/KeyboardShortcutsModal.jsx
  • client/src/components/LanguageSelector.jsx
  • client/src/components/MessageCard.jsx
  • client/src/components/PrivacyModeToggle.jsx
  • client/src/components/ProfileCard.jsx
  • client/src/components/QuickReplies.jsx
  • client/src/components/ReceiveProfileModal.jsx
  • client/src/components/ScrollToBottomButton.jsx
  • client/src/components/ScrollToTopButton.jsx
  • client/src/components/ShareProfileModal.jsx
  • client/src/components/SpeechHistory.jsx
  • client/src/components/TextToSpeech.jsx
  • client/src/components/ThemeContext.jsx
  • client/src/components/VideoPreview.jsx
  • client/src/components/VoiceForge.jsx
  • client/src/components/VoiceQuickSettings.jsx
  • client/src/components/VoiceRecorder.jsx
  • client/src/components/useToast.jsx
  • client/src/hooks/useSpeechHistory.js
  • client/src/hooks/useTTS.js
  • client/src/hooks/useVirtualCamera.js
  • client/src/hooks/useVoiceClone.js
  • client/src/main.jsx
  • client/src/pages/About.jsx
  • client/src/pages/Analytics.jsx
  • client/src/pages/Call.jsx
  • client/src/pages/Contributors.jsx
  • client/src/pages/Onboarding.jsx
  • client/src/pages/PrivacyPolicy.jsx
  • client/src/pages/Settings.jsx
  • client/src/styles.css
  • client/src/utils/audioExtractor.js
  • client/src/utils/audioProcessor.js
  • client/src/utils/db.js
  • client/src/utils/faceProcessor.js
  • client/src/utils/formatTime.js
  • client/src/utils/languages.js
  • client/src/utils/pitchShifter.js
  • client/src/utils/voiceSettings.js
  • client/src/utils/voiceSettings.test.js
  • client/src/utils/wavEncoder.js
  • client/src/utils/webrtc.js
  • client/tailwind.config.js
  • client/vite.config.js
  • docs/virtual-camera.md
  • eslint.config.js
  • package.json
  • playwright.config.js
  • pr_body.md
  • server/controllers/voiceController.js
  • server/index.js
  • server/middleware/upload.js
  • server/routes/voice.js
  • server/test/helpers.js
  • server/test/voiceController.mock-mode.test.js
  • server/test/voiceController.secure-id.test.js
  • tests/permissions.spec.js
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

Copy link
Copy Markdown

🛠️ PR Needs Updates

Hey @desireddymohithreddy0925! 👋 A few things need fixing before a mentor can review this PR.

Warning

  • Select a program PR template: GSSoC, NSOC, SSOC, or ELUSOC.
  • Use the mandatory VoiceForge PR template and keep all required sections.
  • Use a clear PR title, for example feat: add voice preview or [feature]: add voice preview.
  • This PR changes 85 files. VoiceForge keeps contributor PRs focused, so please recheck the changed files and reduce the PR to 13 files or fewer unless a maintainer explicitly approves the larger scope.

How to fix:

  • PR template: Use one complete program PR template and keep all required sections.
  • PR title: Use a clear title like fix: update onboarding progress bar or [bug refactor]: replace pending stream cache.
  • Large PR: Please recheck the changed files, remove accidental edits, and keep this contribution polished and focused on one approved issue. If the larger scope is truly needed, ask a mentor before continuing.
  • Program: Choose exactly one program: GSSoC, NSOC, SSOC, or ELUSOC.

Once fixed, the workflow re-runs automatically and pings the right mentor.


🤖 VoiceForge Automation · Updates automatically on edits

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All reported issues were addressed across 85 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread .lintstagedrc
Comment thread eslint.config.js
Comment thread client/src/components/VoiceQuickSettings.jsx
Comment thread package.json
Comment thread client/src/pages/Call.jsx
@Itzzavdheshh

Copy link
Copy Markdown
Collaborator

Hi @desireddymohithreddy0925 Your PR has Branch Conflict please resolve them and ping me after! Thanks

@Itzzavdheshh
Itzzavdheshh merged commit f1c96f6 into itzzavdhesh:main Aug 13, 2026
9 of 13 checks passed
@github-actions

Copy link
Copy Markdown

❌ Merge Policy Violation

Caution

Unauthorized Merge — Pull request #1144 was merged by @Itzzavdheshh (mentor) without any review on record.

VoiceForge guidelines require contributors/mentors to submit at least one review (approval, comment, or changes requested) before merging a pull request to ensure code quality and point-tracking integrity.

📊 Violation Summary

Parameter Details
Merged By @Itzzavdheshh (mentor)
Review Count 0 reviews on record
PR Author @desireddymohithreddy0925
PR Number #1144

⚠️ Action Required (@itzzavdhesh):

  • Please review the merged code for quality and scope.
  • Consider reverting the merge if it was done inappropriately.
    • Ensure your repository ruleset or branch protection rules are active.

🤖 VoiceForge Automation

@github-actions

Copy link
Copy Markdown

🎊 PR Merged Successfully

Hey @desireddymohithreddy0925! 👋 Congratulations and thank you for your contribution to VoiceForge!

Note

🔗 Linked issue(s): #759 · ✅ Marked as merged and complete

Maintainers may still handle final cleanup, release notes, or follow-up tracking after the merge.


🤖 VoiceForge Automation · Updates automatically on edits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Add keyboard navigation (tab-index mapping) for the Voice Tuning sliders.

3 participants