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>
This commit is contained in:
Me Here 2026-05-25 09:05:34 -05:00
parent 0142039b0e
commit 1f957b7630

View file

@ -7,21 +7,28 @@ pattern. Layering lanes produces polymeter and true ratio polyrhythm.
**Live:** https://metronome.varasys.io
It's a single page (`index.html`) plus a vendored QR library — no build step,
no framework. State (presets, set lists, practice log, theme) lives in
`localStorage`.
It's a single, selfcontained `index.html`**zero dependencies**: no framework,
no build step, no bundled or CDN libraries, and nothing fetched at runtime. State
(set lists, the practice log, theme and UI preferences) lives in `localStorage`.
Because nothing loads from the network, you can save the page (`Ctrl`/`⌘`+`S`) and
open it straight from disk to run fully offline. One catch from a local `file://`:
the browser may not persist `localStorage` between sessions, so use **Export all**
(setlist **⋯** menu) to back up your work.
## Features
- **Meter lanes** — grouping (odd meters), subdivision, GM drum voice, perbeat
- **Meter lanes** — grouping (odd meters), subdivision, a synthesized drum/percussion voice, perbeat
on/off pattern (rests), mute, live measure counter.
- **Polyrhythm** — a perlane *poly* toggle fits a lane's beats evenly into lane 1's
bar (e.g. 5over4, 3over2).
- **Practice** — gap/mute trainer (play N / mute M bars) and a tempo ramp with a
start BPM and signed step.
- **Set lists** — named, ordered lists of saved setups; ▶ loads + starts an item,
**N** advances; each play is logged for crossday comparison.
- **Sharing** — copy a link (with QR) to your current settings or a whole set list.
- **Set lists** — named, ordered lists of saved setups; click an item to load it
(it switches live if you're already playing), **N** loads the next; each play is
logged for crossday comparison.
- **Sharing** — copy a link to your current settings or a whole set list (with an
optional QR generated by an external service).
- **Theming** — System / Light / Dark.
## The share language
@ -99,21 +106,24 @@ In the setlist panel's **⋯** menu:
- **QR ↗** opens a thirdparty QR service (api.qrserver.com) with the link in its
URL so you can scan it on a phone. A banner warns you it's external — confirm the
QR decodes to the shown link before trusting it. (No QR is generated locally.)
- **Export all / Import file** back up presets + set lists + logs as a JSON file.
- **Export all / Import file** back up your set lists and practice log as a JSON
file (a legacy `presets` field is included for backward compatibility).
## Keyboard shortcuts
| Key | Action |
|-----|--------|
| `Space` | play / stop (except while typing in a text field) |
| `Space` | play / stop (works everywhere except while typing in a text field) |
| `T` | tap tempo |
| `↑` / `↓` | tempo ±1 (`Shift` = ±10) |
| `A` | add meter lane |
| `1``9` | mute lane N |
| `R` | toggle the setlist panel |
| `N` | next setlist item |
| `N` | load next setlist item |
| `Alt`+`↑` / `Alt`+`↓` | reorder the selected setlist item |
| `1``9` | enable / silence lane 19 |
| `?` | shortcuts help |
| `Esc` | close dialog / panel |
| `Esc` | close the help / share dialog |
(Arrow keys are left alone while a slider or dropdown is focused, so they still adjust it.)
## Versioning
@ -122,8 +132,9 @@ In the setlist panel's **⋯** menu:
- **Formal** — a clean commit tagged `v<VERSION>``X.Y.Z`.
- **Dev** — anything else → `X.Y.Z-dev.<utc-timestamp>.<short-sha>[.dirty]`.
Cut a release with `./release.sh [X.Y.Z]` (bumps `VERSION` + tags `v<VERSION>`),
then push the tag and deploy.
Cut a release with `./release.sh [X.Y.Z]` — the optional arg bumps & commits
`VERSION`; it then tags the current commit `v<VERSION>` (requires a clean tree).
Push the tag, then deploy.
## Deploy