Static personal site for grimgrimberg.github.io.
- Root-served static HTML/CSS/JS for GitHub Pages.
- Primary maintained pages:
index.htmlphoto.htmlcv.htmlfly101.html(project notes; the Fly101 repo is private, so never link to it or copy private paths)404.html(served by GitHub Pages for any missing path, so it uses root-absolute URLs)
- Legacy URLs kept as
noindexredirects into homepage sections:about.html,projects.html,vision.html,thank-you.html
- Crawl and sharing files:
robots.txt,sitemap.xml,apple-touch-icon.png,assets/images/og-card.png
This repo is not React and is not driven by Jekyll templates in its current maintained flow.
devis the working/source branch convention for this repo.- Feature work should branch from
dev. - The GitHub Pages publish setting is a repository setting, so this repo does not assume a specific deploy branch unless that is verified in GitHub.
index.htmlandphoto.htmlare the main live surfaces.- Shared shell behavior lives in
assets/js/site-shell.js. - Interactive state lives in explicit state machines (
assets/js/state-machine.js), mirrored to<html data-<name>-state>. Seedocs/site/STATE.mdfor the full table and the rules. - Page-specific behavior lives in:
assets/js/index-page.jsassets/js/photo-page.js
- The interactive labs live in:
assets/js/portfolio-labs.js: lab switching, plus a lazy loader that imports the scenes when a lab nears the viewport or the page goes idleassets/js/path-playground.jsandassets/js/lab-experiments.js: the three.js scenesassets/js/lab-models.mjs: the pure simulation models, tested bynpm run test:modelsassets/js/fly-brain.js: the connectome point cloud, shared by theConnectomelab andfly101.html
- Clippy (jQuery + clippy.js, about 1.5 MB with the sprite sheet) is injected on demand: after page load on desktop, on the first Guide click on phones.
assets/css/styles.cssis the Tailwind v4 source-of-truth stylesheet.npm run buildproduces the committedassets/css/output.cssused by every page. CI fails if it is stale.assets/css/original-plus-3d.cssholds hand-written overrides for the hero, nav, labs and goose, loaded afteroutput.csson the homepage.- Primary pages no longer depend on the Tailwind CDN runtime.
- Install dependencies:
npm install- Start a local static server from the repo root:
npm run serve- Open:
npm run lint
npm run test:models
npm test
npm run test:headed
npm run build
npm run watch
npm run servenpm run lintruns the repo-specific static and runtime hygiene checks.npm run test:modelschecks the lab simulation models in plain Node.npm testruns the maintained Playwright smoke suite..github/workflows/site-checks.ymlruns the build check, lint, model tests and smoke suite on pushes todevand on pull requests.- Use
npm run lintandnpm test -- --reporter=lineas the default acceptance gates before pushing portfolio changes. npm run buildrebuilds the committed Tailwind CSS used by the site pages.npm run servelaunches the same local static server shape the smoke suite uses.
assets/
css/
styles.css
output.css
original-plus-3d.css
data/
github-repos.json
images/
fly101/ # renders of the connectome, fly and arm
projects/ # line-art schematics for the project cards
icons/ # inline-ready skill icons
js/
index-page.js
photo-page.js
site-shell.js
portfolio-labs.js
path-playground.js
lab-experiments.js
lab-models.mjs
fly-brain.js
state-machine.js
vendor/
clippyjs/
three/
scripts/
lint-site.mjs
optimize-images.ps1
tests/
README.md
fixtures/
mobile-nav-test.html
site-hygiene.spec.js
smoke.spec.js
docs/
site/
CONTEXT.md
DESIGN.md
PRODUCT.md
SETUP_INSTRUCTIONS.md
archive/
AUDIT_SITE_PASS_1.md
CHANGELOG_SITE_PASS_1.md
REFACTORING_SUMMARY.md
index.html
photo.html
cv.html
fly101.html
404.html
robots.txt
sitemap.xml
.nojekyllis present so GitHub Pages serves the repo as plain static files.- Legacy pages are intentionally kept reachable, but they are not the main maintained user journey.
- Root markdown is intentionally sparse. Product/design context lives under
docs/site/, while older audit notes live underdocs/archive/.