Add the node builder app, served at /node_builder #36

Merged
rob merged 6 commits from node-builder into main 2026-10-20 08:21:11 +00:00
Collaborator

Ports the Claude Design Node Builder and Node Builder Mobile files into a self-contained app in node_builder/, served at /node_builder. It shares only the font files with the rest of the site. The design's logic class is kept almost verbatim; the template is rewritten with htm because the design runtime needs eval and CDN React, which the CSP blocks. The design-system components it uses are copied from the bundle and the Lucide icons are vendored as a sprite. React, htm, js-yaml and JSZip are pinned copies under vendor/.

Under 900px it switches to the mobile design: sheets instead of side panels, tap-to-connect, a tile-based add sheet and a full-screen problems list.

Behavioural changes to the site: server.js serves a directory's index.html, and the build copies the folder into dist/node_builder/ with content-hashed asset links and adds the page to the sitemap. No CSP change.

Tested with node --test (20 passing, 1 skipped), html-validate on the built output, and a headless Chromium run through both layouts: selecting, pin assignment, wire drag and the bind/command chooser, YAML, zip download, dark theme, and on the phone layout the sheets, tap-to-connect, add, problems and pinch zoom. No console errors or failed requests.

Not included: no Umami tag on the builder page and no link to it from the site nav.

Ports the Claude Design Node Builder and Node Builder Mobile files into a self-contained app in `node_builder/`, served at `/node_builder`. It shares only the font files with the rest of the site. The design's logic class is kept almost verbatim; the template is rewritten with htm because the design runtime needs `eval` and CDN React, which the CSP blocks. The design-system components it uses are copied from the bundle and the Lucide icons are vendored as a sprite. React, htm, js-yaml and JSZip are pinned copies under `vendor/`. Under 900px it switches to the mobile design: sheets instead of side panels, tap-to-connect, a tile-based add sheet and a full-screen problems list. Behavioural changes to the site: `server.js` serves a directory's `index.html`, and the build copies the folder into `dist/node_builder/` with content-hashed asset links and adds the page to the sitemap. No CSP change. Tested with `node --test` (20 passing, 1 skipped), html-validate on the built output, and a headless Chromium run through both layouts: selecting, pin assignment, wire drag and the bind/command chooser, YAML, zip download, dark theme, and on the phone layout the sheets, tap-to-connect, add, problems and pinch zoom. No console errors or failed requests. Not included: no Umami tag on the builder page and no link to it from the site nav.
Add the node builder app, served at /node_builder
All checks were successful
CI / check (pull_request) Successful in 1m22s
CI / deploy (pull_request) Has been skipped
f81c517483
A self-contained React app in node_builder/, ported from the Claude Design
Node Builder and Node Builder Mobile files. It shares only the font files
with the site. The design runtime needs eval and CDN scripts, which the
CSP blocks, so the logic class was kept and the template rewritten with
htm; the design-system components it uses are copied from the bundle and
the icons vendored as a sprite.

The server now serves a directory's index.html, and the build copies the
folder into dist with content-hashed asset links.
Animate sheets and programmatic board pans in the node builder
All checks were successful
CI / check (pull_request) Successful in 10s
CI / deploy (pull_request) Has been skipped
5118efef9a
Sheets slide up and the scrim fades in. The board eases when the app
moves it (revealing a tapped row, fit, zoom buttons) but not while the
user is dragging or pinching. Ports are re-measured when the pan ends so
wires stay attached. Honours prefers-reduced-motion.
Slide sheets out when they close
All checks were successful
CI / check (pull_request) Successful in 10s
CI / deploy (pull_request) Has been skipped
ee48ab8fff
A small wrapper keeps a closed sheet mounted for 240ms with a leaving
class so it can animate down while the scrim fades. Taps are ignored
during that beat. Reduced-motion users get an instant close.
Centre and zoom to the tapped row on a phone, fit the board in connect mode
All checks were successful
CI / check (pull_request) Successful in 10s
CI / deploy (pull_request) Has been skipped
c893917ab6
Revealing a row used to pan vertically only. It now also centres the
card and zooms to at least 0.75 (or to fit the card width), skipping the
move when the row is already well placed. Entering connect mode fits the
whole board so every target is on screen.
Link to the node builder from the site header
All checks were successful
CI / check (pull_request) Successful in 9s
CI / deploy (pull_request) Has been skipped
cbdb8ccfeb
Keep header nav labels on one line on small screens
All checks were successful
CI / check (pull_request) Successful in 10s
CI / deploy (pull_request) Has been skipped
f5d44927c9
With four links the labels wrapped inside their pills at 360px. The
pills now wrap onto a second row instead.
rob merged commit f414c0e666 into main 2026-10-20 08:21:11 +00:00
rob deleted branch node-builder 2026-10-20 08:21:11 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rob/CamperCan!36
No description provided.