Renders impforge.com: a static site built from this workspace's own registry, READMEs, ratified vocabulary and research essays, in English and Spanish.
The site is a projection. Nothing on it is typed twice: the crate tree comes from docs/architecture/layers.toml, each crate's page from that crate's own README, the glossary from the ratified term rows exported to docs/reference/glossary.tsv, and the research essays from the Markdown in docs/. A number on a page is a number somebody can re-derive, and the command that produced it is recorded beside the figure in content.rs.
Running it
cargo run -p tools-site-impforge --bin site-impforge -- --repo-root . --out dist/impforge
| flag | meaning |
|---|---|
--repo-root <dir> | where the registry, READMEs and essays are read from (default .) |
--out <dir> | where the site is written (default dist/impforge) |
The build is all-or-nothing. A missing essay, an unreadable registry, a screenshot that will not redact, or a write that would land outside the output root aborts it — a half-written site is never left for a web server to serve.
Two languages
English is served from /, Mexican Spanish from /es/. Both are rendered from one set of page definitions, so a paragraph added to a page exists in both or the tests say which one is missing.
| module | what it holds |
|---|---|
catalog | the machinery: foundation-i18n bundles, locale fallback, Words::s(key) |
strings | the words: every user-facing string as (key, english, spanish) |
lang | which language is being built, and where its pages and URLs live |
Fallback is on, so a key with no Spanish value renders its English rather than a blank. That would let a gap sit forever unnoticed, which is what these tests are for:
every_english_key_has_a_spanish_one— the gap, counted.a_spanish_value_is_not_just_the_english_pasted— with an explicit list of
the names that genuinely are the same in both.
every_page_differs_between_the_two_languages— an unkeyed page renders
English under a Spanish URL and looks perfectly fine; this is what catches it.
the_drawings_line_up_in_both_languages— the ASCII diagrams are translated
too, and one word too long bends a box.
no_page_shows_a_raw_key— a mistyped key renders ashome.ledeon the page.
Research essays are republished as written. Where docs/<path>/<name>.es.md exists beside an English source it is used for /es/; where it does not, the English is published under the Spanish URL with a line saying so. That is what lets the essays be translated one at a time without the site breaking in between.
What the build refuses
- An email address. Operator instruction, 2026-09-18 — none is published on
this site. no_email_address_is_published scans every rendered page for a mailto: or a bare address, in both languages.
- A banned phrase.
banned.rscarries the list with the reason each was
ruled out, and scans both the rendered pages and this crate's own source, comments included. Republished essays are exempt: they are the operator's earlier writing, quoted as it stands.
- An unredacted screenshot. Every figure declares its crop and its reason as
data; redact applies it and verifies the result before the file is written. A source that will not redact fails the build.
- A link into nothing. `every_internal_link_points_at_a_page_this_site
_renders` checks every href on every page against what the build writes.
The contact form
contact-handler is a second binary: a std-only HTTP server on 127.0.0.1:8111 that accepts the form, rate-limits by address, and hands the message to sendmail as a strict argument vector. Header fields are flattened so a newline in a name cannot forge a header. It stores nothing.