What it is
rareicon.com. An Astro/Starlight site whose bulk is an icon catalog: 1254
terms, each holding every visual variant of one concept, with the SVG inline in
the page’s frontmatter so a variant can be searched, recoloured and copied
without a second request.
One version and one image cover the whole thing, because the site and the process that serves it have no separate lifecycle. A new page is a new deploy either way.
Layout
apps/rareicon/web/ astro/ the Starlight site, builds static to astro/dist server/ rareicon-web, the axum that serves that dist e2e/ Playwright, drives the pair codegen/ proto-to-zod.mjs, and icons/ -- the pack scraperWhere the icons come from
codegen/icons/ pulls from the upstream FOSS packs — Lucide, Tabler, Phosphor,
Simple Icons, Game Icons and a set of Iconify bundles — and emits one MDX per
concept under astro/src/content/docs/icons/. It is opt-in and its output is
committed: pulling thousands of SVGs from the internet is not something a build
should do on its own, and dedup-keys.json is the ledger that keeps a re-run
deterministic.
The licence of each term travels with it, in default_license on the page, and
is what the site renders on the term’s own page.
The schema
codegen/proto-to-zod.mjs reads schemas/proto/kbve/icon/v1/icon.proto and
writes the Zod the content collection validates against. The proto is the
source of truth for what an icon term is; nothing in the site restates it.
A field added to IconTerm and not to the collection schema is a field Astro
strips on the way in, silently, page by page — which is the failure mode that
makes generating this worth the generator.
What the server does
Static files. ServeDir per asset prefix with brotli and gzip variants
precompressed at image build time, directory requests rewritten to
index.html, and Astro’s own 404.html served at a 404 status so a typo’d URL
is not indexed as a page.
It links axum and tower-http and nothing else. The KBVE tree’s equivalent
reached for the shared kbve crate to get the same router and paid for it in
diesel, reqwest, argon2 and jsonwebtoken — a database driver and a password
hasher in a process that hands out HTML.
There is no API here. The dynamic half of RareIcon is rareicon-server, and
this process knows nothing about it.
Deploying
A bump to the version: in this doc’s frontmatter, on the default branch, is
the release. The build reads it, stamps it into the version.toml and
Cargo.toml it compiles from, and publishes it as the tag; the deploy job then
opens a merge request writing that tag into the manifest this doc names, and
the manifests move when it is merged.
version.toml is still watched, so bumping it works too, and sh tools/version-sync/sync.sh bump rareicon-web <version> writes both plus the
Cargo.toml the binary reports itself from. See apps/rareicon/ci.yml and
tools/version-sync.