3.7 KiB
3.7 KiB
Home UX audit + improvements (arcade-first)
This doc is a saved copy of the current home UX audit plan (no code changes).
Current UX issues (what’s making it feel uninspiring/confusing)
- Unclear hierarchy: “Search”, “Preview”, and “Synthesis Engine” compete; users don’t instantly see the main thing to do.
- Weak step-by-step guidance: The app is a 3-step flow (Search → Select → Run engine), but the UI doesn’t feel like a guided sequence.
- Controls feel detached from state: Buttons don’t always read as “locked until selection”; the reason for disabled state isn’t visible.
- Results table is dense on mobile: long titles wrap unpredictably, selection highlight is subtle.
- Copy and concept drift: “emulator/engine” and “MIDI scrape/analyse” copy varies; the story should be consistent and confident.
- iOS audio state: The “Enable Audio” banner is reactive but not integrated into the flow (and can appear “random”).
Target outcome
Arcade cabinet vibe with a clear, dramatic main CTA:
- Primary action: “Run the engine” (Generate & Play)
- Secondary: preview the MIDI
- Stronger “insert coin” style guidance: show step chips and a big engine panel.
Proposed UX changes (high impact, low risk)
1) Make the flow explicit
Update index.html:
- Add a compact “Steps” row near the top:
- Step 1: Search
- Step 2: Pick a MIDI
- Step 3: Run the engine
- Tie each step’s visual state to app state:
- Step 2/3 show “locked” styling until available.
2) Promote “Synthesis Engine” as the hero module
- Move the engine card visually above Preview (or keep order but make engine card visually dominant).
- Make engine CTA bigger and more arcade:
- Primary button: Run the engine
- Secondary: Stop
- Volume + progress remain but visually subordinate.
- Add a small one-line “what this does” under the button, not as a paragraph.
3) Preview becomes clearly “optional”
- Rename to “Listen to the source MIDI (optional)”
- Collapse preview by default on mobile (or add a “Show preview” toggle) to reduce overwhelm.
4) Results list readability + selection confidence
- Increase row tap targets and selection contrast.
- Add a right-side “Selected” chip on the selected row.
- On mobile:
- clamp long titles to 2 lines
- reduce columns (hide Source or Duration) based on width.
5) iOS audio UX integrated into the engine (subtle)
- Only on iOS-like browsers and only when audio is locked.
- Show a small under-section link: “Having trouble on iOS? Enable audio”
- Clicking expands a compact CTA row (Enable Audio button + tiny state line).
- Avoid a big persistent banner that could confuse non-iOS users.
6) Copy pass
Deferred for now: keep copy changes out of this pass.
Implementation plan (concrete)
Files
- Primary:
index.html - Minor TS adjustments (state-driven CSS classes):
src/main.ts
Approach
- Add a small set of state CSS classes on
body(or on.container):state-has-resultsstate-has-selectionstate-audio-locked
- In
src/main.ts, toggle these classes when:- results are loaded
- a selection is made
- audio unlock state changes
- Use CSS to:
- style locked sections
- highlight the engine CTA
- improve mobile responsiveness
Test plan
- Desktop Chrome/Safari:
- search → select → engine run
- preview optional still works
- iOS Safari:
- first run shows “arm audio” only when needed
- no random banner when audio is already running
- Visual:
- mobile widths (320–430px)
- long titles wrapping
Non-goals
- No changes to the core synthesis engine behavior or backend.
- No copywriting/wording changes in this pass.