July 28, 2026 at 12:00:00 AM UTC
website-comm-template unbreaks install and closes a header-injection hole
website-comm-templatetoolingsecuritya11y
website-comm-template
A cluster of fixes, in dependency order: the template couldn't be installed, then couldn't be formatted, then had a real security hole in its one dynamic feature.
build and tooling
pnpm-workspace.yamlstill had the literal placeholder text"set this to true or false"where a boolean belonged — pnpm 11 rejected it outright, breakinginstall/check/buildfor anyone who cloned the template. Resolved totrue(esbuild needs its native postinstall)..prettierrcwas JSON prefixed with//comments — valid in neither JSON nor YAML, so Prettier silently fell back to defaults (or aborted), quietly breaking the pre-commit hook too. Rewritten as YAML with the same options.
seo
robots.txtandsitemap.xmlconverted from static files to routes so they can resolve an absolute origin fromPUBLIC_SITE_URL. Added a placeholder favicon (previously 404'd).SETUP.mdnow lists replacing the favicon and setting the site origin as commissioning steps.
security and accessibility
- The contact form's
Subjectheader was built from the unnormalized submitted name — a newline let an attacker inject arbitrary headers. Control characters are now stripped, and sending validates its own config instead of silently attempting a send with leftover placeholder values (API key, template addresses). Footer social links are now restricted to http(s) instead of rendering whatever string was configured, closing ajavascript:-href path. The rate limiter's map now prunes expired entries with a hard ceiling instead of growing unbounded. - Mobile nav toggle now sets
aria-expanded/aria-controlswith a proper label; the panel closes on navigation, Escape, and outside click. Contact form validation and status messages are now announced.
all entries