Static personal website published on GitHub Pages.
- Plain HTML/CSS/JavaScript
- No framework
- No bundler
- No build pipeline required for deploy
index.html: shell page with SEO/meta tags and component placeholderscomponents/*.html: page sections split into reusable HTML partialsinclude-components.js: runtime loader for partialscomponents-inline.js: local fallback map forfile://testingbuild-inline-components.js: script that regeneratescomponents-inline.jsstyle.css: global stylesscript.js: site interactions (navigation + logo easter egg)console-contact-terminal.js: console easter egg/contact terminalapps/: standalone mini appsapps/lab-archive.html: hidden app index (not linked from main site)robots.txt: asks crawlers to skip the entire/apps/area
When opening index.html directly via file://, browsers block fetch() for local files (CORS/security restrictions).
To support local testing without running a server:
- On
file://,include-components.jsloads HTML fromcomponents-inline.js - On
http(s)://(including GitHub Pages), it loads components via normalfetch()fromcomponents/*.html
Run this every time you edit any file in components/:
node build-inline-components.jsThis regenerates components-inline.js so local file:// testing matches current components.
No rebuild step is required for apps/* pages: they are plain static HTML/CSS/JS.
Hidden App Archive Config
Inside apps/lab-archive.html:
APPS: catalog of available app cardsLOCKED_APP_IDS: list of app ids that require key unlock
Apps not included in LOCKED_APP_IDS are shown by default.
- Open
index.htmldirectly in browser (file://...) - Make sure
components-inline.jsis up to date (run rebuild command above)
If you prefer an HTTP environment:
python3 -m http.server 8080Then open:
http://localhost:8080
- Push changes to the branch used by GitHub Pages
- GitHub Pages serves static files as-is
- Edit component(s) under
components/ - Run
node build-inline-components.js - Test locally (
file://orhttp://localhost:8080) - Commit and push
- Keep all user-facing text in English.
- If component markup changes, always regenerate
components-inline.jsbefore commit. - Hidden app index is intentionally unlinked; access it only via direct URL.