Security / Model
Security
This site is a static publication. The security model is small on purpose: no backend, no database, no user accounts, and no runtime secrets.
Static boundary
Every public page is pre-rendered HTML. There is no application server, database, upload endpoint or login for visitors. The content editor is a client-side Git client; it writes through the GitHub API.
Editor authentication
The CMS uses a fine-grained GitHub token with repository Contents read/write. The token is stored in the browser's localStorage and is never committed. The default OAuth flow is disabled because the site is not hosted on Netlify.
Supply chain
Dependencies are locked, the CMS script is version-pinned with SRI, and CI runs type checks, tests, content checks, budget checks and accessibility audits. Dependency advisories are handled through the lockfile and audit results.
Media and uploads
Images are uploaded to public/media through the CMS, limited by format and size. SVG is served as an image; it is not executed as a page script. Article HTML is authored by the site owner, not by visitors.
Privacy
No analytics, advertising or tracking cookies. Fonts are self-hosted. The public site does not call a third-party API; only the admin page loads the CMS bundle from a pinned CDN.
Known limits
GitHub Pages does not allow custom response headers. A meta CSP, strict referrer policy and admin noindex are in place; HSTS, frame-ancestors and arbitrary headers require Cloudflare or another CDN. GitHub provides transport security and platform-level protections.
Report a security issue
If you find a problem, email me with the URL, steps to reproduce and impact. Please do not open a public issue with exploit details.
ContactGU-IDchen@outlook.com