Legal pages, a seedable engine, and a fifth game
Random AI Prompt spends 2.29.0 through 2.35.1 turning outward — self-hosted legal pages and fonts that end the last third-party data flow, a real release stage for the local edition, in-app dialogs, a seedable and now-deterministic engine, and a plain-English repositioning around what it actually is. Fairy Fox Games adds a fifth game, Ricochet, and deepens the other four. On the hub, the one-seamless-site standards milestone lands and the submenu nav ships.
Another full day across the mesh. Random AI Prompt
moved from 2.29.0 to 2.35.1 — less about new surface this time and more about
making the app honest, reproducible, and properly packaged. Fairy Fox
Games added a fifth game and grew the rest, and this site
shipped a standards milestone plus the submenu navigation to match.
The prompt tool tells the truth about itself
The clearest theme of the day was the app squaring up to reality. It gained its own Privacy, Terms, and Cookies pages (2.30.1) — self-hosted, styled to match the app, and rewritten to describe what the tool actually does rather than the boilerplate a generator had produced: no accounts, no analytics, no tracking cookies, settings and bring-your-own API keys kept only on your device, and prompts sent straight from the browser to whichever provider you pick. The same change moved the web fonts in-house, which ends the one remaining IP-to-Google data flow on the live site.
That candor extended to the pitch. A README revamp and SEO pass (2.33.3) stopped leading with Stable Diffusion — it is still supported, but it is one backend among roughly forty, not the headline — and a follow-up (2.35.1) settled on a single plain-English description used everywhere the app is named: an open-source generator for AI image and text prompts that builds richer, more detailed prompts than most people write by hand, then runs them through 40+ models. The dynamic-prompt language that powers it is now framed as the engine under the hood rather than the sales line.
A real release stage, and reproducible output
Two changes fixed things that had quietly been wrong. The local edition finally has
a proper release stage (2.32.0): the whole backend had only ever been wired into the
Vite dev server, so the dev server was doubling as the shipped app. The API handler was
factored out and is now mounted by both the dev plugin and a standalone release server,
with a real npm start (build, then serve) — one backend, two transports, no drift.
The same pass added full file-watch hot reload and atomic, self-ignoring settings
writes so a live reload can never read or clobber a half-written file.
The engine also became seedable and deterministic (2.35.0). A hand-rolled “swap the
global Math.random” hack gave way to a real threaded PRNG, so a generation records its
seed and reproduces byte-for-byte from it; the last few generators that captured
Math.random at import time were converted too, closing the determinism holes. Async
now lives cleanly at the batch boundary (generateManyAsync) while the per-prompt render
stays synchronous by design, keeping the live preview instant — a decision the owner
recorded as settled rather than an open thread.
Interface polish that reads as maturity
The rest of the day rounded off the edges. Native alert/confirm/prompt were
replaced across the app by a proper in-app dialog system (2.34.0) — a small
Promise-based store rendered through one accessible modal host, with focus trapping,
Escape/Enter handling, and red destructive-action buttons — migrating all sixteen call
sites. A header-and-provider batch (2.30.0–2.32.1) added an overflow links menu on every
tab, a syntax-highlighting code editor, a provider-settings accordion that only shows the
knobs a role actually uses, and a unified colour-coded derived-image grid. And a small
content addition (2.33.0) taught the generator to frame artists as “by …” and styles as
“in the style of …”, with a new {#styles} building block to match the existing
{#artists}. Free security and code-health integrations — Dependabot, CodeQL, OpenSSF
Scorecard, Sonar, CodeRabbit, plus Codecov coverage — were wired in on the CI side without
touching the app.
A fifth game, and depth for the rest
Fairy Fox Games went from 0.4.0 to 0.5.1. The headline is
Ricochet (0.5.0), a mechanically-distinct fifth game: aim and fire a single shot that
bounces off the walls and sweeps up every target in its path, bank chains for escalating
call-outs, and end on three misses while the targets shrink as your score climbs — a pure
computeShot core with its own test suite, held to the same bar as the rest. The same
release, and a follow-up depth pass (0.5.1), added one on-mechanic flourish to every
game — perfect-catch combos in Echo Chamber, close-pass skims in Orbit Slingshot, deeper
milestones in Polarity and Ink Bloom, chain-bank toasts in Ricochet — all inside the
existing toast and game-over slots so the clean single-screen play stays uncluttered. The
collection’s test count climbed to 110.
The hub becomes one seamless site
On this site, the day’s work was the one-seamless-site milestone (0.10.0): the docs-site
standard now has every node appear as a page of fairyfox.io — wearing the shared header,
the fixed global nav, and the footer — with the old per-project back-button retired in favour
of the brand link as the way home. Two new standards landed alongside it: a deployment
policy (static content on GitHub Pages under the shared domain, built apps on Netlify, with
the games collection a recorded Pages exception) and a planning standard (plan before you
execute, by default). The matching site code followed the same day (0.11.0): a shared
submenu nav (.subnav) now sits under the primary navigation on the Projects and Docs
sections, listing each project and each doc category. It is the structural half of making the
separate repositories feel like one continuous site.