Avoid awaiting during the save click handler, and treat Safari desktop like iOS by opening the MP3 in a new tab instead of relying on <a download> for blob URLs.
Made-with: Cursor
Offer full-song export via prompt and improve the fallback save path by using Share Sheet when available or opening the MP3 in a new tab on iOS, instead of relying on unreliable blob downloads.
Made-with: Cursor
Use the file save picker when available for a true single-click save, add encoding progress updates, and cap very long exports to avoid apparent stalls.
Made-with: Cursor
Use bundled lamejs instead of a CDN global, and avoid browser user-gesture download blocking by preparing the MP3 first and downloading on a follow-up click.
Made-with: Cursor
- Copy Link and Share to X buttons on the shared player page
- Consistent Game Boy styling with main page
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Download MP3 alongside Copy Link and Share to X buttons
- Offline rendering for faster MP3 exports
- Version history updated with v1.4 and v1.5 changes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add renderOffline() to SynthesisEngine for faster-than-realtime audio rendering
- Add renderOffline() to MotifEngine wrapping the synthesis engine
- Update ux-test.html MP3 download to use offline rendering (no more real-time capture)
- Restyle ux-test.html with Game Boy LCD aesthetic to match main site
- Fix "16-Bit" to "8-Bit" across all titles and share cards (Game Boy is 8-bit!)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New format:
I made a Game Boy version of [song]
Using @b1rdmania's Wario Synthesis Midi Engine
Check it out here [link]
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Removed:
- Old planning docs (DEPLOYMENT.md, IMPLEMENTATION.md, etc.)
- Dev notes (thursday-aims-progress-problems.md)
- Old backup files (main-simple.ts, main-working.ts)
- Test file (test.html)
- Unused image (chiptune_blog_piece_1000x.webp)
- docs/ folder with old audit/plan docs
Updated:
- Renamed claude.md to CLAUDE.md
- Added .claude/ to gitignore
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shows "Tap to enable audio on iOS" banner on iOS devices.
Hides automatically once audio is unlocked via button or play.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When clipboard copy fails, shows a text input with the share link
so users can manually select and copy it.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Status updates to "Starting search..." immediately when button clicked,
before async operations. This will help diagnose if JS handler is running.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Wraps app initialization in try/catch to display errors.
Adds console.log at key points to trace what's happening.
Catches and displays errors from search handler.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Previously clicking Search with no input silently did nothing.
Now shows "Enter a song name to search." and focuses the input.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed from "Ready. Enter a song to run it through our Wario 16-Bit Engine and make a new version." to "Ready. Search any song to make a Game Boy version."
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Try modern Clipboard API first
- Fall back to execCommand('copy') with textarea trick
- Uses setSelectionRange for iOS compatibility
- Only show manual text box if both methods fail
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Call unlockAudio() synchronously at start of click handler
- In audioUnlock: fire resume() immediately without await
- Play silent buffer synchronously before any async work
- Then await resume() again to ensure it completes
iOS requires audio interaction in synchronous user gesture context
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove "Choose a different source" link
- Remove Details toggle
- Simplify meta to just show source (remove length/notes)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Open window immediately before async fetch to preserve user gesture
- Update MIDI selection helper text per feedback
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- FAQ button now only in hero header (removed from footer)
- New Search button hidden by default, shown only after generating
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- OG description no longer includes "by @b1rdmania" (only X share has it)
- Song titles now strip standalone "mid" and "midi" words
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Hero now shows "WARIO SYNTH v1.3" with FAQ button
- Version history moved to bottom of page
- Added Wario Synthesis Engine explanation to FAQ
- Bigger Wario sprite (192px)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added "Share to X" button next to "Copy link"
- Tweet text: "I made [song] game boy version. Click to listen or generate your own, made in Wario Synth by @b1rdmania"
- Updated Twitter cards to summary_large_image
- Dynamic OG description includes song title
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Try navigator.clipboard.writeText first
- Show "Copied!" feedback on success
- Only show text box fallback if clipboard fails (iOS)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Preserve scroll position when clicking Generate
- Add back "Ps. Built with Claude Code" in FAQ
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix FAQ modal scrolling/sizing on iOS with max-height and flexbox
- Host Press Start 2P font locally to avoid content blocker issues
- Remove FAQ button from top bar (keep footer button)
- Shorten MIDI selection tips text
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Re-enable /api/share for short links (/s/abc123)
- Title shows as "Song Name - WARIO SYNTH"
- Description: "I made this in WARIO SYNTH"
- Falls back to long URL if short link fails
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Simple solution: show the link in a selectable text box
Works everywhere without clipboard API issues
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove async fetch before share (was breaking iOS gesture chain)
- Use navigator.share() on mobile for native share sheet
- Simple clipboard.writeText() on desktop
- No complicated fallbacks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Try modern clipboard API first
- For iOS: use contentEditable + special range selection
- Set font-size 16px to prevent zoom on iOS
- Properly throw error on failure for user feedback
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix iOS Safari clipboard by using textarea with proper selection
- Add visible "Link copied!" confirmation next to Copy link button
- Update FAQ modal styling to match Game Boy light palette
- Change "Use this →" to "Use" in search results
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Flip from dark to light authentic Game Boy LCD palette
- Update both main app (index.html) and share page (play.html)
- Light background (#C8D8B0) with dark text (#1D2A1D)
- Keep results interactive after selecting a song
- Remove search locking so users can always search or pick different results
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix SynthesisEngine to not cleanup layers on stop, preventing
audio from going silent after pause/resume
- Remove "Reimagined as classic game-console music" line
- Remove procedural playback meta block
- Move "Generate your own" CTA inside player card
- Update footer with Birdmania credit and Twitter link
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add classic LCD green color palette (#9BBC0F, #8BAC0F, #306230, #0F380F)
- Switch to Press Start 2P pixel font
- Add scanline overlay effect for CRT feel
- Style buttons with chunky 4px borders and inset shadows
- Remove all border-radius for pixel-perfect look
- Update hero, controls, results table, and player sections
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>