- Concepts is now the landing (/): index.html is the form-factor gallery with the
LIVE widget embedded in every box (editor/teacher/stage/micro/showcase/initial),
on the shared header/footer. concepts.html retired; every "Concepts" link → /.
- New shared chrome partials src/header.html, src/footer.html, src/chrome.js
(assembled by build.sh) + .site-foot / details.spec styles in base.css. Applied
to the landing + showcase this pass.
- Showcase redesign per spec: the pendulum bar IS the display — each lane's
subdivisions/accents ride along the rod as moving RGB light (all meters combined);
transparent outside the body (no black window); a printed tempo scale on the
vertical axis with a draggable weight to set tempo; start is an external button
(the real unit starts when lifted from its holder).
Next pass: roll the shared header/footer onto the remaining pages (incl. the editor
header-above-toolbar), merge Open=Info into one page per form factor with the
expandable Info & BOM, and add teacher-style dimensioned views to Stage/Micro/Showcase.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sync: the visual playhead now advances on a latency-compensated clock
(currentTime − outputLatency||baseLatency) so the on-screen pulse lands when the
click is HEARD, not when it's queued — previously the visual could lead the audio
by the output buffer / Bluetooth latency (up to ~a subdivision). Applied to
editor, player, teacher, and the new pages; also bound the visual queue (vq trim).
No data races: single-threaded; only the rAF draw touches vqPtr/currentStep, and
each vq entry carries the exact scheduled time of its sound.
stage.html — foot-pedal stompbox: two heavy footswitches (Tap=tempo / hold=start-
stop, Next=item / hold=prev), 1/4" expression-pedal input → tempo sweep, big
floor-readable RGB beat light + angled TFT, analog instrument pass-through.
showcase.html — pyramid display piece: an RGB-light pendulum easing to each beat
plus per-lane segment rows showing subdivisions/accents/mutes (canvas).
Both: dual USB-C (data+power and power-thru) to daisy-chain off one source.
Wired into embed.js (stage, showcase variants), build.sh, deploy.sh, the
concepts gallery + landing cards, info-stage.html (~$52) + info-showcase.html
(~$39) with BOMs, and the README.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The full-feature desktop console (big TFT, arcade buttons, instrument pass-through)
is repositioned as the "Teacher" for studio desks and lessons:
- stage.html -> teacher.html, info-stage.html -> info-teacher.html (git mv)
- all links/paths, the embed variant (stage -> teacher), nav, cards, embed docs,
README, build.sh + deploy.sh updated; deploy cleans the stale live stage files
The "Stage" name is now free for a forthcoming foot-pedal stompbox (/stage.html).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MicroPython sim that runs on https://wokwi.com/pi-pico: KY-040 encoder stands in
for the thumb-roller (rotate=tempo, press=start/stop, hold+rotate=track), an
SSD1306 OLED for the display, and a piezo buzzer for the click. Files:
diagram.json, main.py, ssd1306.py + README with the (manual) setup steps.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Power: standardise the whole family on a single USB-C input — drop the Micro's
2×AA and the Stage's 9V DC pedal jack (+ buck/reverse-polarity). Bring a power
bank; nothing internal to wear out. BOMs updated (Micro ≈$35, Stage ≈$56) and
all copy/cards/READMEs follow.
Micro form: detach the two end caps from the body with a gap (set-back, darker
end faces) so the TRS/USB-C jacks read as being on the ENDS of the bar, not the
front panel.
Landing: add a Philosophy section — "program on the web, play on any device"
(author once → load the program string into whichever form factor fits) and
"USB-C power everywhere — no batteries" (future-proofing rationale).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reworks the Micro per the new brief: a long, narrow extruded-aluminium bar you
patch into your signal instead of a little box.
- Better display: amber 4-char 14-segment (Adafruit font) that shows BPM *and*
short track names, replacing the 3-digit 7-segment. Off-segments kept very dim
so the lit digits read clearly.
- Roller instead of knob: a recessed, clickable horizontal thumb-roller —
roll = tempo, press = start/stop, hold + roll = switch track.
- New form/I-O: 1/4" TRS in on one end; USB-C + 1/4" TRS out on the other;
USB-C or 2×AA power (battery gauge on the face). Click is summed into the
signal in the analog domain (+ a small monitor speaker).
info-micro, concepts and the landing card updated to match; BOM reworked
(analog path + 2 jacks + 2×AA + 14-seg) → ≈ $38.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The site now opens on a proper front door: a hero (logo + tagline + pitch),
an "Open the Editor →" CTA, and form-factor cards (Editor, Stage, Micro, Embed)
linking out to each page + info. The PE-1 editor app moves from index.html to
editor.html; every "Editor"/"Open" link, the embed.js editor variant, and the
editor's own brand-logo (now → /) are repointed. build.sh + deploy.sh build and
publish both index.html (landing) and editor.html (app).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rebrand the intro to the VARASYS PolyMeter site (PE-1 editor home + concepts +
hardware mockups + embeddable widget); add a Pages map, an Embedding section
with the drop-in snippet, the live program-string note, and refresh the Build
and Files sections for all pages + embed.js.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A faded one-line monospace bar under the app shows the current patch via
currentPatch(); it brightens on hover/focus. Press Enter or blur to apply it
(applyPatch) — paste a program string and it loads; the field renormalises to
the canonical string and flashes on apply, tints red on parse failure. A focus
guard keeps refreshUI from overwriting the field while you're typing in it.
Hidden in embed mode. Refreshed from the existing updateCtx() path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Each form factor now has an information page (purpose + live embedded widget),
with priced BOMs only on the buildable hardware (Stage ≈$59, Micro ≈$28):
- info-editor.html / info-initial.html — purpose only (web app / concept)
- info-stage.html — purpose + the priced BOM moved out of stage.html
- info-micro.html — purpose + a new ~$28 practice-unit BOM
stage.html drops the BOM panel (+ its .bom CSS) and gains a "Spec & BOM" link;
the shared .bom/.sub table CSS lives in src/base.css. "Info" added to every
page nav and to the concept cards. Wired into build.sh + deploy.sh.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Every form factor supports ?embed=1: a head flag (set on <html>, no flash)
strips the site chrome (base.css [data-embed]) + page-specific panels, leaving
just the widget, and posts its height so the host can auto-size it.
- Config/settings string preloads via the existing #p=/#sl= hash. Added that
hash handling to micro.html (it previously only loaded built-in tracks).
- New embed.js loader: <div data-varasys-metronome="micro" data-patch="…"> + one
<script> → an auto-sizing iframe to <page>?embed=1#p=…. New embed.html documents
it and dogfoods a live embedded widget.
- "Embed" nav link added across pages; build.sh/deploy.sh build embed.html and
serve embed.js.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Shared site header in src/base.css (.site-head/.site-nav/.brand-logo + theme-
aware logo + .tbtn). Applied to player/stage/micro (replacing their text
topbars) so the VARASYS logo + tagline + Editor/Concepts nav is on every page.
- Rebrand the editor: "Stackable Metronome" → "PE-1 — PolyMeter Editor" (title +
h1), with a Concepts link in its header.
- New concepts.html — the PolyMeter Concepts library: cards for the editor and
each form factor (PM-1 Initial/Stage, PM-µ Micro) + a "more coming" card.
- build.sh + deploy.sh build/deploy concepts.html; deploy.sh now loops over pages.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the shiny brushed-aluminium look with a bead-blasted matte-black
anodised finish on both the stage and micro mockups:
- flat dark graphite case + a fine bead-blast micro-texture, and the specular
top highlight removed, so the case doesn't reflect stage lights;
- light laser-etched legend colour (--silk) and the light VARASYS logo variant
on the dark case; lighter metallic rims on the top-edge connector openings so
they read on black;
- stage BOM enclosure + comments updated to "die-cast aluminium, bead-blasted,
matte-black Type II anodise, laser-etched legends".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Rename player-asbuilt.html → stage.html (the pedalboard build). Update
build.sh + deploy.sh (deploy now also removes the old player-asbuilt.html
from the web root) and the cross-links in player.html / stage.html.
- New /micro.html — a stripped-down home-practice metronome on the same RP2040
firmware. Hardware is just: ONE depressable scroll/rotary encoder, a red
7-segment LED display, a speaker, and USB-C for power. The encoder does
everything: spin = tempo, press = start/stop, hold + spin = switch track
(the LED shows the track number, with BPM / TRACK / ▶ indicators). Tracks =
the editor's seed grooves flattened (23). Shares src/engine.js, setlists.js,
base.css; synth-only; steady practice loop (ramps/bars ignored).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Removed the PCB back view (BOM stays in the right column).
- Front and top views now share a left dimension gutter, so they're the same
width and aligned, and carry inch dimensions: front 4.7 × 5.5 in (120 × 140 mm),
top-edge thickness ≈ 1.8 in (45 mm), width 4.7 in below.
- Reworked the TFT to use the empty space: tempo with the item name beside it,
bar/beat at the bottom, and — filling the middle — ALL meter lanes drawn as
rows of step pads (subdivisions, accent/normal/ghost/mute, amber beat ticks,
per-lane playhead). Replaces the single beat-dots row.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- New back view in a right-hand column above the BOM: a green PCB schematic
with the mounted parts placed roughly as on the front — top-edge jacks,
ST7789 TFT, RP2040, 9V→5V buck, the PLAY/PREV/ENC/TAP/NEXT footprints, the
analog-audio block (PCM5102 · NE5532 · DRV134 · PAM8302), speaker, and corner
mounting holes.
- Dimensions in inches: back view labelled 4.7 in × 5.5 in (120 × 140 mm); the
top-edge view's thickness now reads ≈ 1.8 in (45 mm).
- Layout: front view (+ top-edge view, loader) on the left; back view + BOM on
the right.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Connectors: all jacks move to a separate "top edge" view above the device
(a brushed-metal edge strip with Trig In / Inst In / Out TRS / 9V DC / USB-C
and a ↕ ≈ 45 mm total-thickness dimension), since they're top-mounted for
pedalboard cabling. Removed them from the faceplate.
- Removed the fake corner screws/rivets.
- Swapped PLAY and the tempo roller: a big PLAY now sits up top (centred); the
roller sits in the button row with TAP, between PREV (far left) and NEXT (far
right).
- PLAY is static hardware now — it no longer changes colour/icon while playing
(the screen shows transport state). An illuminated/RGB arcade button could
reflect it; noted in the comment.
- Use the real VARASYS logo (logo-light, inlined at build) on the metal
faceplate instead of the text wordmark.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Case: reskin the enclosure as a brushed-aluminium / stainless faceplate
(metal sheen + brushed grain, chrome corner screws, dark engraved legends)
instead of 3D-printed matte. The on-faceplate captions switch to the dark
legend colour for contrast; I/O-strip labels stay light (they're on the dark
recessed bay). BOM enclosure → die-cast aluminium (Hammond 1590-style) /
folded stainless.
- Power: add a standard 9 V DC pedal jack (2.1 mm centre-negative) so it drops
straight onto a pedalboard, alongside USB-C (which still powers it on a desk
and carries config). BOM adds the jack + 9 V→5 V buck + reverse-polarity
protection. Total ≈ $59.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Tempo control: replace the protruding knob with a recessed side-mount
thumb-roller — a detented encoder (EC11/PEC12) with a ribbed wheel exposed
only at the edge through a slot, like a mouse scroll wheel, so there's
nothing to snap off. Scroll/drag tempo interaction is unchanged; the ribs
scroll for roll feedback (--rib) instead of a knob pointer.
- Power: no battery — the device is USB-C bus-powered from the same port that
carries config. Dropped the LiPo + TP4056 charger + 5 V boost from the BOM
(total ≈ $49) and marked USB-C as 5 V in + config.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 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>
- 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>
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>
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>