The trace advanced a whole sample at a time (floor of points x progress) - visible steps; the tip now interpolates between samples. The single field-wide rotate is gone: each path turns at its own seeded rate and direction about its own center, drifts on its own small orbit, carries its own wave and traces itself at its own tempo. Every rate is an integer number of cycles, so the loop stays seamless. Same generator feeds the paint worklet and the canvas. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
questions (redoal.com)
The content behind redoal.com — a second face of
the same portal question engine
that serves uhhm.no. Every page is a YAML file under questions/;
pushing to main lints and then tells every running portal instance
to hot-reload.
The full schema reference lives in uhhm/questions' README — this repo only notes what's distinctive here:
site.yamlrebrands the instance: titleredoal, its own wordmark, and amodulehero —hero.jsin this repo, lysbue's "paths" paint worklet brought back and animated: 47 generative turning-function curves (paths.js, seeded so every repaint agrees) tracing themselves in from the center. A real CSS Paint Worklet where the API exists (paths-worklet.js, driven by a registered--redoal-tCSS animation), a canvas with the same generator elsewhere; colors from portal's custom properties, frozen under prefers-reduced-motion. No input up there: the form's gesture canvas below is the one place a visitor draws. The wordmark is white-stroked like uhhm's, because portal's light theme lands wordmarks as ink via an invert filter.type: gestureonindex.yaml's "Draw a path and see who's near" — the pseudo edition of the network: draw a path, it becomes a real 20-byte gesture key (computed by the relay with the canonical Rust pipeline), and the submitted answer stores{points, key}in theredoal_gesturesbucket. Markedoptional: truedeliberately: the widget's hidden input is invisible to HTML required-validation.gitea_releaseson "Our Composition" — advertises redoal/redoal's releases. The jq filter pinsurl: nullwhile that repo is private (a private release's html_url 404s for anonymous visitors); flip it to.html_urlif the repo ever goes public.- Bucket names are
redoal_-prefixed (redoal_gestures,redoal_subscribers): both portal instances share one NATS JetStream, and bare names would collide with uhhm's buckets.
This repo also runs the redoal.com instance itself:
.gitea/workflows/deploy.yml pins PORTAL_RELEASE to a release tag
on uhhm/portal — bump the pin and push to upgrade (or revert to roll
back), and the workflow ships the artifact, rewrites the env from
this repo's Actions variables/secrets, restarts app@redoal-portal,
and refreshes the Caddy route. Content edits never need a deploy;
they hot-reload live.
Lint locally before pushing:
/srv/app/redoal-portal/current/question_lint --path questions
(or from a portal checkout:
cargo run --features ssr --bin question_lint -- --path <this repo>/questions)