memlnaut-nisps/playground/devlog/2026-03-21-ui-redesign-explorations.md

104 lines
6.5 KiB
Markdown
Raw Normal View History

# Playground UI Redesign Explorations
**Date**: 2026-03-21 → 2026-03-22
**Status**: Three designs built and iterated through 4 rounds of feedback. Several refinements still open.
## Context
The existing playground UI (`index.html`) is a single-column mobile-first layout: header, canvas, 20 parameter bars, joystick + controls. It works but has several tensions:
- **Individual param bars dominate the screen** and are only interactive in Examples mode
- **Two orthogonal mode axes** (learning mode: examples/RL, output mode: visual/synth) live in different places with different UI patterns
- The synth side panel feels bolted on
- The "teach then perform" arc isn't surfaced — new users don't know what to do first
- Most importantly: **manually setting sliders contradicts the core thesis** — NISPS exists precisely because you *shouldn't* need to understand individual parameters
With the C15 synth mode now at **126 parameters**, the slider approach is impossible, making the ML mapping the only viable interface.
## Design Thesis
The three designs explore different answers to: **if users shouldn't set params directly, what DO they interact with?**
## Design A: "Immersive"
**File**: `a-immersive.html` | **Philosophy**: The canvas IS the app
The flow field fills the entire viewport. Everything else floats on top as translucent glassmorphism overlays:
- **Floating circular joystick** with integrated training-example minimap (merged into one control)
- **Heatmap strip** at top — horizontal fill bars (like a tiny equalizer) showing output values at a glance. Hidden in synth mode since the full-screen synth visualizer serves this purpose.
- **Bottom sheet** with chevron toggle (collapsed/expanded), mode toggles always visible in a sticky floating bar
- **RL mode is default** — floating thumbs up/down buttons with key hints (1/2) built in
- **Follow mode** for trackpad-friendly exploration without holding the mouse
- **Synth mode**: full-screen parameter landscape (126 vertical bars grouped by synthesis section), interactive/draggable in examples mode, with a quick play button + hover drawer next to the back button
**Strengths**: Feels like an instrument. Canvas gets maximum space. The synth visualizer conveys the full 126-param scale.
**Open issues**: See bd issue for remaining refinements (synth bar layout, slider interactivity, default mode).
## Design B: "Workbench"
**File**: `b-workbench.html` | **Philosophy**: Show the mapping, not the params
A CSS grid dashboard (2-column on desktop, single-column with collapsible sections on mobile):
- **Mapping heatmap** (the key innovation): a 2D canvas sampling a 20×20 grid through the network, showing the learned function as a color field. Training examples are visible dots. Click/drag anywhere to control position — the mapping IS the joystick (merged).
- **Parameter constellation**: dots in a circle, sized by value, with a count label ("20 parameters" / "126 synth parameters")
- **Semantic param groups**: collapsible cards with sparkline headers. 5 groups for visual mode, 17 groups for synth mode (covering all 126 params by synthesis section)
- **Synth mode**: replaces the flow field canvas with a parameter landscape visualization (126 grouped bars)
- **Softened heatmap colors** with grid overlay for readability
**Strengths**: The mapping heatmap makes the learned function tangible. Param groups reduce cognitive load.
**Open issues**: Visual pill toggle reliability, heatmap color tuning.
## Design C: "Journey"
**File**: `c-journey.html` | **Philosophy**: The UI teaches you, then disappears
Three phases that transition based on user actions:
1. **Explore** (start): fullscreen canvas + floating joystick + gentle prompts. Minimal chrome.
2. **Teach** (active training): canvas shrinks to ~40%. Teaching interface with mode tabs (Examples/RL). Preset snapshot grid. Minimap of examples. Collapsible raw sliders.
3. **Perform** (post-training): canvas expands back to fullscreen. Controls fade to near-invisible after 5s inactivity.
- **RL mode is default** teach mode with keyboard shortcuts (1/2) working in all phases
- **Heatmap strip** with horizontal fill bars, scales from 20 to 126 params
- **Synth mode**: parameter landscape visualization replacing the flow field
- **Follow mode** with double-click toggle and pill button
**Strengths**: Maps perfectly to the real user arc. Phase 3 auto-dissolve is genuinely novel.
**Open issues**: RL mode joystick visibility, fine-tune slider style consistency.
## Shared Architecture
All three designs share unchanged modules:
- `js/nisps/` — MLP, IML, Dataset, Layer, Node (the ML engine)
- `js/ui/visualizer.js` — FlowFieldVisualizer (Canvas2D particle system)
- `js/synth/` — C15Bridge (WASM synth), Arpeggiator, param-map (126 params)
Each design has its own HTML + CSS + app.js. The `designs.html` homepage links to all three with live iframe previews.
### Common features across all designs:
- **126-output MLP** with `[32, 48, 64]` hidden layers
- **Visual mode**: first 20 outputs → flow field particle system
- **Synth mode**: all 126 outputs → SynthVisualizer (grouped bar chart) + C15 WASM engine
- **`?tame=0.7`** URL parameter for safe-range constraining of synth params
- **RL as default** learning mode with keyboard shortcuts (1=negative, 2=positive)
- **Follow mode** for trackpad-friendly exploration
- **localStorage persistence** (random on first boot, restores on refresh)
- **Presets** padded from 20 to 126 outputs with 0.5 defaults
## Answered Questions
- **RL mode is now the default** across all designs — it's the purer expression of the NISPS thesis
- **Network architecture scaled** from `[10, 10, 14]` (20 outputs) to `[32, 48, 64]` (126 outputs)
- **Synth mode gets its own visualization** — parameter landscape with 126 grouped bars, not the particle system
- **Snapshot teaching + fine-grained sliders coexist** — presets for quick setup, expandable raw params for power users
## Iteration History
1. **Initial build** (2026-03-21): Three designs from PRD, all functional
2. **Round 1**: Added back buttons, follow mode, merged joystick+minimap (A), merged joystick+mapping (B), fixed RL functions (C)
3. **Round 2**: Restored localStorage, added keyboard hints, fixed slider responsiveness (B), fixed Visual pill toggle (B), horizontal heatmap bars (A)
4. **Round 3**: Upgraded to 126 outputs + `[32, 48, 64]` MLP, added SynthVisualizer to all designs, added randomize buttons, `?tame` URL param, back button SVGs
5. **Round 4**: Homepage with live previews, synth quick-play button (A), interactive synth bars (A), heatmap hidden in synth mode (A), tame param to B+C