Skip to content

feat: Add voice command support - #147

Open
khedkaravani-rgb wants to merge 3 commits into
7-Blocks:mainfrom
khedkaravani-rgb:feat/add-voice-command
Open

feat: Add voice command support#147
khedkaravani-rgb wants to merge 3 commits into
7-Blocks:mainfrom
khedkaravani-rgb:feat/add-voice-command

Conversation

@khedkaravani-rgb

@khedkaravani-rgb khedkaravani-rgb commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

User description

Summary

This PR adds voice command support to the globe dashboard, allowing users to control key navigation and globe actions using spoken commands.

Changes

  • Added browser-based speech recognition through a reusable useSpeechRecognition hook.
  • Added a central voice command handler to recognise supported spoken commands.
  • Added voice commands for:
    • Opening the ISS view
    • Showing the debris catalog
    • Opening the Collision Center
    • Zooming to India
    • Toggling Space Weather
  • Connected voice commands to the existing React Router navigation and Cesium globe controls.
  • Added command execution feedback and automatically clears the displayed transcript after successful command execution.

This improves accessibility and provides a more intuitive hands-free way to interact with the strategic globe dashboard.

Related Issue

Fixes #139

Type of Change

  • 🐛 Bug fix
  • ✨ New feature
  • 📚 Documentation update
  • 🚀 Performance improvement
  • 🎨 UI/UX enhancement
  • 🔧 Refactoring
  • 🧹 Chore / Maintenance
  • 🔒 Security improvement

Screenshots / Screen Recordings

Screen.Recording.2026-07-27.231310.mp4

Testing Performed

  • Tested locally
  • Tested relevant functionality
  • Checked for linting errors
  • Checked for TypeScript/build errors
  • Tested responsive behaviour (if applicable)

Breaking Changes

N/A

Checklist

  • I have read and followed the contributing guidelines.
  • My code follows the project's coding standards and guidelines.
  • I have completed testing of my changes.
  • I have updated documentation where applicable.
  • I have checked that my changes do not introduce unintended regressions.

ECSoC26 Submission

ECSoC26 contributors only — select your difficulty level by checking exactly one box below.
Leaving all boxes unchecked, or checking more than one, will cause the automation to fail.

  • ECSoC26-L1 – Beginner
  • ECSoC26-L2 – Intermediate
  • ECSoC26-L3 – Advanced

CodeAnt-AI Description

Add hands-free globe controls and saved views to the orbital dashboard

What Changed

  • Users can issue spoken commands to track the ISS, show debris, open the Collision Center, zoom to India, or open Space Weather.
  • The dashboard shows listening status, recognized speech, and voice errors, with graceful handling when browser speech recognition is unavailable.
  • Users can save the current globe view, restore saved views, search and filter bookmarks, mark favorites, edit or delete entries, and share or import/export bookmark links.
  • Clicking an orbital object now selects it and flies the camera to its location; satellite visibility also reflects day and night lighting.

Impact

✅ Hands-free globe navigation
✅ Saved and shareable orbital views
✅ Clearer satellite selection and day/night visibility

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • New Features
    • Added voice commands for tracking the ISS, viewing debris, opening the collision center, zooming to India, and toggling space weather.
    • Added URL-based navigation to shared bookmarks.
    • Improved globe interactions with direct hover tooltips, object selection, and camera navigation.
    • Updated the dashboard overlay with collision status, voice feedback, and a refreshed legend.
  • Bug Fixes
    • Improved globe cleanup and interaction handling for smoother navigation and reliable performance.

Greptile Summary

This PR adds browser speech recognition and connects spoken phrases to dashboard navigation and Cesium camera actions.

  • Adds a reusable speech-recognition hook with listening, transcript, and error state.
  • Adds phrase matching for ISS, debris, collision center, India, and space-weather commands.
  • Expands EarthTwin with voice controls, bookmark UI, shared views, direct object picking, and day/night visualization.

Confidence Score: 2/5

This PR is not safe to merge until the stacked bookmark dialogs, false ISS-tracking behavior, and removed keyboard globe controls are fixed.

The current code still mounts two bookmark dialogs under one state flag, labels a flight to fixed zero coordinates as ISS tracking, and replaces the accessible globe interaction system with mouse-only handlers.

