๐Ÿ“ฆ taoyifei_182158_15200435
โœ… Reviewed

Where it lives

An AI karaoke dashboard

VoiceForge Karaoke presents itself as an AI-powered living-room karaoke app. The landing screen shows a pulsing mic logo, a gradient-text header, and an ambient pink/cyan/purple glow behind everything. On load, the app fetches a session payload and renders a two-column dashboard โ€” a big "Now Playing" panel on the left and a sidebar with queue, leaderboard, and AI feature toggles on the right.

๐Ÿ  Living Room mode โšก Crowd Energy bar ๐ŸŽน Key & BPM ๐Ÿ‘‘ Legendary difficulty
1
Now Playing
Big gradient "album art" card, song title in Righteous display font, artist name in pink, meta chips for key/BPM/duration/difficulty, and three AI toggles below (pitch assist %, harmony voices, style transfer).
2
Lyrics Display
One line at a time shown in a dark box, with the target notes listed underneath (e.g. Bb3 ยท Bb3 ยท C4 ยท Bb3 ยท G3 ยท F3).
3
Playback Controls
Five circular buttons: prev lyric, prev track, play/pause, next track, next lyric. Pressing play auto-advances the lyric line every 3 seconds.
4
Crowd Reactions
Five reaction buttons (cheer, clap, gasp, sing along, lighter wave). Clicking spawns a burst of floating emoji that drift up the screen, and bumps the crowd-energy bar by 5%.
5
Up Next / Leaderboard / AI Features
Sidebar cards showing the song queue (click to jump), a two-person leaderboard with avatar emoji and badges, and three AI model tiles with latency readouts you can click to disable/enable.

What's off

#1
Pressing Play plays nothing
The app has no audio at all โ€” the play button just starts a setInterval that advances the lyric every 3 seconds.
Critical
For a karaoke app the absence of audio is the defining issue. No backing track, no vocals, no metronome โ€” just silent lyric paging. Even a web-MIDI beep at each note would communicate "this is a demo of the UI, audio lives elsewhere."
#2
Lyric timing ignores the data
Each lyric in the JSON has real start_ms and end_ms fields, but the app just advances every 3000ms.
High
"Bohemian Rhapsody" line one runs 48.0โ€“55.0s (a 7-second line), and line two runs 55.5โ€“62.0s (6.5s). Fixed 3s advancement means lyrics desync immediately. The timing data is right there in the payload, unused.
#3
Settings read-only despite looking interactive
Pitch assist shows "(40%)", harmonies shows "(2)", but there's no way to change either number.
High
The toggles flip the boolean on/off, but pitch_assist_strength (0.4) and harmony_voices (2) are displayed inline as if they were controls. No slider, no plus/minus, no dropdown. Same with style_transfer โ€” the chip appears when a style is set, but the JSON's available_styles array of six options is never offered as a picker.
#4
Leaderboard never updates
Scores are whatever the JSON says, forever.
Medium
Mashing the clap button 50 times can push crowd energy to 100% but nobody's score changes. score_total, songs_sung, best_streak are all static readouts rather than live state.
#5
Rich singer data never surfaced
Each singer has a vocal range, song count, and streak; the UI only shows score and two badges.
Medium
vocal_range: { lowest_note: "A3", highest_note: "C6" } is in the payload but nowhere on screen. A karaoke app deciding song suggestions by vocal range would be obvious โ€” this doesn't.
#6
Reaction spam is unbounded
Each click spawns 5 floating emoji with no cooldown and no cap.
Low
Rapid button-mashing creates dozens of simultaneous floating emoji and pushes crowd energy to 100% in seconds with no indication it's maxed. Also, once it hits 1.0 it just stays there silently.
#7
Queue is read-only
You can jump to a song but not add, remove, or reorder.
Low
queued_by is shown on each song, which implies multiple people queue songs, but there's no add-to-queue UI and no way to see which singers exist beyond the two in singers[].

Best attempt at a fix-it prompt

Rework this single-file VoiceForge Karaoke app so the AI-feature UI actually does something and the rich fields in the JSON are no longer wasted. Keep the neon pink/cyan/purple aesthetic, the Righteous display font, the gradient top-bar on each card, and the floating emoji reactions โ€” only change or add what's listed below.
01
Drive lyrics from the actual timing data
Replace the hardcoded 3-second interval with a real clock. When play is pressed, track elapsed ms since start and switch the current lyric based on each line's start_ms / end_ms. Show a thin gradient progress bar under the lyric box fed by the line's remaining time.
02
Make the AI settings editable
Turn the "Pitch Assist (40%)" chip into a chip-plus-slider that adjusts pitch_assist_strength from 0โ€“100%. Turn "Harmonies (2)" into a stepper with +/- buttons bounded at 0โ€“4. Replace the static style-transfer chip with a dropdown seeded from ai_models.style_transfer.available_styles.
03
Add a mock audio layer using the Web Audio API
No backing track needed โ€” just a sine-wave oscillator that plays the current lyric's notes in sequence when playing. The note letters already exist in each lyric's notes array. This turns the app from a silent demo into something that actually responds to play/pause and AI toggles (e.g. pitch correction snaps the oscillator to the nearest semitone).
04
Make the leaderboard live
Add a "Performance Score" that ticks up while playing based on crowd energy and the AI settings (e.g. +1/sec baseline, ร—1.5 if harmonies are on, ร—2 during legendary songs). Update score_total in state when a song ends and re-sort the leaderboard with a smooth reorder animation.
05
Show each singer's vocal range
Add a small "Singers" card above the leaderboard showing each singer as an avatar chip with their vocal range rendered as a mini horizontal bar from C3 to C6 and their best_streak as a flame count. Highlight any queued song whose root note falls inside the current singer's range.
06
Tame the reaction spam
Cap floating emoji at 20 simultaneous elements; apply a 200ms cooldown per reaction button with a radial cooldown ring animation. When crowd energy hits 100%, briefly pulse the energy bar gold and flash a "MAX HYPE" ribbon across the top of the Now Playing card.
07
Make the queue editable
Add an "Add to queue" button at the bottom of the sidebar that opens a small modal with title, artist, difficulty, and "queued by" (dropdown of existing singers). Allow drag-to-reorder and swipe-left-to-remove on queue items. New queue entries should get sensible defaults for ai_settings.
08
Single self-contained HTML file, graceful degradation
No build step, no external libs beyond the existing Google Fonts import. If any JSON field is missing (no vocal_range, no available_styles, etc.), the corresponding UI should just not render rather than throwing.