web: whiskers.lmjtfy.fun
The public page for Whiskers, in the look and stack of its neighbour lmjtfy: a Rust Cloudflare Worker (axum, maud) with Datastar, so the server draws the page and the browser holds no state of its own. It tells a stranger what Whiskers is, how it keeps a child safe, how it works and how to get it, says plainly that it is a personal project and not a product, shows where it uses Jev (a diagram of one turn, the guard's questions and three real requests), and has a demo of the cat itself on the app's 15 by 16 pixel grid, on a black stage so its pale effects show, with moods and mascots the server chooses and eyes that follow the pointer. Pasted into Discord or Twitter it unfurls as a looping video of the cat (served with byte ranges, which those players need).
Three mascots stand on the demo stage, in this order: Ginger, the cat the app started with and
the default; Grey, the grey cat; and Bunny, a rabbit made for the page. A picker beside the
demo chooses; the server answers with the new figure like it does for a mood, and nothing is
remembered (?mascot=ginger|grey|bunny on the address pre-selects one, checked against the closed
set cat::Mascot; anything else is Ginger). Ginger and Bunny are drawn in cat/; the grey
cat is drawn once, in ../crates/whiskers-art, and the app draws the same
data. The link preview's PNG and MP4 show Ginger.
whiskers.lmjtfy.fun is the canonical address. Any other address that is not local (the account's workers.dev one) answers
GET and HEAD with a 308 to the same path and query there, so link previews and old links move; see site/src/host.rs.
Run it
Everything runs inside the web devshell, from nix, with no account and no login:
cd ~/whiskers
nix develop .#web
cargo test --workspace --manifest-path web/Cargo.toml # the pure parts, natively
cd web/worker && wrangler dev --local --port 8788 # http://localhost:8788/
wrangler dev runs tools/build first, which builds the Worker and, when it is
stale (a hash of what it is drawn from, tools/preview-hash, not file times), the preview PNG and MP4 (about fifteen seconds). Nothing here deploys; the owner's deployment
notes are private and live outside this repository.
What is where
| Path | What |
|---|---|
| cat/ | The mascots: who can be shown (Mascot), Ginger's and Bunny's art, the SVG and the CSS that plays it. The grey cat's art and the motion are ../crates/whiskers-art. |
| site/ | Configuration, the demo's choreography, and jev: what the page says about where Jev is used, built from the guard's own definitions. |
| worker/ | The Worker: routes, page, headers, logging, wrangler.toml. |
| previewgen/ | Draws the preview card and the video's frames as SVG, in lmjtfy's card look (jev_ui::card). |
| third-party/ | The pixel icons the downloads and tables use: shuqikhor's (MIT) and SerenityOS's (BSD 2-Clause) unchanged, and the Android and arm marks drawn here. |
| tools/ | build, preview, check-preview, preview-hash. |
The look (stylesheet, page shell, windows, fonts, Datastar, the link-preview tags) is jev-ui in
~/jevcrates, shared with lmjtfy.fun.
Sizes (measured 2026-10-04)
Measured with tools/check-preview and wrangler dev.