Files Needing Attention: frontend/src/components/EarthTwin.tsx, frontend/src/lib/voiceCommands.ts

Important Files Changed

Filename Overview
frontend/src/components/EarthTwin.tsx Integrates voice actions, bookmarks, shared views, direct Cesium picking, and lighting into the globe dashboard.
frontend/src/hooks/useSpeechRecognition.ts Adds lifecycle and state management around the browser SpeechRecognition API.
frontend/src/lib/voiceCommands.ts Maps supported transcript phrases to injected dashboard actions.

Sequence Diagram

sequenceDiagram
  actor User
  participant UI as EarthTwin
  participant Speech as useSpeechRecognition
  participant Commands as executeVoiceCommand
  participant Action as Router / Cesium
  User->>UI: Start voice command
  UI->>Speech: startListening()
  Speech-->>Commands: recognized transcript
  Commands->>Action: invoke matched action
  Action-->>User: navigate or move camera
Loading

Reviews (3): Last reviewed commit: "Fix iss command" | Re-trigger Greptile

@codeant-ai

codeant-ai Bot commented Jul 27, 2026

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Reviewed your PR 02f4367 Jul 27, 2026 · 18:11 18:13

@github-actions github-actions Bot added ECSoC26 Official label for ECSoC26 event contributions. ECSoC26-L1 Level 1 contribution for the ECSoC26 event. bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request frontend Frontend development size/XL Very large or complex contribution. type:bug Fixes an existing bug or unexpected behavior. type:documentation Improves project documentation. type:feature Introduces a new feature or enhancement. type:frontend Changes frontend or client-side code. labels Jul 27, 2026
@codeant-ai codeant-ai Bot added the size:XL This PR changes 500-999 lines, ignoring generated files label Jul 27, 2026
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

EarthTwin updates orbital rendering and Cesium lifecycle management, adds direct hover/click picking and bookmark navigation, and integrates browser speech recognition with voice commands. The HUD, legend, metrics, and bookmark controls are also revised.

Changes

EarthTwin interaction and voice controls

