Feature: Site Build
Purpose
The project contains a static-site input directory (site.in/) and a generated static-site output directory (site.out/).
The Site Build feature provides the script that converts site.in/ into site.out/, so the published project pages are regenerated from their sources rather than edited where they are served.
Requirements
SITE-BUILD-R001—scripts/site-build.shmust generate the static site insite.out/from the input insite.in/.SITE-BUILD-R002— Eachsite.in/*.txtinput file must producesite.out/<name>.html.SITE-BUILD-R003— Every other file undersite.in/(an authored asset such as a script, a style, or an image) must be copied verbatim intosite.out/, so a page can reference it by relative path.site.in/template.htmlis structure, not a page, andsite.in/pages.navis input for the page set, not a published asset; neither is copied.SITE-BUILD-R004— A page may contain__KEY__placeholders for live state; values come from the state file (dataflow.out/site-state.txtby default, overridable withSITE_STATE_FILE), written byscripts/site-state-fetch.sh. When the state file is absent, remaining placeholders render asunavailable, so the build stays portable.SITE-BUILD-R005— Generated output must be identified as generated.SITE-BUILD-R006— The script must start from an empty output directory, keeping the tracked.gitkeepplaceholder, so a renamed or removed page cannot linger insite.out/as a published orphan.SITE-BUILD-R007— The script must accept optional input and output directory arguments.SITE-BUILD-R008— When no arguments are given, the script must usesite.in/andsite.out/relative to the repository root.SITE-BUILD-R009— The script must be a POSIX shell script.SITE-BUILD-R010— The HTML page structure must live insite.in/template.html, not in the build script.SITE-BUILD-R011—site.in/template.htmlmust contain the marker line<!-- SITE-CONTENT -->where page content is inserted.
Behavior
- Running the script recreates
site.out/fromsite.in/: one HTML page per.txtinput, plus every authored asset. - Re-running the script overwrites existing output deterministically, and a stale page or asset from an earlier build is removed rather than left behind.
- A page’s
__TITLE__placeholder becomes the page title; the index page uses the project title and every other page uses its title-cased basename.
Dependencies
- None.