Commit graph

7 commits

Author SHA1 Message Date
Me Here
984b71a07d As-built: drop orphaned WS2812 CSS comment after the matrix removal
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 07:56:17 -05:00
Me Here
43495777c9 As-built: side-by-side player + BOM; move the beat display onto the TFT
- Layout: wrap the device + loader in a left column and the BOM in a right
  column (flex row, wraps to stacked on narrow screens) so you can see the
  player and the parts list at once. Top bar widened to span both.
- Display: the colour TFT now draws the beat indicator itself — a centred row
  of beat dots (current beat bright, group-starts amber) with the current
  beat's subdivisions as pips below — so the separate 4×16 WS2812 matrix is
  gone. Subdivisions still come from the finest lane sharing lane 1's grid.
- BOM: dropped the WS2812 beat-bar line (−$6 → ≈ $55) — fewer parts, and one
  fewer thing to drive in firmware.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 07:55:17 -05:00
Me Here
3e70eadea7 As-built: add on-page bill of materials; confirm analog click-injection
- Add a costed BOM panel below the loader, grouped by subsystem (brain &
  display, beat bar, controls, audio—analog click injection, connectors &
  power, build) with quantities and ballpark prices (~$61 one-off).
- Reflect the confirmed analog mixing in the audio path / comment: PCM5102A
  click DAC → summing op-amp (NE5532/OPA2134) with a hi-Z instrument buffer →
  balanced line driver (DRV134) to the shared 1/4" TRS out, plus a PAM8302A
  monitor amp + speaker — the instrument is never re-digitised (no latency).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 07:42:38 -05:00
Me Here
4f76783af4 As-built: arcade buttons, use-driven control layout, rear I/O, compact case
Reworked the as-built panel around how it's actually used:

- Buttons: replaced the tactile/keycap ("rubber key") buttons with glossy
  arcade pushbuttons, colour-keyed — cyan PREV/NEXT, a big green/red PLAY,
  amber TAP.
- Layout for use: the rotary encoder sits BELOW the screen (so turning it
  never hides the readout) with the buttons spread edge-to-edge underneath —
  PREV far left, NEXT far right, a bigger central PLAY (+ TAP) — so you're
  far less likely to hit the wrong one mid-performance.
- Rear I/O: external trigger in (footswitch), a 1/4" instrument pass-through
  with the click injected, and a shared 1/4" balanced-TRS main out; plus the
  monitor speaker and USB-C, each a labelled jack with a tooltip.
- Size: shrank the case to hug its content (max-width 560→380, trimmed
  padding and inter-section margins) — the dead margin is gone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 07:34:40 -05:00
Me Here
b434520505 As-built: upgrade the mono OLED to a 320×240 colour IPS TFT (ST7789)
The 128×64 mono OLED was too pixelated, so step up to the realistic next
tier: a 2.0″ 320×240 colour IPS TFT (ST7789 — e.g. Pimoroni Pico Display 2.0),
~5× the resolution and full colour.

- Drop the 1-bit threshold + image-rendering:pixelated; render on a hi-DPI
  canvas (backing = 320×240 × devicePixelRatio) with smooth anti-aliased type.
- Richer colour layout: dim header (position + green ▶ PLAY / grey ■ STOP),
  a big cyan tempo with "BPM ♩ <grouping>", the centred item name (ellipsised),
  and a bottom strip with bar·beat + an amber bars countdown.

The screen stays a fixed dark UI (a TFT shows whatever firmware draws); the page
chrome still follows light/dark/system. Beat matrix, encoder, buttons unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 07:11:48 -05:00
Me Here
fcf58d9c1f As-built: stack the beat bar into a 4×16 matrix (beat + 3 subdivision rows)
Replace the single 16-px strip with a 4×16 WS2812 matrix (four 16-px strips,
still PIO-driven on the RP2040):

- bottom row = the beat (cyan downbeats / amber group-starts, current beat
  bright, the rest a dim grid) — separated from the rows above by a divider;
- the three rows above stack the CURRENT beat's subdivisions as they pass:
  a column climbs row-by-row with each subdivision and resets on the next beat,
  with faint "slots" showing the ladder it will climb.

Subdivisions are driven by the finest lane that shares lane 1's beat grid
(non-poly, same beatsPerBar, max stepsPerBeat) — so an 8th-note hat shows one
row, 16ths show three, straight quarters show none. Also fixed a stray
"#05measure" typo left in the old .npx border rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 07:06:28 -05:00
Me Here
df213272ae Add "as-built" player variant: mono 128×64 OLED + 16-px WS2812 beat bar
New /player-asbuilt.html showing the PM-1 with parts you'd actually solder
for an RP2040 build, alongside the idealized /player.html:

- 128×64 MONOCHROME OLED (SSD1306 class): rendered as a true 1-bit
  framebuffer — drawn, then thresholded to crisp on/off pixels and scaled
  with image-rendering:pixelated — so the cramped real layout is honest
  (position / big BPM / grouping / scrolling name / bar·beat).
- Fixed 16-px WS2812 ("NeoPixel") RGB beat bar on a strip PCB: lights the
  first beatsPerBar slots (cyan downbeats, amber group-starts, dim others),
  the rest dark — showing the fixed-count hardware honestly.
- EC11 rotary encoder you actually turn (wheel / vertical drag) for tempo,
  tactile buttons, MAX98357A-style speaker grille, USB-C, PWR LED, matte case.

Shares the same firmware via src/engine.js + src/setlists.js (same seed set
lists, same scheduler); only the panel rendering differs. The device is fixed
dark hardware; the page chrome follows light/dark/system. build.sh + deploy.sh
now assemble/serve all three pages; player.html links to it ("As-built ↗").

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 06:57:57 -05:00