Layer / File(s) Summary
Orbital rendering and viewer setup
frontend/src/components/EarthTwin.tsx
Orbital propagation validation, entity illumination styling, visualization sizing, summary state, and Cesium scene configuration are updated.
Speech recognition and command execution
frontend/src/hooks/useSpeechRecognition.ts, frontend/src/lib/voiceCommands.ts
Speech recognition state handling and phrase matching for five voice commands are added.
Navigation, picking, and lifecycle wiring
frontend/src/components/EarthTwin.tsx
Route navigation, bookmark handling, voice-action dispatch, direct Cesium hover/click picking, camera movement, auto-rotation, and viewer cleanup are wired together.
HUD, legend, and bookmark presentation
frontend/src/components/EarthTwin.tsx
Status indicators, metrics, voice feedback, legend styling, overlay spacing, and bookmark modal/sidebar rendering are revised.

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

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant EarthTwin
  participant SpeechRecognition
  participant VoiceCommands
  participant CesiumViewer
  Operator->>EarthTwin: Start voice control
  EarthTwin->>SpeechRecognition: Start listening
  SpeechRecognition->>EarthTwin: Return transcript
  EarthTwin->>VoiceCommands: Execute transcript
  VoiceCommands->>EarthTwin: Invoke matched action
  EarthTwin->>CesiumViewer: Fly camera or update view
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR also includes bookmark, URL-navigation, and Cesium hover/click refactors beyond #139's voice-command scope. Move unrelated bookmark/navigation and interaction refactors to a separate PR or document them in a matching issue.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes implement all #139 voice commands and add listening/execution feedback.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title clearly states the main change: adding voice command support.
Description check ✅ Passed The description follows the template and includes all required sections with substantive details.
✨ 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 github-actions Bot added the AI Artificial Intelligence and Machine Learning label Jul 27, 2026
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment on lines +505 to +513
const handleVoiceCommand = useCallback(
(transcript: string) => {
executeVoiceCommand(transcript, {
trackISS: handleTrackISS,
showDebris: handleShowDebris,
openCollisionCenter: handleOpenCollisionCenter,
zoomToIndia: handleZoomToIndia,
toggleSpaceWeather: handleToggleSpaceWeather,
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: The result returned by executeVoiceCommand is discarded, so the command handler never exposes its success or failure message. The UI only displays the raw transcript and recognition errors; users receive no command execution feedback despite the command executor producing a result. Capture the result and render or toast its message. [incomplete implementation]

Severity Level: Major ⚠️
- ⚠️ Recognized commands provide no execution confirmation.
- ⚠️ Unrecognized commands provide no diagnostic message.
- ⚠️ Accessibility feedback is limited to raw transcripts.
Steps of Reproduction ✅
1. Start voice recognition through `EarthTwin` at
`frontend/src/components/EarthTwin.tsx:834-849`.

2. The speech hook receives a recognized transcript and calls `onCommand(spokenText)` at
`frontend/src/hooks/useSpeechRecognition.ts:95-99`.

3. `handleVoiceCommand` invokes `executeVoiceCommand` at
`frontend/src/components/EarthTwin.tsx:505-513`, but does not assign or render its
returned `VoiceCommandResult`.

4. The executor creates success and failure messages at
`frontend/src/lib/voiceCommands.ts:26-29`, `frontend/src/lib/voiceCommands.ts:51-54`, and
`frontend/src/lib/voiceCommands.ts:82-85`; the component renders only the raw transcript
and recognition error at `frontend/src/components/EarthTwin.tsx:859-869`, so command
success or “not recognized” feedback is never shown.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/components/EarthTwin.tsx
**Line:** 505:513
**Comment:**
	*Incomplete Implementation: The result returned by `executeVoiceCommand` is discarded, so the command handler never exposes its success or failure message. The UI only displays the raw transcript and recognition errors; users receive no command execution feedback despite the command executor producing a result. Capture the result and render or toast its message.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/hooks/useSpeechRecognition.ts
Comment thread frontend/src/lib/voiceCommands.ts
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx

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

🧹 Nitpick comments (6)
frontend/src/components/EarthTwin.tsx (3)

336-337: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Move autoRotateRef above its first consumer.

autoRotateRef is declared at Line 337 but referenced by handleTrackISS (Line 164) and handleZoomToIndia (Line 196). It works today because those bodies only execute after render, but a future eager call during render would hit a TDZ error. Hoist it next to the other refs at Lines 141-144.

🤖 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 `@frontend/src/components/EarthTwin.tsx` around lines 336 - 337, Move the
autoRotateRef declaration from its current location to the existing refs section
near the top of the component, before handleTrackISS and handleZoomToIndia
reference it. Keep the ref initialized to true and remove the original
declaration to avoid duplicates.

242-291: 🚀 Performance & Scalability | 🔵 Trivial | ⚖️ Poor tradeoff

Full removeAll() + rebuild every 5 minutes discards conjunction polylines and churns entities.

viewer.entities.removeAll() at Line 246 wipes everything, then ~500 point entities plus polylines are recreated. This is a visible flicker and a GC spike on each refresh. Consider updating position/point.color on the existing entities keyed by catalog_number and only adding/removing the delta.

🤖 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 `@frontend/src/components/EarthTwin.tsx` around lines 242 - 291, Replace the
full-rebuild flow around viewer.entities.removeAll() with incremental
synchronization keyed by obj.catalog_number: reuse existing entities by updating
their position and point styling, add entities for new objects, and remove
entities no longer present. Preserve conjunction polylines and other unrelated
viewer entities, and ensure stale entries are removed from entityMap without
clearing the entire viewer collection.

93-118: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Locally redefined color/size helpers duplicate the shared visualization module.

These were previously imported. Keeping a local copy means legend, tooltip, and any other consumer can drift apart. Consider re-exporting from the shared module instead.

🤖 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 `@frontend/src/components/EarthTwin.tsx` around lines 93 - 118, Remove the
local CATEGORY_COLORS, getPointSize, and getOutlineWidth definitions from
EarthTwin and reuse the corresponding exports from the shared visualization
module. Update imports or re-exports as needed so the legend, tooltip, and
visualization consumers all use the single shared implementation.
frontend/src/lib/voiceCommands.ts (1)

45-48: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Redundant alternatives.

command.includes("collision center") already matches "open collision center", and command.includes("space weather") already matches "toggle space weather". The second clause in each pair is dead.

Also applies to: 70-73

🤖 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 `@frontend/src/lib/voiceCommands.ts` around lines 45 - 48, Remove the redundant
“open collision center” alternative from the collision-center condition and the
redundant “toggle space weather” alternative from the corresponding
space-weather condition in the voice command matching logic. Retain the broader
“collision center” and “space weather” includes checks so both command forms
continue to match.
frontend/src/hooks/useSpeechRecognition.ts (2)

61-71: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

onCommand in the dependency array tears down and abort()s recognition on every identity change.

Any consumer that passes an inline callback will recreate the SpeechRecognition instance on each render, aborting an in-flight session. Keep onCommand in a ref and drop it from the deps so the instance is created once.

♻️ Proposed refactor
+    const onCommandRef = useRef(onCommand);
+
+    useEffect(() => {
+        onCommandRef.current = onCommand;
+    }, [onCommand]);
+
     useEffect(() => {
         if (!isSupported) {
             return;
         }
             setTranscript(spokenText);
-            onCommand(spokenText);
+            onCommandRef.current(spokenText);
-    }, [isSupported, onCommand]);
+    }, [isSupported]);

Also applies to: 116-116

🤖 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 `@frontend/src/hooks/useSpeechRecognition.ts` around lines 61 - 71, Update the
speech recognition effect in useSpeechRecognition so onCommand is stored in a
ref and read from that ref by recognition callbacks, rather than included as an
effect dependency. Remove onCommand from the dependency array so the
SpeechRecognition instance is created once and in-flight recognition is not
aborted when callback identity changes.

3-44: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Use the Web Speech DOM types for recognition

Add @types/dom-speech-recognition and import the standard SpeechRecognition, SpeechRecognitionEvent, and SpeechRecognitionErrorEvent types instead of the shallow *Like interfaces. Local augmentations can still add the webkit prefix, but VoiceRecognitionLike is unnecessary because the event object shape comes from the DOM types.

🤖 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 `@frontend/src/hooks/useSpeechRecognition.ts` around lines 3 - 44, Replace the
local SpeechRecognitionEventLike, SpeechRecognitionErrorEventLike, and
SpeechRecognitionInstance type definitions in useSpeechRecognition with the
standard SpeechRecognition, SpeechRecognitionEvent, and
SpeechRecognitionErrorEvent types from `@types/dom-speech-recognition`, and add
that dependency. Retain only the global Window augmentation needed for
webkitSpeechRecognition, using the standard constructor type; remove the
unnecessary VoiceRecognitionLike-style aliases and update handlers to use the
imported DOM event types.
🤖 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 `@frontend/src/components/EarthTwin.tsx`:
- Around line 157-179: Update handleTrackISS to locate the ISS entity in
entitiesRef using catalog number 25544, then fly to or track that entity instead
of the hardcoded coordinates. Preserve the existing viewer validity guard and
rotation behavior, and correct the callback body indentation.
- Around line 850-872: Move the voice feedback overlay out of the flex controls
row and position it relative to the intended voice-control container so it
appears near the button without affecting control spacing. Add role="status" and
aria-live="polite" to the overlay container so listening updates, transcripts,
and errors are announced to screen readers; preserve the existing conditional
rendering and visual messages.
- Around line 181-215: Update handleShowDebris to navigate to the declared
dashboard debris route, /dashboard/debris, instead of /Debris; leave the other
navigation handlers unchanged.
- Around line 956-961: Remove the duplicate BookmarkModal render gated by
isBookmarkModalOpen near the earlier JSX block, and retain the keyed
BookmarkModal render that handles editingBookmark. Ensure opening the modal
mounts only the editing-aware dialog.

In `@frontend/src/hooks/useSpeechRecognition.ts`:
- Around line 118-125: Update startListening to wrap
recognitionRef.current.start() in error handling, catching synchronous
InvalidStateError from rapid repeated starts and passing the caught failure to
setError instead of allowing it to escape the click handler. Preserve the
existing guard and clear any prior error before attempting to start recognition.
- Around line 85-99: Update the speech recognition effect around
recognition.onresult to store the transcript-clear timeout in a ref, clear any
existing timer before scheduling a new one, and schedule it after
setTranscript(spokenText). Clear the active timeout during the effect cleanup to
prevent state updates after unmount.

In `@frontend/src/lib/voiceCommands.ts`:
- Around line 14-86: Update handleVoiceCommand in EarthTwin.tsx to capture the
VoiceCommandResult returned by executeVoiceCommand and surface its message
through the HUD overlay, including the failure message for unrecognized
commands. Preserve the existing raw transcript display and successful command
execution behavior.

---

Nitpick comments:
In `@frontend/src/components/EarthTwin.tsx`:
- Around line 336-337: Move the autoRotateRef declaration from its current
location to the existing refs section near the top of the component, before
handleTrackISS and handleZoomToIndia reference it. Keep the ref initialized to
true and remove the original declaration to avoid duplicates.
- Around line 242-291: Replace the full-rebuild flow around
viewer.entities.removeAll() with incremental synchronization keyed by
obj.catalog_number: reuse existing entities by updating their position and point
styling, add entities for new objects, and remove entities no longer present.
Preserve conjunction polylines and other unrelated viewer entities, and ensure
stale entries are removed from entityMap without clearing the entire viewer
collection.
- Around line 93-118: Remove the local CATEGORY_COLORS, getPointSize, and
getOutlineWidth definitions from EarthTwin and reuse the corresponding exports
from the shared visualization module. Update imports or re-exports as needed so
the legend, tooltip, and visualization consumers all use the single shared
implementation.

In `@frontend/src/hooks/useSpeechRecognition.ts`:
- Around line 61-71: Update the speech recognition effect in
useSpeechRecognition so onCommand is stored in a ref and read from that ref by
recognition callbacks, rather than included as an effect dependency. Remove
onCommand from the dependency array so the SpeechRecognition instance is created
once and in-flight recognition is not aborted when callback identity changes.
- Around line 3-44: Replace the local SpeechRecognitionEventLike,
SpeechRecognitionErrorEventLike, and SpeechRecognitionInstance type definitions
in useSpeechRecognition with the standard SpeechRecognition,
SpeechRecognitionEvent, and SpeechRecognitionErrorEvent types from
`@types/dom-speech-recognition`, and add that dependency. Retain only the global
Window augmentation needed for webkitSpeechRecognition, using the standard
constructor type; remove the unnecessary VoiceRecognitionLike-style aliases and
update handlers to use the imported DOM event types.

In `@frontend/src/lib/voiceCommands.ts`:
- Around line 45-48: Remove the redundant “open collision center” alternative
from the collision-center condition and the redundant “toggle space weather”
alternative from the corresponding space-weather condition in the voice command
matching logic. Retain the broader “collision center” and “space weather”
includes checks so both command forms continue to match.
🪄 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: 83b0affc-98e3-47c8-93b8-0dd10a758ee7

📥 Commits

Reviewing files that changed from the base of the PR and between 9152665 and 02f4367.

📒 Files selected for processing (3)
  • frontend/src/components/EarthTwin.tsx
  • frontend/src/hooks/useSpeechRecognition.ts
  • frontend/src/lib/voiceCommands.ts

Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/components/EarthTwin.tsx
Comment thread frontend/src/hooks/useSpeechRecognition.ts
Comment thread frontend/src/hooks/useSpeechRecognition.ts
Comment thread frontend/src/lib/voiceCommands.ts Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Artificial Intelligence and Machine Learning bug Something isn't working documentation Improvements or additions to documentation ECSoC26-L1 Level 1 contribution for the ECSoC26 event. ECSoC26 Official label for ECSoC26 event contributions. enhancement New feature or request frontend Frontend development size/XL Very large or complex contribution. size:XL This PR changes 500-999 lines, ignoring generated files type:bug Fixes an existing bug or unexpected behavior. type:documentation Improves project documentation. type:feature Introduces a new feature or enhancement. type:frontend Changes frontend or client-side code.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🎙️ Voice-Controlled Mission Dashboard

1 participant