metronome/index.html
Me Here be00ebf097 Restructure (1/2): Concepts = landing with live embeds; shared chrome partials; Showcase redesign
- 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>
2026-05-28 09:09:51 -05:00

165 lines
9.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>VARASYS PolyMeter — Concepts (polymetric groove trainer &amp; metronome)</title>
<meta name="description" content="PolyMeter — a polymetric groove trainer and metronome. One engine, many form factors: a free web editor, hardware concepts, and an embeddable widget. Try each one live." />
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,@BUILD:favicon@">
<script>
(function(){ try{ var p = localStorage.getItem("metronome.theme");
if (p!=="light" && p!=="dark" && p!=="system") p = "system";
document.documentElement.dataset.theme = p==="system" ? (matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark") : p;
} catch(e){ document.documentElement.dataset.theme = "dark"; } })();
</script>
<style>
/*@BUILD:include:src/base.css@*/
:root{ --bg1:#12151c; --bg2:#05070a; --txt:#c7d0db; --muted:#7f8b9a; --link:#6cb6ff;
--panel-bg:#161b22; --panel-bd:#2a313c; }
:root[data-theme="light"]{ --bg1:#f5f8fc; --bg2:#dde4ec; --txt:#1e2630; --muted:#5c6776; --link:#1769c4;
--panel-bg:#ffffff; --panel-bd:#d2dae4; }
body{ margin:0; min-height:100vh; padding:22px 16px 56px; color:var(--txt);
background:radial-gradient(circle at 50% -8%, var(--bg1), var(--bg2)); }
a{ color:var(--link); }
main{ width:100%; max-width:1040px; margin:0 auto; }
.hero{ text-align:center; padding:40px 12px 26px; }
.hero h1{ font-size:clamp(34px, 7vw, 58px); margin:0; letter-spacing:-.02em; line-height:1;
background:linear-gradient(90deg, var(--cyan), #6cb6ff); -webkit-background-clip:text; background-clip:text; color:transparent; }
.hero .tagline{ margin:14px auto 0; font-size:clamp(15px, 2.4vw, 19px); color:var(--txt); font-weight:600; }
.hero .pitch{ margin:12px auto 0; max-width:64ch; color:var(--muted); font-size:14.5px; line-height:1.6; }
.section-label{ text-align:center; font-size:11px; text-transform:uppercase; letter-spacing:.12em; color:var(--muted); margin:26px 0 14px; }
.grid{ display:grid; grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); gap:18px; align-items:start; }
.card{ background:var(--panel-bg); border:1px solid var(--panel-bd); border-radius:14px; padding:14px;
display:flex; flex-direction:column; gap:10px; }
.card.wide{ grid-column:1 / -1; }
.card-head{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.card h3{ margin:0; font-size:16px; }
.chip{ font-size:10px; text-transform:uppercase; letter-spacing:.08em; padding:2px 9px; border-radius:999px;
border:1px solid var(--panel-bd); color:var(--muted); }
.chip.hw{ color:var(--cyan); border-color:rgba(10,179,247,.45); }
.chip.app{ color:#2fe07a; border-color:rgba(47,224,160,.45); }
/* the embedded live widget sits in a recessed frame */
.widget{ border:1px solid var(--panel-bd); border-radius:10px; overflow:hidden; background:radial-gradient(circle at 50% 0, rgba(255,255,255,.02), transparent); }
.widget [data-varasys-metronome], .widget iframe{ display:block; width:100%; }
.card p{ margin:0; font-size:13px; color:var(--muted); line-height:1.5; }
.card .links{ display:flex; gap:16px; }
.card .links a{ color:var(--link); text-decoration:none; font-size:13px; font-weight:600; }
/* philosophy */
.philosophy{ margin-top:34px; }
.phil-grid{ display:grid; grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); gap:16px; }
.phil{ background:var(--panel-bg); border:1px solid var(--panel-bd); border-radius:14px; padding:18px 18px 16px; }
.phil h3{ margin:0 0 8px; font-size:15px; display:flex; align-items:center; gap:8px; }
.phil .ic{ font-size:17px; line-height:1; }
.phil p{ margin:0; font-size:13.5px; color:var(--muted); line-height:1.62; }
.phil p b{ color:var(--txt); }
</style>
</head>
<body>
/*@BUILD:include:src/header.html@*/
<main>
<section class="hero">
<h1>PolyMeter</h1>
<p class="tagline">Polymetric grooves — one engine, many form factors.</p>
<p class="pitch">Stack independent meter lanes, each with its own subdivision, drum voice and perstep
accents, to build true polymeter and ratio polyrhythm. Design it in the browser, save it as a compact
program string, then run it on any device below — they're all the same engine. Each box is <b>live</b>:
press play and try it right here.</p>
</section>
<div class="section-label">The PolyMeter family — try each one live</div>
<div class="grid">
<div class="card wide">
<div class="card-head"><span class="chip app">Web app</span><h3>PE1 — PolyMeter Editor</h3></div>
<div class="widget"><div data-varasys-metronome="editor" data-patch="v1;t120;b16;kick:4=X..x;snare:4=.X.X;hatClosed:4/4;tom:3" data-height="560"></div></div>
<p>The full workbench: stack meter lanes, perstep accents / ghosts / mutes, swing &amp; ratio polyrhythm,
set lists and shareable links. This is where you design grooves.</p>
<div class="links"><a href="/editor.html">Open ↗</a></div>
</div>
<div class="card">
<div class="card-head"><span class="chip hw">Hardware</span><h3>PM1 — Teacher</h3></div>
<div class="widget"><div data-varasys-metronome="teacher" data-patch="v1;t120;b16;kick:4=X.x.;snare:4=.X.X;hatClosed:4/4" data-height="440"></div></div>
<p>Fullfeature desktop console for studio &amp; lessons: colour TFT showing every lane, arcade buttons,
thumbroller, instrument passthrough with analog click.</p>
<div class="links"><a href="/teacher.html">Open ↗</a></div>
</div>
<div class="card">
<div class="card-head"><span class="chip hw">Hardware</span><h3>PM1 — Stage</h3></div>
<div class="widget"><div data-varasys-metronome="stage" data-patch="v1;t120;b16;kick:4=X.x.;snare:4=.X.X;hatClosed:4/4" data-height="430"></div></div>
<p>Footpedal stompbox: two footswitches (tap / next), expressionpedal input, a big floorreadable RGB
beat light, instrument passthrough. DualUSBC daisychain.</p>
<div class="links"><a href="/stage.html">Open ↗</a></div>
</div>
<div class="card">
<div class="card-head"><span class="chip hw">Hardware</span><h3>PMµ — Micro</h3></div>
<div class="widget"><div data-varasys-metronome="micro" data-patch="v1;t120;kick:4;snare:4=.X.X;hatClosed:4/2" data-height="240"></div></div>
<p>Long, narrow inline practice bar: instrument in one end, amp/headphones out the other, click mixed in.
Clickable thumbroller, amber 14segment display, USBC.</p>
<div class="links"><a href="/micro.html">Open ↗</a></div>
</div>
<div class="card">
<div class="card-head"><span class="chip hw">Hardware</span><h3>PMS — Showcase</h3></div>
<div class="widget"><div data-varasys-metronome="showcase" data-patch="v1;t108;kick:4=X..x;snare:4=.X.X;hatClosed:4/4;tom:3~" data-height="540"></div></div>
<p>A display piece shaped like a classic pyramid windup metronome — the pendulum is RGB light easing to
the beat, with light rows for every lane's subdivisions, accents &amp; mutes.</p>
<div class="links"><a href="/showcase.html">Open ↗</a></div>
</div>
<div class="card">
<div class="card-head"><span class="chip">Concept</span><h3>PM1 — Initial</h3></div>
<div class="widget"><div data-varasys-metronome="initial" data-patch="v1;t120;b16;kick:4=X.x.;snare:4=.X.X;hatClosed:4/4" data-height="440"></div></div>
<p>The original idealized device render — full multilane display and setlist navigation. The northstar
concept; the buildable take is the Teacher.</p>
<div class="links"><a href="/player.html">Open ↗</a></div>
</div>
<div class="card">
<div class="card-head"><span class="chip">Widget</span><h3>Embed anywhere</h3></div>
<p style="flex:1">Every form factor above is an embeddable widget — drop one into your own page with a single
<code>&lt;div&gt;</code> + a script, preloaded with a program string and autosizing. (Exactly how the
boxes on this page work.)</p>
<div class="links"><a href="/embed.html">Embed docs ↗</a></div>
</div>
</div>
<section class="philosophy">
<div class="section-label">Philosophy</div>
<div class="phil-grid">
<div class="phil">
<h3><span class="ic">🛠️</span> Program on the web, play on any device</h3>
<p>The website is the workbench. Design your grooves in the <a href="/editor.html">PE1 editor</a> 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 — Teacher on a studio desk, Stage on a
pedalboard, Micro inline at the practice desk, or an <a href="/embed.html">embedded widget</a>. One
engine, one language: author once, run it anywhere.</p>
</div>
<div class="phil">
<h3><span class="ic">🔌</span> USBC power everywhere — no batteries</h3>
<p>Every device is powered over a single <b>USBC</b> port — no internal battery to wear out. Plug into a
wall adapter for a permanent install or carry a power bank like you already do for your phone; the
larger units add a second USBC <b>passthrough</b> so pedals daisychain off one source. One connector
across the range keeps builds simple and <b>futureproof</b>.</p>
</div>
</div>
</section>
</main>
/*@BUILD:include:src/footer.html@*/
<script>
const APP_VERSION = "v0.0.1-dev";
/*@BUILD:include:src/chrome.js@*/
</script>
<script src="/embed.js"></script>
</body>
</html>