A Python build reads the sites from TOML, renders Jinja2 templates per domain and syncs the result into one output folder per site.
- The template loader searches the site's pages first, then the shared templates, so every page extends one shared layout.
- Template globals link(domain, path) and asset(path) give root-relative or absolute links and content-hashed CSS/JS URLs.
- StrictUndefined and HTML autoescaping make typos and unescaped text fail or stay safe at build time.