Skip to content

Enhance visuals and interactivity: Groovy camera/mountains, vivid tre…#3

Open
Lightningwave wants to merge 60 commits intonew-vanfrom
main
Open

Enhance visuals and interactivity: Groovy camera/mountains, vivid tre…#3
Lightningwave wants to merge 60 commits intonew-vanfrom
main

Conversation

@Lightningwave
Copy link
Copy Markdown
Collaborator

@Lightningwave Lightningwave commented Dec 6, 2025

…es, animated station, and rhythm improvements


Note

Introduces a multimodal stack with backend AI, demo assets, and richer interaction/visuals.

  • Backend (Convex): New elevenlabs.ttsWithTimestamps action (server-side TTS) and words.generateChildFriendlyWords (Gemini-powered synonyms/antonyms); generated API/server typings and Convex tsconfig
  • Assets & Docs: Adds GIF demos via Git LFS and a detailed README.md describing WordWave, interaction model, and tech stack; ignores .env.local
  • Dependencies: Integrates audio/AI libs (Tone.js, Magenta.js), ElevenLabs and Google SDKs, Convex client, Framer Motion, and supporting packages
  • Frontend (App.jsx): Gesture-based "sing" (pinch-in-air hold with on-screen ring), environment/camera groove transitions, stage "Your Turn" 3D text, word-collect pop sounds, performance tweaks to scene logic, and phase/handlers plumbed to DropZone; adds VoiceAgent component and UI refinements (title/topic input, camera toggle move)
  • Misc: Updates index.html title and adds a global shim for bundlers

Written by Cursor Bugbot for commit 8c29316. This will update automatically on new commits. Configure here.

…es, animated station, and rhythm improvements
@vercel
Copy link
Copy Markdown

vercel Bot commented Dec 6, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
word-wave Ready Ready Preview, Comment Dec 24, 2025 5:49am

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 6, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch main

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 and usage tips.

… plus tree color pulsing and hot air balloon sound fix
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

This PR is being reviewed by Cursor Bugbot

Details

You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

Comment thread src/components/DropZone.jsx
// Use bounce (0..1) to modify Y scale
// Slight delay per mountain for "wave" effect across horizon
const wave = Math.sin(i + t);
const bounceEffect = isPlaying ? (bounce * 0.1) + (wave * 0.02) : 0;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Bug: Mountains component missing bounce fallback calculation logic

The Mountains component expects a bounce prop for beat-synced animation, but App.jsx no longer passes it (changed from bounce={bounce} to isPlaying={isPlaying}). Unlike the Trees component which has fallback logic to calculate bounce internally when the prop is 0 and isPlaying is true, Mountains lacks this fallback. The calculation (bounce * 0.1) + (wave * 0.02) always evaluates to just wave * 0.02 since bounce defaults to 0, resulting in a barely noticeable animation instead of the intended beat-synced "groovy" effect mentioned in the PR description.

Fix in Cursor Fix in Web

Comment thread convex/words.js
return {
word,
synonyms: parsed.synonyms || [],
antonyms: parsed.antonyms || [],
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Bug: Missing null check after JSON.parse could throw TypeError

The JSON.parse(jsonText) result is used directly without validating it's an object. If the Gemini API returns the string "null" (valid JSON), JSON.parse returns null, and accessing parsed.synonyms throws a TypeError: Cannot read property 'synonyms' of null. Adding a check like if (!parsed || typeof parsed !== 'object') before accessing properties would prevent this crash.

Fix in Cursor Fix in Web

Comment thread src/components/DropZone.jsx
Comment thread src/App.jsx
const pulseColor = state.scene.background.clone();
pulseColor.offsetHSL(0, 0, bounce * 0.1); // Brighten on beat
state.scene.background.copy(pulseColor);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Color brightness accumulates over time during playback

In EnvironmentController, the background and ground color pulse logic applies offsetHSL to the current color every frame when isPlaying is true. The pattern clones the already-modified color, adds brightness/saturation offsets based on bounce, then copies it back. Since this runs every frame and the lerp toward targetBg/targetGround is slow (speed = delta * 2), the cumulative HSL offsets can outpace the correction, causing colors to progressively drift brighter/more saturated during extended playback sessions. The offset is applied to the result of previous offsets rather than to a baseline color.

Additional Locations (1)

Fix in Cursor Fix in Web

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants