0.10.1 RELEASE NOTES
Fizlet 0.10.1
By Chris Cooley ↗ · · CHANGELOG.md ↗
fizlet/rulesdrops: per-drop age and landing spot.drops()now exposesage(seconds since each drop spawned),landY(where it lands:(x[i], landY[i]), moved byscroll) andlife, and emitsdrop:landonce when a drop touches down. Blitz can draw its fall shadow, landing puff and blink from these instead of keeping its own spawn time per crate (dom-battlefield-blitz#4). Still no allocation per step; 1,264 → 1,318 B gzip (budget 1,536).- Website: the gallery (
gallery/). Every animation, newest first: the prompt (or, for the hand-built ones, the brief) it was made from, the live demo lazy-mounted throughfizlet/slot(one shared loader; each entry's live chunk is its own bundle and loads only near the viewport, never under reduced motion, where the poster stays), and a size badge with that chunk's gzip bytes, measured byscripts/gallery.mjson this build. Seeded with the fizz can, the layers story and the blast demo ("How it works"), plus the first animation made by the engine'sfe animfrom one prompt ("pink sparks burst where you tap": the spray scene,site/gallery/scenes/spray.ts, kernel + fx, settles to zero frames). Entries are data (site/gallery/entries/*.json). New sharedsite/size-badge.mjs;site/demo.tsexportsrun()and the home page's blast figure isplayFigure(), so the gallery can mount it.tests/site.mjs: order, a measured badge and the prompt on every entry, each demo mounts only near the screen, a spray draws on a tap, reduced motion loads no scene. - Website: one page per brick, generated from the source.
bricks/<id>.htmlfor the kernel and every brick (input, pad, collide, grid, fx, sprite, sound, embed, slot, hud, match, board-page, presence, ui, perf, rules, camera, debug) plus a bricks index. Each page has the module's summary (its leading comment), every export with its doc comment (read from the built.d.tsbyscripts/api.mjs), the gzip size measured byscripts/sizes.mjs, ESM imports from the hosteddist/, and npm marked coming soon. Live demos where cheap: kernel settle (the frame count stops once the puck does), fx, grid (A* on a seeded board), sprite and sound; each loads only its own chunk.tests/api.test.mjs: the catalog covers every public module inpackage.json, each page lists every runtime export, the page shows the measured bytes. - Home: the bricks section comes from the same catalog and links to each page; a page profile section explains settle, the fps cap and slot with the measured page-build size; "by Chris Cooley" links to coded.design;
npm installis marked coming soon (here and in the README); the roadmap reflects the shipped bricks; Blitz's unmeasured "~17 KB" claim is gone. The hero is the layers story (Blitz as a stack of bricks: its poster, CSS and loader fromsite/demos/layers/poster.ts, the live chunk loading only near the viewport); the blast demo moves to its own "Blast it. Recall it." section below it. A "The name" section tells the origin story (-let from applet, fiz from the soda-commercial fizz, DOM VIRUS first) with the fizz can live in it (the figure and poster from the fizz build). Each links to its own demo page; the sizes shown are the ones their builds measure.npm run sitenow runs both demo builds. - SEO and accessibility gates (
scripts/check-html.mjs, run bynpm run test:siteon every built page): one title and description of sane length, canonical andog:urlequal to the page's URL, Open Graph tags (a generatedog.png, PNG-encoded withnode:zlib), lang, oneh1, onemainplus header, nav and footer landmarks, no skipped heading levels, unique ids, alt on every image, every svg and canvas hidden or named, every link and button named. Asitemap.xmllists every page. The demos' own standalone pages (demos/fizz/,demos/layers/,examples/fizz/) are gated too, with their open gaps listed exactly intests/site.mjs. Kernel lead comment rewritten (it is the kernel page's summary); no code or size change.