Rename "Stage" -> "Teacher" (studio/lesson console); free the Stage name

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>
This commit is contained in:
Me Here 2026-05-28 08:16:15 -05:00
parent 1186e61588
commit ce6166a721
12 changed files with 56 additions and 51 deletions

View file

@ -24,10 +24,10 @@ State (set lists, the practice log, theme and UI preferences) lives in `localSto
| `/editor.html` | **PE1 — PolyMeter Editor** (the main app) |
| `/concepts.html` | **PolyMeter Concepts** — the formfactor gallery (cards → live page + info) |
| `/player.html` | **PM1 Initial** — idealized concept device (full display + setlist nav, theme, fullscreen "stage" view) |
| `/stage.html` | **PM1 Stage** — pedalboard build (colour TFT, arcade buttons, 1/4″ instrument passthrough with analog click injection) |
| `/teacher.html` | **PM1 Teacher** — studio / lesson console (colour TFT, arcade buttons, 1/4″ instrument passthrough with analog click injection) |
| `/micro.html` | **PMµ Micro** — inline practice bar (instrument in / out passthrough, clickable thumbroller, 14segment display) |
| `/info-editor.html`, `/info-initial.html` | purpose pages (web app / concept — no BOM) |
| `/info-stage.html`, `/info-micro.html` | purpose **+ priced BOM** (buildable hardware only) |
| `/info-teacher.html`, `/info-micro.html` | purpose **+ priced BOM** (buildable hardware only) |
| `/embed.html` · `/embed.js` | embed docs and the dropin loader |
Each page carries the same VARASYS header (logo + tagline, nav, theme toggle). The editor
@ -151,14 +151,14 @@ container and the loader script — it builds an `<iframe>` to the chromestri
<script src="https://metronome.varasys.io/embed.js"></script>
```
- `data-varasys-metronome` — variant: `editor` · `initial` · `stage` · `micro`.
- `data-varasys-metronome` — variant: `editor` · `initial` · `teacher` · `micro`.
- `data-patch` — a [patch string](#patch-grammar) (maps to `#p=`); or `data-setlist`
for a setlist code (maps to `#sl=`).
- `data-width` / `data-height` — optional initial size (default `100%` × `300px`;
height then tracks the widget, which posts `{type:'varasys-h', h}` to the parent).
Prefer your own iframe? `…/<variant>.html?embed=1#p=<patch>` works directly. Our own
[`info-*.html`](info-stage.html) pages dogfood this exact mechanism. See `/embed.html`.
[`info-*.html`](info-teacher.html) pages dogfood this exact mechanism. See `/embed.html`.
## Keyboard shortcuts
@ -233,7 +233,7 @@ Push the tag, then deploy.
| `index.html` | the **landing page** (site front door) |
| `editor.html` | the **PE1 editor** app (source, with `@BUILD:*` markers) |
| `concepts.html` | the formfactor gallery |
| `player.html` · `stage.html` · `micro.html` | the **PM1 Initial / Stage** and **PMµ Micro** device mockups |
| `player.html` · `teacher.html` · `micro.html` | the **PM1 Initial / Teacher** and **PMµ Micro** device mockups |
| `info-*.html` | performfactor info pages (purpose + priced BOM for buildable hardware) |
| `embed.html` · `embed.js` | embed docs and the dropin widget loader |
| `src/` | shared partials inlined into every page: `engine.js`, `setlists.js`, `base.css` |

View file

@ -31,8 +31,8 @@ def build(name):
out.write_text(src)
return out.stat().st_size
for name in ("index.html","editor.html","player.html","stage.html","micro.html","concepts.html","embed.html",
"info-editor.html","info-initial.html","info-stage.html","info-micro.html"):
for name in ("index.html","editor.html","player.html","teacher.html","micro.html","concepts.html","embed.html",
"info-editor.html","info-initial.html","info-teacher.html","info-micro.html"):
print("built %s (%dKB)" % (name, build(name) // 1024))
pathlib.Path("dist/embed.js").write_text(pathlib.Path("embed.js").read_text()) # loader, served as-is
print("copied embed.js")

View file

@ -78,16 +78,16 @@
<span class="chip">Concept</span>
<h3>PM1 — Initial</h3>
<p>The original idealized device mock — full multilane display and setlist navigation. A northstar
concept (more than a single small unit can really show); the buildable take is Stage.</p>
concept (more than a single small unit can really show); the buildable take is Teacher.</p>
<div class="links"><a href="/player.html">Open ↗</a><a href="/info-initial.html">Info ⓘ</a></div>
</div>
<div class="card">
<span class="chip hw">Hardware</span>
<h3>PM1 — Stage</h3>
<p>Pedalboard build: 2.0″ colour TFT, arcade buttons, thumbroller, 1/4″ instrument passthrough with
analog click injection + balancedTRS out, USBC powered. Beadblasted matteblack anodised.</p>
<div class="links"><a href="/stage.html">Open ↗</a><a href="/info-stage.html">Info &amp; BOM ⓘ</a></div>
<h3>PM1 — Teacher</h3>
<p>Fullfeature desktop console for studio &amp; lessons: 2.0″ colour TFT showing every lane, arcade buttons,
thumbroller, 1/4″ instrument passthrough with analog click injection + balancedTRS out, USBC powered.</p>
<div class="links"><a href="/teacher.html">Open ↗</a><a href="/info-teacher.html">Info &amp; BOM ⓘ</a></div>
</div>
<div class="card">

View file

@ -40,13 +40,14 @@ fi
# stamp the version into the built copy only (source stays clean)
echo "deployed v$BUILD -> $DEST_DIR"
for f in index.html editor.html player.html stage.html micro.html concepts.html embed.html \
info-editor.html info-initial.html info-stage.html info-micro.html; do
for f in index.html editor.html player.html teacher.html micro.html concepts.html embed.html \
info-editor.html info-initial.html info-teacher.html info-micro.html; do
sed "s|const APP_VERSION = \"[^\"]*\";|const APP_VERSION = \"$BUILD\";|" "$DIST_DIR/$f" > "$DEST_DIR/$f"
echo " $f ($(stat -c '%s' "$DEST_DIR/$f") bytes)"
done
cp "$DIST_DIR/embed.js" "$DEST_DIR/embed.js"; echo " embed.js ($(stat -c '%s' "$DEST_DIR/embed.js") bytes)"
rm -f "$DEST_DIR/player-asbuilt.html" # renamed to stage.html
rm -f "$DEST_DIR/player-asbuilt.html" # renamed to teacher.html
rm -f "$DEST_DIR/stage.html" "$DEST_DIR/info-stage.html" # "Stage" renamed to "Teacher" (new foot-pedal Stage is forthcoming)
# If real audio samples are added later (see the plan's GM-sample note),
# sync that directory too.

View file

@ -79,8 +79,8 @@
<tbody>
<tr><td class="k">editor</td><td>PE1 PolyMeter Editor (full app)</td></tr>
<tr><td class="k">initial</td><td>PM1 Initial (idealized device)</td></tr>
<tr><td class="k">stage</td><td>PM1 Stage (pedalboard device)</td></tr>
<tr><td class="k">micro</td><td>PMµ Micro (practice unit)</td></tr>
<tr><td class="k">teacher</td><td>PM1 Teacher (studio / lesson console)</td></tr>
<tr><td class="k">micro</td><td>PMµ Micro (inline practice bar)</td></tr>
</tbody>
</table>

View file

@ -5,7 +5,7 @@
* <script src="https://metronome.varasys.io/embed.js"></script>
*
* Attributes:
* data-varasys-metronome editor | initial | stage | micro (which form factor)
* data-varasys-metronome editor | initial | teacher | micro (which form factor)
* data-patch a PolyMeter program/settings string (preloads it)
* data-setlist a base64url set-list code (alternative to data-patch)
* data-width / data-height iframe size (default 100% × 300; height auto-grows)
@ -14,7 +14,7 @@
* own ?embed=1 mode strips the site chrome) and auto-resizes to the widget's content.
*/
(function () {
var PAGES = { editor: "editor.html", initial: "player.html", stage: "stage.html", micro: "micro.html" };
var PAGES = { editor: "editor.html", initial: "player.html", teacher: "teacher.html", micro: "micro.html" };
var me = document.currentScript;
var ORIGIN = me ? me.src.replace(/\/embed\.js(\?.*)?$/, "") : location.origin;

View file

@ -109,10 +109,10 @@
<div class="card">
<span class="chip hw">Hardware</span>
<h3>PM1 — Stage</h3>
<p>Pedalboard build: 2.0″ colour TFT, arcade buttons, thumbroller, 1/4″ instrument passthrough with
analog click injection + balancedTRS out. Beadblasted matteblack anodised.</p>
<div class="links"><a href="/stage.html">Open ↗</a><a href="/info-stage.html">Info &amp; BOM ⓘ</a></div>
<h3>PM1 — Teacher</h3>
<p>Fullfeature desktop console for studio &amp; lessons: 2.0″ colour TFT showing every lane, arcade buttons,
thumbroller, 1/4″ instrument passthrough with analog click injection + balancedTRS out. USBC powered.</p>
<div class="links"><a href="/teacher.html">Open ↗</a><a href="/info-teacher.html">Info &amp; BOM ⓘ</a></div>
</div>
<div class="card">
@ -141,7 +141,7 @@
<p>The website is the workbench. Design your grooves in the <a href="/editor.html">PE1 editor</a>
stack meters, set perstep accents, build set lists — and every pattern saves to a compact
<b>program string</b> (a whole set list to a single code). That same string loads into whichever
form factor fits the moment: the <a href="/stage.html">Stage</a> on a pedalboard, the
form factor fits the moment: the <a href="/teacher.html">Teacher</a> on a studio desk, the
<a href="/micro.html">Micro</a> inline at the practice desk, or an <a href="/embed.html">embedded
widget</a> in someone else's app. One engine, one language — you author once and run it anywhere,
choosing the device by the use scenario rather than relearning a new box each time.</p>

View file

@ -70,12 +70,12 @@
<li><b>Drum &amp; click voices</b> — synth and sampled sounds, swing, accent levels.</li>
<li><b>Trainer &amp; ramp</b> — barcount automation, tempo ramps, and a countdown.</li>
<li><b>Program string</b> — the live patch is shown, editable, and copy/pasteable; setlists encode to a
shareable code. This is the same string the <a href="/info-stage.html">Stage</a> and
shareable code. This is the same string the <a href="/info-teacher.html">Teacher</a> and
<a href="/info-micro.html">Micro</a> units load.</li>
</ul>
<p class="sub" style="margin-top:18px">A web app — nothing to build, nothing to buy. (Bills of materials apply
only to the buildable hardware: <a href="/info-stage.html">Stage</a> and <a href="/info-micro.html">Micro</a>.)</p>
only to the buildable hardware: <a href="/info-teacher.html">Teacher</a> and <a href="/info-micro.html">Micro</a>.)</p>
</main>
<div class="site-foot">VARASYS · Simplifying Complexity — <span id="appVersion">v0.0.1-dev</span></div>

View file

@ -52,7 +52,7 @@
<h1>PM1 — Initial</h1>
<div class="tags"><span class="tag concept">Concept</span><span class="tag">Idealized device</span><span class="tag">Not buildable as drawn</span></div>
<p class="lead">The idealized PM1: the player as a clean, screenfirst device with no concession to
mechanical parts yet. It's the look we design <i>toward</i> — the <a href="/info-stage.html">Stage</a>
mechanical parts yet. It's the look we design <i>toward</i> — the <a href="/info-teacher.html">Stage</a>
build is what that idea becomes once it's made from real components.</p>
<div class="embed-wrap">
@ -69,7 +69,7 @@
<div class="note">
<p>This is a concept, so there's <b>no bill of materials</b> — there's nothing to source for a render. The
buildable realization of this idea is the <a href="/info-stage.html">PM1 Stage</a>, which has a full priced
buildable realization of this idea is the <a href="/info-teacher.html">PM1 Stage</a>, which has a full priced
BOM. For the smallest practical unit, see <a href="/info-micro.html">PMµ Micro</a>.</p>
</div>
</main>

View file

@ -92,7 +92,7 @@
<tr class="total"><td>Total (oneoff)</td><td class="q"></td><td class="c">≈ $35</td></tr>
</tbody>
</table>
<p class="sub" style="margin-top:12px">Like the Stage, the click is summed in the <b>analog domain</b>: a highimpedance
<p class="sub" style="margin-top:12px">Like the Teacher, the click is summed in the <b>analog domain</b>: a highimpedance
buffer of the 1/4″ instrument input is mixed with the DAC's click and sent to the 1/4″ output and the monitor
amp — your instrument is never redigitised (no added latency).</p>
</main>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PM1 Stage — info &amp; BOM — VARASYS</title>
<title>PM1 Teacher — info &amp; BOM — VARASYS</title>
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,@BUILD:favicon@">
<script>
(function(){ try{ var p = localStorage.getItem("metronome.theme");
@ -36,38 +36,39 @@
<img class="brand-logo brand-dark" src="data:image/png;base64,@BUILD:logo-dark@" alt="VARASYS — Simplifying Complexity" />
<img class="brand-logo brand-light" src="data:image/png;base64,@BUILD:logo-light@" alt="VARASYS — Simplifying Complexity" />
</a>
<span class="page-name"><b>PM1</b> · Stage — info</span>
<span class="page-name"><b>PM1</b> · Teacher — info</span>
</div>
<nav class="site-nav">
<a href="/editor.html">Editor</a>
<a href="/concepts.html">Concepts</a>
<a href="/stage.html">Open ↗</a>
<a href="/teacher.html">Open ↗</a>
<button id="themeBtn" class="tbtn" title="toggle light / dark theme"></button>
</nav>
</header>
<main>
<h1>PM1 — Stage</h1>
<div class="tags"><span class="tag hw">Hardware</span><span class="tag">Pedalboard</span><span class="tag">~$59 oneoff</span></div>
<p class="lead">A gigready polymeter box for the pedalboard: a colour readout of every lane, fast setlist
navigation, and your instrument running straight through with the click mixed in — so it sits in your
signal chain and feeds the PA, all on a nonreflective matteblack case.</p>
<h1>PM1 — Teacher</h1>
<div class="tags"><span class="tag hw">Hardware</span><span class="tag">Studio / lesson console</span><span class="tag">~$59 oneoff</span></div>
<p class="lead">The fullfeature desktop console: a colour readout of every lane, fast setlist navigation, and
your instrument running straight through with the click mixed in — the handson unit for a studio desk or a
teaching room, on a nonreflective matteblack case. (A handsfree, footoperated <b>Stage</b> stompbox is
in the works for live use.)</p>
<div class="embed-wrap">
<div data-varasys-metronome="stage"
<div data-varasys-metronome="teacher"
data-patch="v1;t120;b16;kick:4=X.x.;snare:4=.X.X;hatClosed:4/4" data-height="520"></div>
</div>
<p class="cap">Live widget (embedded). <a href="/stage.html">Open the full Stage page ↗</a> · <a href="/embed.html">embed this</a></p>
<p class="cap">Live widget (embedded). <a href="/teacher.html">Open the full Teacher page ↗</a> · <a href="/embed.html">embed this</a></p>
<h2>Designed for</h2>
<p>The stage and the rehearsal room. Topmounted 1/4″ jacks keep cabling tidy on a board; you plug your
<p>The studio desk and the teaching room. Topmounted 1/4″ jacks keep cabling tidy; you plug your
instrument in, the metronome click is summed into the signal in the <b>analog domain</b> (no redigitising,
no added latency) and sent to a balanced 1/4″ TRS output for the desk, plus a small monitor speaker.
Powered over USBC — a wall adapter, or a power bank when there's no outlet on the board. The colour TFT
shows tempo, the item name, and all lane patterns; arcade buttons + a recessed thumbroller survive stage abuse.</p>
no added latency) and sent to a balanced 1/4″ TRS output for the desk or interface, plus a small monitor
speaker. Powered over USBC — a wall adapter, or a power bank. The colour TFT shows tempo, the item name,
and all lane patterns; arcade buttons + a recessed thumbroller make it quick to drive while you teach or track.</p>
<h2>Bill of materials</h2>
<p class="sub">Rough parts list — a pedalboardfriendly RP2040 build (USBC powered) with analog click injection.
<p class="sub">Rough parts list — a desk/studio RP2040 build (USBC powered) with analog click injection.
Ballpark oneoff prices (USD); cheaper at volume.</p>
<table class="bom">
<thead><tr><th>Part</th><th class="q">Qty</th><th class="c">~$</th></tr></thead>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>VARASYS PM1 — stage (pedalboard build)</title>
<title>VARASYS PM1 — Teacher (studio / lesson console)</title>
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,@BUILD:favicon@">
<script>
/* ?embed=1 → strip site chrome (base.css [data-embed]) + auto-size to the host */
@ -14,8 +14,11 @@
})();
</script>
<!--
"As-built" variant of the PM-1 player: the same firmware/engine, drawn with the
parts you'd actually solder for an RP2040 build —
PM-1 "Teacher" — the full-feature desktop console (formerly "Stage"): the same
firmware/engine, drawn with the parts you'd actually solder for an RP2040 build.
It's the hands-on unit for a studio desk or a lesson — a big screen showing every
lane, real buttons, and an instrument pass-through. (The foot-operated live unit
is the separate /stage.html stompbox.) —
• a 2.0″ 320×240 colour IPS TFT (ST7789, e.g. Pimoroni Pico Display 2.0):
the upgrade from the cramped 128×64 mono OLED — full colour, smooth type,
hi-DPI. It also draws all lane patterns (each lane's steps — accent /
@ -205,12 +208,12 @@
<img class="brand-logo brand-dark" src="data:image/png;base64,@BUILD:logo-dark@" alt="VARASYS — Simplifying Complexity" />
<img class="brand-logo brand-light" src="data:image/png;base64,@BUILD:logo-light@" alt="VARASYS — Simplifying Complexity" />
</a>
<span class="page-name"><b>PM1</b> · Stage (pedalboard build)</span>
<span class="page-name"><b>PM1</b> · Teacher (studio / lesson console)</span>
</div>
<nav class="site-nav">
<a href="/editor.html">Editor</a>
<a href="/concepts.html">Concepts</a>
<a href="/info-stage.html">Info</a>
<a href="/info-teacher.html">Info</a>
<a href="/embed.html">Embed</a>
<button id="themeBtn" class="tbtn" title="toggle light / dark theme"></button>
</nav>
@ -240,7 +243,7 @@
<div class="device">
<div class="brandrow">
<div class="silk"><img class="brand-logo" src="data:image/png;base64,@BUILD:logo-dark@" alt="VARASYS" /><span class="model">PM1 Polymeter Player</span></div>
<div class="silk"><img class="brand-logo" src="data:image/png;base64,@BUILD:logo-dark@" alt="VARASYS" /><span class="model">PM1 Teacher</span></div>
<div class="pwr"><span class="dot"></span>PWR</div>
</div>
@ -284,7 +287,7 @@
<div class="status" id="status"></div>
</div>
<p class="speclink"><a href="/info-stage.html">Spec &amp; full priced BOM ⓘ</a> — what the Stage is designed for, and every part to build one.</p>
<p class="speclink"><a href="/info-teacher.html">Spec &amp; full priced BOM ⓘ</a> — what the Teacher is designed for, and every part to build one.</p>
</div><!-- /col-left -->
</div><!-- /cols -->