Skip to content

Docs website#3

Merged
brnrdog merged 17 commits intomainfrom
docs/website
Apr 3, 2026
Merged

Docs website#3
brnrdog merged 17 commits intomainfrom
docs/website

Conversation

@brnrdog
Copy link
Copy Markdown
Owner

@brnrdog brnrdog commented Apr 3, 2026

No description provided.

brnrdog added 17 commits April 3, 2026 15:24
Built with xote, rescript-signals, and basefn, following the same
architecture as the zekr docs-website. Includes landing page, getting
started guide, full API reference pages, examples, search modal,
dark/light theme, and responsive design.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
…ctive demos

- Replace orange color palette with Tone.js-inspired pink (#e535ab) and
  green (#2dd4a0) colors throughout the design system
- Integrate Basefn.Icon components (Search, GitHub, Sun/Moon, Menu, etc.)
  in header, hero, feature cards, and code demo sections
- Use Basefn.Theme for proper dark/light theme management
- Add three interactive audio demos to the Examples page:
  - Synth Keyboard: play notes with selectable waveforms
  - Effects Chain: FM synth with adjustable reverb/delay wet mix
  - Step Sequencer: togglable 8-step pattern with Loop/Transport
- Add rescript-tone and tone as website dependencies for live demos
- Add demo-specific CSS (piano keys, sequencer grid, sliders, etc.)
- Update .gitignore to exclude *.res.mjs compiled output

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Adds a sticky TOC on the right side of documentation pages that:
- Extracts h2/h3 headings from page content after render
- Highlights the active section based on scroll position
- Shows indented sub-entries for h3 headings
- Hides on screens narrower than 1100px

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
- Layout.res: Theme toggle renders both Sun/Moon icons, toggles visibility
  via computedAttr("style") instead of signalFragment icon swap
- DocsPage.res: TOC separates entries (structural) from activeId (class-only)
  so scroll spy only updates CSS classes, not full DOM rebuild
- Pages__Home.res: Copy button renders both Check/Copy icons with visibility
  toggle instead of signalFragment icon swap

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Layout (Header, Footer, SearchModal) was rendered inside each page
component, causing full DOM recreation on every route navigation.
Moved Layout to wrap Router.routes in App.res so the shell persists
and only page content swaps on navigation.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Replace code-only examples with fully interactive demos:
- Melody Sequencer: Sequence + Transport with BPM control
- Drum Machine: Kick/snare/hihat grid sequencer with toggleable steps
- Filter Sweep: Sawtooth oscillator through resonant lowpass filter
- Polyphonic Chords: PolySynth playing major/minor chords
- AM Synth Pad: AMSynth with adjustable harmonicity and reverb

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Noise generators were started immediately on init, producing continuous
white noise. Replaced snare and hihat with short Synth bursts that only
sound on trigger (triangle for snare, square for hihat).

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
- deploy.yml: builds root rescript bindings + website, deploys via
  actions/deploy-pages
- 404.html copy in build script for SPA client-side routing support
- Vite base path already set to /rescript-tone/

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Prerender all routes to static HTML at build time for GitHub Pages:
- scripts/prerender.mjs: uses Router.initSSR + SSR.renderNodeToString
  to render each route and inject into the Vite-built HTML shell
- scripts/dom-shim.mjs: browser API polyfills for Node.js SSR
- scripts/node-loader.mjs: ESM loader that stubs CSS/asset imports
- Main.res: detects SSR content and hydrates instead of fresh mount
- 404.html generated as SPA fallback for unknown routes

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Moved module.register() call into prerender.mjs itself so the script
works with a plain `node scripts/prerender.mjs` — no --import flag
needed. Fixes CSS import errors on Node v25.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Generate both slug/index.html and slug.html for each route so URLs
work with and without trailing slashes. Without this, GitHub Pages
301-redirects /route to /route/ causing a visible flash.

Also simplified the build command to plain `node scripts/prerender.mjs`
since the ESM loader is now self-registered via module.register().

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Homepage: Hero -> 3 compact interactive demos grid (synth, effects,
sequencer) -> feature descriptions list -> CTA with install command.
Removed the tabbed code demo and 6-card features grid.

Footer: Moved link columns (Docs, Links) to the left side after
the brand/tagline. Added Tone.js link. Made overall footer more
compact.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Xote hydration fails silently due to DOM mismatches caused by:
- Basefn icons rendering empty spans in SSR (no SVG injection)
- Theme initialization modifying DOM before hydration starts
- Module-level side effects in Layout.res

The prerendered HTML still provides instant first paint and SEO.
The client JS clears it and mounts fresh for full reactivity.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Replace three separate mini-demos with a single interactive beat grid
where Lead (Synth), Bass (FMSynth+Reverb), and Beat (percussive Synth)
rows combine musically. Includes transport controls, BPM slider, step
indicators, and per-row API code snippets. Adds purple color tokens.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
- Beats: 4-row drum grid (Kick, Snare, HiHat, Clap) using Synth
- Chords: 4-row chord grid (Am, F, C, G) using PolySynth, exclusive per column
- Bass: 5-row piano roll (A2-C2) using FMSynth, exclusive per column
- Melody: 5-row piano roll (A4-C4) using triangle Synth, exclusive per column
- Effects: 4 rotary knobs (Reverb, Delay, Filter, Chorus) with drag interaction
- All tracks share Transport and route through Filter -> Chorus -> Reverb -> Delay
- Added amber color tokens for chord track styling

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
- BPM: 113 (matching the original)
- Drums: four-on-the-floor kick, snare+clap on 2&4, constant hi-hats
- Chords: C-Am-F-G (I-vi-IV-V) progression
- Bass: E-G-C-.-.-D-C-. riff approximated in C pentatonic
- Melody: D-E-D-G-.-E-D-C synth hook

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
Each track (Beats, Chords, Bass, Melody) is now its own card with
colored border matching its theme. Cards form a 2x2 grid on desktop
and stack vertically on mobile. Each card has its own step numbers
for alignment. Widened container to 960px to fit two columns.

https://claude.ai/code/session_01B8MgrWxixKEWaxDiHyy8Bx
@brnrdog brnrdog marked this pull request as ready for review April 3, 2026 13:26
@brnrdog brnrdog merged commit b111d50 into main Apr 3, 2026
2 checks passed
@brnrdog brnrdog deleted the docs/website branch April 3, 2026 13:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant