- Move the VARASYS logo to the left of the title and switch to the
tagline-bottom lockup, with theme-aware dark/light variants swapped
via CSS (both inlined as data URIs).
- Right-justify the theme/help buttons; drop the shortcut legend to its
own line so the buttons no longer wrap on medium widths.
- Save button: wrap it so the tooltip shows while disabled, and make the
tooltip dynamic (why it's disabled vs. which item it overwrites).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Inline the compact cyan VARASYS banner (base64 data URI) in the header,
between the shortcut legend and the theme/help buttons, linked to
varasys.io. Inlined rather than shipped as a file so deploy.sh's
single-file publish still covers it; the self-contained banner reads the
same on light and dark themes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
LICENSE holds the verbatim AGPL-3.0 text. index.html carries the SPDX
header + notice; README gains a License section noting §13 is met by the
in-app source link (git.varasys.io/VARASYS/metronome).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The real conflict wasn't the key: shortcuts bailed whenever ANY form
control (slider/checkbox/menu/button) had focus, and those keep focus
after use — so P/T/A/N seemed dead most of the time.
- Guard now stands down only for text-entry fields (text/number/textarea/
contenteditable), so shortcuts work right after you touch a slider or
checkbox.
- Space always = play/stop (preventDefault so it won't scroll, toggle a
focused checkbox, or re-fire a focused button) — the DAW standard,
which also fixes the original Space/checkbox conflict.
- Arrow keys still defer to a focused range slider / select.
- Legend, help overlay, README updated back to Space.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Pad row now shows beatsPerBar × subdivision pads, each individually
toggleable (the subdivision control sets pad resolution). Subdivision
pads render smaller; downbeats labeled; group/beat gaps preserved.
- Mask (beatsOn) is now per-step; playhead tracks the current step.
recomputeLane remaps on grouping/subdivision change and migrates legacy
per-beat masks (saved data, short share patterns) by expanding across subs.
- Share language: =pattern is now per-step (len = beats × sub); short
per-beat patterns still accepted and expanded. README updated.
- Removed the Sig time-signature preset dropdown (confusing vs subdivision).
- Help dialog: link to git.varasys.io/VARASYS/metronome + note that it's a
single-page app you can save & run offline, but file:// won't auto-save
the set list (export a backup).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Move per-item 💾 out of set-list rows into one 💾 Save next to Tap; it
overwrites the loaded item and is disabled when no item is loaded.
- History list: red ✕ on hover deletes one session; Clear all wipes
history for the current item only.
- Bump dark-display text again (BPM 80px, timers 26px, status 19px);
widen the display column to fit.
- README: play key Space -> P.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Each meter lane has an 'enable' checkbox right after its number (default on,
green-dim row when off); replaces the right-side 'mute'. Renamed mute→enabled
throughout (scheduler, snapshot, share '!' flag, 1–9 keys, now-playing). Old
saved data still loads (back-compat).
- Features area redesigned into highlighting boxes (Gap trainer / Tempo ramp /
Timers); trainer & ramp boxes light up + un-dim when enabled.
- Set list 'Continue' mode: per-item countdown (saved in each item, 'cd' token),
and when a playing item's countdown hits 0 it auto-loads the next — so a list
with countdowns plays straight through.
- Removed the in-app QR (vendored qrcode.js); 'QR ↗' now opens api.qrserver.com
with the link, behind a banner warning it's a third party (verify it decodes).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Removed the set-list show/hide toggle and the R shortcut / Esc-close / close ✕.
The panel is always visible: sticky side column on desktop, stacked below the
metronome on mobile. Theme/help buttons stay right-justified.
- Added practice timers in the gap/ramp area: an Elapsed (count-up) timer and an
adjustable Countdown (minutes; 0 = off), each with a reset. Both advance only
while the metronome runs; countdown reaching 0 stops it (turns amber under 10s).
- '+ Add meter' button is now just '+'.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Set-list rows are now click-to-load (the transport is the only play/stop); the
per-item ▶/⏹ and ↑/↓ buttons are gone. Reorder via Alt+↑/↓ (tooltip + help).
Selected row is highlighted and reveals compact 💾 (save-back) / ✕ (remove).
- Replaced the main-screen preset dropdown with a 'Now loaded' info block showing
the item name, config summary, and the set list's title + description.
- Presets consolidated into set-list items (removed preset functions/UI). N loads
the next item; shortcuts help + demo description updated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Share menu now opens a dialog with a copyable link AND a QR code (scan to open
on a phone); generated locally by vendored qrcode-generator (MIT). deploy.sh
publishes qrcode.js alongside index.html.
- README documents the share language grammar, sounds, URL forms, shortcuts,
versioning and deploy.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Compact human-readable patch language encodes tempo, lanes (sound/grouping/
subdivision/pattern/poly/mute) and practice settings (trainer, ramp).
- Share menu (⋯) copies links: settings as #p=<patch> (readable) and a whole
set list as #sl=<base64url>. Opening such a link applies/imports it on load.
- Seeds a '✨ Demos' set list (once) with 10 examples authored in the language:
grooves, 5:4 / 3:2 / 3-lane polyrhythms, 7/8 6/8 5/4, triplets, ramp, trainer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- App is now a flex shell (#app): the set-list panel docks as a sticky side
column that pushes the metronome instead of floating over it.
- Collapses via the header 'Set Lists' toggle; falls back to an overlay drawer
below 820px. Defaults open on desktop, closed on mobile.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- VERSION holds the formal version (0.0.1), single source of truth.
- deploy.sh stamps the served HTML: "X.Y.Z" on a clean commit tagged v<VERSION>,
else "X.Y.Z-dev.<utc-ts>.<sha>[.dirty]".
- index.html shows the build version in the header badge (APP_VERSION).
- release.sh cuts a formal release (sets VERSION + tags v<VERSION>).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Tempo ramp gains a start BPM and signed (up/down) steps.
- Presets and set-list items now capture practice settings (trainer + ramp).
- Set-list items: per-item ▶/⏹ play, 💾 save-back, per-item history view.
- Log & backup moved into a ⋯ menu; "+ Add meter" moved below the lanes.
- Light/dark theming (OS-aware + toggle, persisted) and mobile/desktop responsive layout.
- Keyboard shortcuts (Space/T/↑↓/A/R/N/1-9/?) + help overlay; fixed dead Tap button.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
index.html: single-file browser mockup of the polymetric groove trainer —
stackable meter lanes, subdivisions, odd-meter grouping, per-beat patterns,
GM percussion voices, true ratio polyrhythm (poly toggle), presets, set
lists with a recordable practice log, and keyboard shortcuts.
deploy.sh: copies index.html into the Caddy web root that serves
https://metronome.varasys.io (no restart needed).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>