Commit graph

28 commits

Author SHA1 Message Date
Me Here
8171b37e72 Split demo seed into Styles + Practice; add shuffle/samba/nañigo
Two seed set lists instead of one mixed "Demos":
- 🥁 Styles — grooves/feels: four-on-the-floor, swing ride, Purdie
  half-time shuffle (triplet grid, backbeat on 3, snare ghosts), Samba
  (2/4, surdo on 2), Nañigo (6/8 bembé bell), 6/8, 7/8, 5/4.
- 🎯 Practice — polyrhythms, triplet hats, accent demo, tempo builder,
  gap trainer.

Seed is now versioned + additive: a bumped SEED_VERSION adds any seed
list whose title isn't already present, without clobbering or re-adding
the user's lists.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 11:51:45 -05:00
Me Here
766d5d40ae Per-step accent/normal/mute dynamics + swing
Pads are now 3-state instead of on/off: click cycles accent → normal →
mute. Default keeps the first step of each beat accented (the rest
normal), so existing grooves are unchanged in feel; legacy on/off masks
migrate (on-downbeats → accent, on-subs → normal).
- Audio gain is driven per step by level (accent 1.0 / normal 0.6);
  the old auto group-start accent is replaced by explicit per-step level.
- Swing: "swing 8th / swing 16th" subdivision options apply a triplet
  (2:1) long–short feel to even subdivisions (per-lane).
- Share language: pattern uses X (accent) / x (normal) / . (mute), and
  the sub token takes a trailing s for swing (e.g. ride:4/2s). The
  default-accent pattern is omitted; legacy x/. still parse.
- Demos: "Swing ride" and an accents example.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 11:13:53 -05:00
Me Here
7a6aa1d5ba Live-performance set switching, bar-length segments, favicon
Cue/commit model for moving through a set without audible gaps:
- Arrows/Home/End/PgUp/PgDn move an amber cue cursor across set lists.
  Enter commits with a SMOOTH cutover at the next bar; Shift+Enter a
  RUDE cutover at the next beat. N/P are rude quick-steps; Esc cancels.
- One gap-free cutover (armSwitch → scheduler horizon-cap →
  performCutover) replaces the old stop()/start() switch — the audio
  clock stays continuous across every transition (manual or auto).
- Per-item bar length (b<n> patch token + Bars input) with a bar
  countdown; Continue auto-advances at the boundary (cross-list aware).
  Each segment owns its tempo/ramp and resets at the cut.
- Decouple loaded vs viewed list (loadedSL) so the playing item can
  live in a list you're not currently viewing.

Set-list panel: editable name combobox (rename in place; the ▾ menu
lists the set lists with "+ New" last), auto-growing description,
add-item row moved below the list, trimmed hint.

Add an inline SVG favicon (brand-cyan metronome on navy).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 10:31:36 -05:00
Me Here
61c933e44f Header: VARASYS tagline lockup left of title; Save tooltip
- 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>
2026-05-25 09:05:34 -05:00
Me Here
1f957b7630 Update README: fix stale claims found in code review
- Drop the false "vendored QR library" line; state it's a single
  self-contained, zero-dependency file and document offline use.
- Fix keyboard shortcuts to match the in-app help: remove the
  non-existent R toggle, add Alt+↑/↓ (reorder), 1–9 toggles a lane.
- "GM drum voice" → synthesized; set-list items load on click (no ▶
  auto-start); QR is an external service; clarify release.sh.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 09:05:34 -05:00
Me Here
0142039b0e Add VARASYS logo to header
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>
2026-05-25 08:43:21 -05:00
Me Here
87f323b782 Add GNU AGPL v3 license
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>
2026-05-25 08:33:40 -05:00
Me Here
c2a88e5014 Reclaim Space for play/stop; narrow the keyboard focus guard
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>
2026-05-25 08:08:37 -05:00
Me Here
9cb7c2c193 Per-step pad grid (beats × subdivision); drop confusing Sig dropdown; help: repo link + offline note
- 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>
2026-05-25 08:01:17 -05:00
Me Here
61b5dfb6de Countdown display value inherits the large display font (was stuck at 13px via .tval)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 07:49:51 -05:00
Me Here
17492fdfb0 Single Save button by Tap (disabled when nothing loaded); per-entry + Clear-all history delete; bigger display text
- 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>
2026-05-25 07:45:26 -05:00
Me Here
1be6920827 Bigger display + legend text; switch play/stop from Space to P (Space conflicted with focused controls)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 07:39:21 -05:00
Me Here
333477afdb Timers: add enable checkbox; collapse settings + hide display readouts when off
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 19:08:28 -05:00
Me Here
a011a89100 Collapse a feature's parameters until it's enabled (hide fbody when off)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:52:36 -05:00
Me Here
ba752745b7 Per-lane enable (replacing mute), feature boxes, set-list continue mode, external QR
- 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>
2026-05-24 18:47:16 -05:00
Me Here
285d78b499 Timers: show stopwatch + countdown in the BPM display; countdown blank-default, hⓂ️s input
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:35:58 -05:00
Me Here
72147f5b32 Countdown: keep counting into negative (overtime) instead of stopping at 0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:12:16 -05:00
Me Here
a447df39e9 UX: always-show set list (remove hide toggle), add practice timers, '+' add button
- 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>
2026-05-24 18:10:40 -05:00
Me Here
7010ba7cb8 Move live status into the display under the BPM (drop bottom status line)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:01:55 -05:00
Me Here
3f04383e2b UX: select-to-load set-list items; now-playing info block; drop preset dropdown
- 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>
2026-05-24 17:55:58 -05:00
Me Here
7207ffe1c7 Add 'Reset everything' to the set-list menu (confirm + wipe localStorage)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:38:02 -05:00
Me Here
5320da4325 Add QR share dialog (vendored qrcode.js) + README documenting the language
- 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>
2026-05-24 17:34:26 -05:00
Me Here
6910f31a2f Add shareable meter language + share menu + demo set list
- 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>
2026-05-24 17:27:26 -05:00
Me Here
c0b6628488 Layout: dock the set-list panel beside the metronome (push, not overlay)
- 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>
2026-05-24 17:17:44 -05:00
Me Here
c087f11637 Theme: add System (OS-follow) option; fix light-theme playhead ring (was white-on-white)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:10:54 -05:00
Me Here
a7770eaf47 Add versioning: VERSION file, dev/formal stamping, release.sh
- 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>
2026-05-24 16:59:31 -05:00
Me Here
38d860b4dd Refine mockup: set lists, per-beat patterns, theming, shortcuts
- 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>
2026-05-24 16:35:17 -05:00
Me Here
49c8584c8c Add stackable metronome mockup and Caddy deploy script
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>
2026-05-24 14:25:42 -05:00