Commit Graph

215 Commits (4a2ae5ec6c831388230bec6b9e9df2315365b75f)
 

Author SHA1 Message Date
name 4a2ae5ec6c add Vercel rewrites for SPA client-side routing
All paths serve index.html so React Router handles routing.
Fixes 404 on page refresh for routes like /home, /game, etc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:36:14 -07:00
name c249973cef add touch swipe to browse songs on mobile
Swipe left/right on the carousel viewport to navigate songs.
50px threshold prevents accidental triggers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:35:28 -07:00
name a295d64da4 fix unused variable errors for production build
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:18:49 -07:00
name fc74a06f16 fix vertical layout shift on intro page when buttons change
Give actions and actionsRow a fixed min-height so the sponsors
section stays in place when switching between camera/fullscreen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:57:30 -07:00
name ae4eac12a7 alphabetical team order, remove shuffle, restore hacker text on names
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:50:27 -07:00
name bcaa97d0e7 faster hacker text, shuffle team members every 3 seconds
Speed up hacker effect (2x frames at 25ms instead of 3x at 40ms).
Team members randomly reorder every 3 seconds with a fade-in
animation. No member is ranked above another.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:48:10 -07:00
name c689f1bf5e add hacker text scramble effect to credits page
Letters scramble randomly then converge left-to-right to the final
text. Each element has a staggered delay for a cascade reveal
effect: title → hackathon name → section headers → members/tech.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:46:44 -07:00
name 985d244d3a update team member names on credits page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:45:48 -07:00
name 0db219cf56 lay out team members and tech in two columns on credits page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:44:26 -07:00
name cb59f6eda5 add hackathon name and sponsor logos to credits page
Show 'BIGGEST LITTLE HACKATHON 2026' under the title. Replace
generic 'special thanks' with a sponsors section showing all
six logos (UNR, Bently Nevada, Microsoft, Ridgeline, Coffee n
Comics, Type III) with links and hover effects.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:43:48 -07:00
name a97120af70 compact end-of-game layout to fit within viewport
Reduce padding, gaps, score font size, and margins so the full
page fits within 100vh without overflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:42:48 -07:00
name a5f65e501a remove scrollbar from end-of-game screen
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:41:23 -07:00
John Montagu, the 4th Earl of Sandvich b8ac7fda74 fix end of game screen 2026-04-11 23:11:24 -07:00
name cf2e80a2d8 Merge branch 'game-polish' 2026-04-11 23:00:16 -07:00
name f81b979bdd hide flying arrows when game is paused
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:57:50 -07:00
name be07c87546 show exact body part missing in autopause message
Use framingHint from the gesture engine to tell the user exactly
what's out of frame — head or feet — instead of a generic message.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:54:04 -07:00
name 4ab97c6b2e fix immediate unpause and show context-aware pause reasons
Require 1 second after autopause before accepting arms-out gesture,
preventing stale gesture signals from immediately unpausing.

Messages now reflect actual calibration state:
- framing: "I can't see your feet! Step back."
- paused: uses framingHint or "I lost you! Step back into frame."
- ready (waiting for unpause): "Raise your arms to continue!"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:52:19 -07:00
name 31852ed101 show red framing line whenever feet are out of frame
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:49:41 -07:00
name 54a46da09e fix unpause by using arms-out gesture signal instead of pos-center
Calibration skips pos-center when resuming from paused state, so
the previous approach never allowed unpause. Now watches the gesture
signal directly — arms-out while autopaused triggers resume.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:49:01 -07:00
name 2ac2584806 require arms-out to unpause, fix score shifting from combo
Autopause now stays active until user raises arms (pos-center→ready
transition). Simply stepping back into frame keeps the game paused.

Score HUD stacked vertically — combo sits above score so it doesn't
shift the score horizontally when appearing/disappearing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:44:58 -07:00
name 143faeb640 debounce autopause resume and show context-aware pause messages
Resume requires 500ms of stable 'ready' calibration before
unpausing, preventing flicker when arms-out is detected briefly.

Pause message now varies by calibration state:
- framing: "I can't see your feet! Step back."
- paused: "Raise your arms to continue!"
- ready (resuming): "Resuming..."

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:41:48 -07:00
name ae48e5c1e7 add step debounce and logging to debug double-arrow burn
Debounce same-direction steps within 200ms to prevent a single
physical step from consuming two arrows. Log step events with
arrow count and match details.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:38:10 -07:00
name 9055cab8d8 widen hit windows and stop premature steps burning next arrow
Perfect window: 120ms → 180ms, Good window: 280ms → 350ms.
This makes perfect detection match the visual arrow position better.

