From 2c1765effa990362fbe58c219e55aa1b89029f8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Forment?= Date: Sun, 8 Feb 2026 02:57:41 +0100 Subject: [PATCH] Feat: improve website --- website/public/VCR_OSD_MONO_1.001.woff2 | Bin 0 -> 17992 bytes website/public/script.js | 14 +++++ website/public/style.css | 73 +++++++++++++++++++----- website/src/pages/index.astro | 35 ++++++++---- 4 files changed, 96 insertions(+), 26 deletions(-) create mode 100644 website/public/VCR_OSD_MONO_1.001.woff2 diff --git a/website/public/VCR_OSD_MONO_1.001.woff2 b/website/public/VCR_OSD_MONO_1.001.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..929406ae26dcbbb7423cbfd27653ec4ff76f03a5 GIT binary patch literal 17992 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 PUK=VAk~|As& { }); }); +const featureDesc = document.getElementById('feature-desc'); +document.querySelectorAll('.feature-tags button').forEach(btn => { + btn.addEventListener('click', () => { + const wasActive = btn.classList.contains('active'); + document.querySelectorAll('.feature-tags button.active').forEach(b => b.classList.remove('active')); + if (wasActive) { + featureDesc.textContent = ''; + } else { + btn.classList.add('active'); + featureDesc.textContent = btn.dataset.desc; + } + }); +}); + document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { document.querySelectorAll('.example-cell.expanded').forEach(c => { diff --git a/website/public/style.css b/website/public/style.css index bf17d05..fd8e447 100644 --- a/website/public/style.css +++ b/website/public/style.css @@ -1,17 +1,10 @@ @font-face { - font-family: 'Space Mono'; - src: url('/SpaceMono-Regular.woff2') format('woff2'); + font-family: 'VCR OSD Mono'; + src: url('/VCR_OSD_MONO_1.001.woff2') format('woff2'); font-weight: 400; font-display: swap; } -@font-face { - font-family: 'Space Mono'; - src: url('/SpaceMono-Bold.woff2') format('woff2'); - font-weight: 700; - font-display: swap; -} - :root { --bg: #000; --surface: #121212; @@ -29,14 +22,14 @@ } body { - font-family: 'Space Mono', monospace; + font-family: 'VCR OSD Mono', monospace; background: var(--bg); color: var(--text); max-width: 800px; margin: 0 auto; padding: 1rem; line-height: 1.3; - font-size: clamp(0.9rem, 0.75rem + 0.75vw, 1.15rem); + font-size: clamp(1rem, 0.85rem + 0.75vw, 1.3rem); } header { @@ -72,11 +65,14 @@ h2 { border-bottom: 1px solid var(--text-muted); } -p { margin: 0.25rem 0; } +p { + margin: 0.25rem 0; + text-align: justify; +} video { max-width: 100%; - margin: 0.5rem 0; + margin: 2rem 0 0.5rem 0; display: block; } @@ -87,7 +83,10 @@ ul { margin: 0.25rem 0; } -li { margin: 0.1rem 0; } +li { + margin: 0.1rem 0; + text-align: justify; +} .examples-grid { display: grid; @@ -173,6 +172,50 @@ li { margin: 0.1rem 0; } color: var(--text-muted); } +.features { + margin: 0.25rem 0; +} + +.feature-tags { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; +} + +.feature-tags button { + font-family: 'VCR OSD Mono', monospace; + font-size: 0.85em; + background: var(--surface); + color: var(--text-muted); + border: 1px solid transparent; + padding: 0.2rem 0.5rem; + cursor: pointer; +} + +.feature-tags button:hover { + color: var(--text); + border-color: var(--text-muted); +} + +.feature-tags button.active { + color: var(--text); + border-color: var(--text); +} + +.feature-desc { + color: var(--text-dim); + margin-top: 0.75rem; + padding: 0.75rem; + background: var(--surface); + border-left: 2px solid var(--text-muted); + text-align: left; + line-height: 1.5; +} + +.feature-desc:empty { + display: none; +} + .colophon { margin-top: 3rem; padding-top: 1rem; @@ -185,7 +228,7 @@ li { margin: 0.1rem 0; } } #theme-toggle { - font-family: 'Space Mono', monospace; + font-family: 'VCR OSD Mono', monospace; background: none; color: var(--text-muted); border: none; diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index d50e5ff..1625455 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -78,22 +78,35 @@

All releases are available on GitHub. You can also compile the software yourself by getting it from Cargo!

- -

About

Cagire is a step sequencer where each step contains a Forth script instead of typical note data. When the sequencer reaches a step, it runs the associated script. Scripts can produce sound, trigger samples, apply effects, or do nothing at all. You are free to define what your scripts will do. Cagire includes a built-in audio engine called Doux. No external software is needed to make sound. It comes with oscillators, sample players, filters, reverb, delay, distortion, and more.

-

Features

-
    -
  • Robust synthesis engine: synthesizers, sampling, effects, live input, and more to discover.
  • -
  • Ableton Link: jam with your friends or include other software / hardware to your setup.
  • -
  • 32 banks × 32 patterns × 128 steps per project: (~131.000 scripts per project).
  • -
  • Forth: objectively the coolest / minimal / hackable language to make music with!
  • -
  • Embedded dictionary and documentation! Learn while coding!
  • -
+

Features (click to learn more!)

+
+
+ + + + + + + + + + + + + + + +
+
+

Live Coding

-

Live coding is a technique where a programmer writes code in real-time in front of an audience. It is a way to experiment with code, to share things and thoughts openly, to express yourself through code. It can be technical, poetical, weird, preferably all at once. Live coding can be used to create music, visual art, and other forms of media. Live coding is an autotelic activity: doing it is its own reward. There are no errors, only fun. Learn more at TOPLAP or livecoding.fr.

+

Live coding is a technique where a programmer writes code in real-time in front of an audience. It is a way to experiment with code, to share openly, to express yourself through code. It can be technical, poetical, weird, preferably all at once. Live coding can be used to create music, visual art, and other forms of media. Live coding is an autotelic activity: doing it is its own reward. There are no errors, only fun. Learn more at TOPLAP or livecoding.fr.

+ +

BuboBubo · Audio engine: Doux · GitHub · AGPL-3.0 ·