Personal GitHub Pages site for greeffer.com, built with Observable Framework and deployed via GitHub Actions.
- My GitHub profile landing page. The
gh-pagesbranch (well, in this case themainbranch via GitHub Pages with a custom domain) servesgreeffer.com. Recruiters, collaborators, and curious strangers land here. - An Observable Framework app. Notebooks and Markdown pages in
src/get built into static HTML indist/and pushed to GitHub Pages. - Self-updating. A data loader hits the GitHub API so the featured repos list stays current without me editing it manually.
- Photon Photos β Android camera app, CameraX + Jetpack Compose + AGSL shaders. Target: Play Store before September.
- obsidian plugin work β community plugins in the Obsidian ecosystem.
- cloudflare / dns / github-pages infra β the plumbing behind
greeffer.com.
| Layer | Tool |
|---|---|
| Build | Observable Framework 1.13+ |
| Hosting | GitHub Pages (custom domain: greeffer.com) |
| CI/CD | GitHub Actions (npm ci β observable build β deploy-pages) |
| Data | GitHub REST API via @octokit/rest |
src/
index.md # landing page
data/repos.json # cached repo list (regenerated by data loader)
components/repos.js # Observable data loader: fetches modster's repos
observablehq.config.js
.github/workflows/deploy.yml
npm ci
npm run dev # live preview at http://localhost:8080
npm run build # outputs to dist/Deployment is fully automatic: push to main β GitHub Action builds and publishes.
MIT.





