A single entry point resolves every request to a page module, with clean, slug-based URLs and a fallback layer for content-driven pages. Adding a section is adding a file, not wiring a new router.
Presentation comes from a shared Canvas (Bootstrap) theme referenced by every site — not copied into each one. A site adds a single override stylesheet for its own palette and type. One theme source, many sites, no fork to maintain.
A generic content engine lets a new content type be declared once — its table, its slug, its fields, its relationships — and get listing, reading, and cross-linking without a bespoke set of templates. This very site’s case studies and capabilities are content types, not hardcoded pages.
WebAuthn / passkeys and OIDC for phishing-resistant sign-in, backed by a role-based permission model (groups → roles → permissions) that the same code enforces in the UI and on the server before any restricted record is read.
A consistent data layer over MySQL with prepared statements throughout, plus scheduled ingestion jobs that mirror external and public-record sources into clean, idempotent tables.
The framework currently powers BadHOA.com and McClellan Meadows — projects with real data pipelines, real authentication, and real compliance constraints. That is the difference between a framework and a folder of boilerplate.