Remove the logic that marked the nearest future arrow as a miss
when stepping with nothing in range. Now premature steps are
simply ignored instead of punishing the player.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:37:37 -07:00
name b4efd63b5e make hardware acceleration warning dismissible
Show softer wording ('might be janky') with a Continue Anyway
button to bypass the warning.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:35:38 -07:00
name 00d2b8f7e1 fix missing useEffect import on IntroPage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:33:21 -07:00
name ce6e01aede warn user on intro page if hardware acceleration is disabled
Check WebGL renderer for SwiftShader/software indicators. If
detected, show a red warning telling the user to enable GPU
acceleration in browser settings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:32:43 -07:00
name e446b24b10 mention head explicitly in auto-pause message
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:29:52 -07:00
name ac82b4b8f5 clarify auto-pause message and hide framing line during gameplay
Show "PAUSED — I can't see you! Step back into frame." when the
game auto-pauses. Hide the red framing line once the game has
started so only the pause message appears.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:29:16 -07:00
name e22b3b4291 move combo indicator to bottom HUD next to score
Remove combo from ArrowGame's top-left ag-score div. Track combo
in GamePage and display it as "Nx" in pink next to the score in
the bottom HUD, above the progress bar.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:28:25 -07:00
name b22a9be20b fix SSC parser not recognizing comma+comment measure separators
Commas followed by comments (e.g. ',  // measure 1') were not
recognized as measure separators, causing all notes to be parsed
as a single measure with compressed timing. This is why all arrows
spawned at once on most songs (except Get Lucky which had plain
commas).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:20:12 -07:00
name 4e2abdd857 add extensive debug logging and LOG button to game page
Logs audio lifecycle (loadstart, loadeddata, canplaythrough, error,
ended), active transitions, arrow spawning, calibration changes,
and periodic state dumps. LOG button in top-right copies all logs
to clipboard for debugging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:18:01 -07:00
HumanoidSandvichDispenser bb9f285051 fix padding in leaderboard (#7) 2026-04-11 22:04:09 -07:00
name 5a8a5564f2 fix black arrows, audio buffering, and auto-pause on out-of-frame
Arrows: update CSS lane color selectors to match new positions
(30/40/60/70% instead of 12.5/37.5/62.5/87.5%).

Audio: wait for canplaythrough event before attempting play(). This
fixes songs other than Get Lucky failing because the audio wasn't
buffered yet (Get Lucky worked because the preview cached it).

Auto-pause: track autoPaused state based on calibrationStatus. When
the user leaves frame (calibration goes to paused/framing), the game
pauses with "I lost track of you" message. Auto-resumes when they
return to frame.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:01:36 -07:00
name f939ecf3f9 rewrite audio/spawn as single polling interval, add debug logging
Replace fragile multi-effect coordination with one effect + one
interval that polls activeRef for state transitions. No more
missed play() calls from effects not re-running.

Added console.log for: effect init/cleanup, first play, resume,
pause, and play success.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:54:06 -07:00
name c608e992aa move arrow lanes closer together (30-70% instead of 12.5-87.5%)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:52:07 -07:00
name 06585ca056 fix audio never starting when calibration finishes before chart loads
Root cause: pause/resume effect depended only on [active]. If active
was already true when chartNotes loaded, the audio loading effect
created the audio but the pause/resume effect never re-ran to play
it — songStartRef stayed null, no arrows spawned.

Fix: audio loading effect now tries to play immediately if active is
already true (via activeRef). Pause/resume effect handles both first
play (songStartRef null) and resume (pausedAtRef > 0) cases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:48:03 -07:00
name b1d074bd7b fix arrow spawning by consolidating audio/spawn into one effect
Root cause: three separate effects (audio load, pause/resume, spawn)
with overlapping deps caused race conditions — spawn interval could
start with stale refs, active toggling would recreate intervals
losing spawn state, and random mode could fire before chart loaded.

Fix: single effect for audio + spawn lifecycle (depends only on
chartNotes/audioUrl, not active). Spawn interval runs continuously
and checks songStartRef. Separate pause/resume effect depends only
on active, shifts arrow timestamps on resume. Removed random mode
fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:37:07 -07:00
Max 6b9fe9f5a0 Feature/homescreen (#6)
homescreen.
2026-04-11 21:36:40 -07:00
name 0e67f8b285 fix game pausing/unpausing when calibration status flickers
Use gameStarted (latched true once ready) instead of gameReady for
the ArrowGame active prop. Once the game starts, calibration status
changes no longer interrupt gameplay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:31:52 -07:00
name 895b90c8bb increase score font size from 36px to 48px
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:31:22 -07:00
name 533aae182a thicken song progress bar from 6px to 14px
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:30:43 -07:00
name e8bb1afed4 fix pause/resume losing arrow timing and song progress
On resume, shift all existing arrow targetTimes forward by the
pause duration so they don't immediately register as misses.
Track pause timestamp to compute the exact offset.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:30:11 -07:00
name 412652b1ab add global fullscreen button when not in fullscreen mode
Shows a small button in the bottom-right corner on all screens.
Listens to fullscreenchange events and hides when already fullscreen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:26:41 -07:00
name 3c5aee0ec9 fix score jitter, add progress bar, improve pause behavior
Score: move to bottom center above progress bar, remove key-based
remounting that caused layout shifts. Delta now fades in place.

Progress bar: magenta gradient bar at the very bottom showing song
progress via onProgress callback from ArrowGame.

Pause: decouple audio lifecycle from active prop so pausing doesn't
reset the song. Audio pauses/resumes cleanly with timing preserved.

Auto-pause: once game has started, show "I lost track of you" when
calibration pauses instead of the calibration overlay. Suppresses
"ARMS OUT" text during gameplay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:24:40 -07:00
name e2042cd4ef fix end-of-game showing default score when finishing early with 0
Consider store results valid when a song is selected, not just when
score > 0. Prevents fallback to DEFAULT_SCORE on early finish.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 20:19:24 -07:00
name 812bc72450 stack camera hint below button, keep fullscreen/windowed side by side
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 20:18:38 -07:00
name 5fb6cd45c0 remove webcam background from intro page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 20:17:49 -07:00
name 7b4c73f0a0 integrate camera permission into intro page flow
Show 'ENABLE CAMERA' button first with a hint explaining why. After
permission is granted, webcam shows as background and fullscreen/
windowed buttons appear. If denied, show error with retry option.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 20:17:20 -07:00
name 9d73756cfc show webcam feed as subtle background on intro page
Embed the camera stream into the page as a low-opacity mirrored
background. This makes the permission prompt feel integrated rather
than a random browser popup. Stream is cleaned up on unmount.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 20:15:59 -07:00
name f7d4834bb6 request camera permission on intro page load
Prompt for webcam access early so the permission dialog appears
before the user reaches the game. Stream is immediately stopped
after permission is granted.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 20:14:33 -07:00