Correct offset from 66.389 to 0.207 (was matching repeated section).
The tool now generates stereo comparison WAV files (left=local,
right=YouTube) for each candidate so you can verify by ear.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
YouTube ToS requires the embedded player to be visible (min 200x200px).
Place it in the top-left corner at 240x135 with rounded corners and a
subtle border. Player fills its container and is non-interactive
(pointer-events: none) so it doesn't interfere with gameplay.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pause menu now has a KB button next to LOG. When enabled:
- Arrow keys feed steps directly into the game
- Calibration is bypassed so the game starts immediately
- Camera-based step detection and auto-pause are disabled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace direct HTML5 Audio usage with an AudioPlayer abstraction that
supports both local audio files and YouTube IFrame Player API. Songs
can now specify a youtubeVideoId and youtubeOffset to stream audio
from YouTube instead of hosting audio files.
- AudioPlayer interface with LocalAudioPlayer and YouTubeAudioPlayer
- YouTube IFrame API type declarations and script loader
- Cross-correlation offset detection tool (tools/audio-offset/)
- Get Lucky configured with YouTube video 5NV6Rdv1a3I, offset 66.389s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
128 BPM, 2:09, from Oakridge ITG Cab 2011 Songpack 3.
Placed after Meet Me Halfway in the front section.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Beat It (Michael Jackson, 139 BPM) and Meet Me Halfway (Black Eyed
Peas, 130 BPM) added after Just Dance at the front. Horsestyle
(Unicorn On Ketamine, 200 BPM) and Heroine moved to the middle.
25 songs total.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Desktop unchanged (side-by-side layout). On mobile (<600px), shows
player + single tip with step counter and Next/Got It button.
Removed overflow scroll from overlay.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Player sits left, tips right. Stacks vertically on mobile (<600px).
Card wider (680px) to fit both comfortably.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
RecordingPlayer gains autoPlay, loop, showControls props.
Tutorial shows the stick figure demo on loop above the tips.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Recording now captures full MediaPipe data. simplifyRecording() picks
the 13 stick-figure landmarks with optional movement dedup and end trim.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Recording now captures only 13 landmarks (nose + shoulders/elbows/wrists
+ hips/knees/ankles). Player draws circle head, no palms/feet.
Test page loads bundled recording on mount.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
RecordingPlayer draws 2D skeleton from recorded frames with play/pause
and scrub controls. Test page at /recording-test loads JSON via file picker.
Also added download button to /record results.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows webcam with full skeleton overlay, record button with 5s countdown,
records all 2D + 3D landmark frames, and provides copy-to-clipboard JSON export.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use CSS custom properties for lane positions so they can be adjusted
via media query. On screens under 600px, lanes spread from 12.5%-87.5%
instead of 30%-70%. Switch lane color selectors to data-dir attributes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Make drawMode reactive via ref so it can change without restarting
the pose loop. Switch from toes-only to full skeleton when paused
or autoPaused, so the user can see exactly what MediaPipe is
tracking and debug positioning.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Split tech list into individual items with hover tooltips explaining usage
- Add Zustand and Vercel to the tech list
- Remove fullscreen button overlay from AppLayout
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Show tutorial overlay on first /game visit (localStorage flag)
- Add TUTORIAL button to escape menu to re-show tips
- Move LOG and fullscreen into escape menu corners (subtle placement)
- Change menu button from II to three dots for better mobile UX
- Hide AppLayout fullscreen button on /game (now in escape menu)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows 4 gameplay tips (return foot to center, stay in one spot,
face camera, stay fully visible). Stores dismissal in localStorage.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Show tutorial overlay on first /game visit (localStorage flag)
- Add TUTORIAL button to escape menu to re-show tips
- Move LOG and fullscreen into escape menu corners (subtle placement)
- Change menu button from II to three dots for better mobile UX
- Hide AppLayout fullscreen button on /game (now in escape menu)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows 4 gameplay tips (return foot to center, stay in one spot,
face camera, stay fully visible). Stores dismissal in localStorage.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
200 BPM uptempo hardcore. Chart auto-generated with Beginner (quarter
notes) and Hard (every beat with varied patterns) difficulties.
Audio downloaded from YouTube.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simfile from zenius-i-vanisher.com (iamthek3n Selections).
119 BPM, 2:05 duration, Beginner through Hard difficulties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
iOS Safari doesn't support requestFullscreen. Detect support and:
- Intro page: show single START button instead of FULLSCREEN/WINDOWED
- AppLayout: hide the global fullscreen button entirely
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Only use uppercase letters and numbers which have consistent
baseline height. Removes @#$%&*! that caused layout shifts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move navHint, menuTriangle, and pink selection highlight hiding
to 480px mobile-only query. Previously hidden at 640px/700px height
which affected laptops.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use fixed height 100vh/dvh instead of min-height, add overflow
hidden to layout container.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Was hidden at 640px or height < 700px which caught desktop windows.
Now only hides on truly mobile-sized screens.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace vertical pumping with horizontal swaying. Elbows stay near
shoulder height with only a small vertical bob. Wrists follow with
amplified swing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>