A config-driven developer identity page with liquid interactions, real activity, and zero runtime backend.
Light theme: pure white. Dark theme: pure black.
- Liquid / gooey hero navigation with real accessible DOM links
- Light and dark themes with system preference + local persistence
- Pulse activity view with provider tabs, daily heatmap, stats and hover detail
- GitHub contribution collector using GitHub GraphQL at build time
- Local-first Codex collector that exports aggregated usage only
- Config-driven Work, Writing and About sections
- Responsive layout and
prefers-reduced-motionsupport - Static GitHub Pages deployment workflow
- No database, serverless function, runtime secret or backend API
git clone https://github.com/Hubujiu/Morpholio.git
cd Morpholio
npm run check
npm run buildServe dist/ with any static server.
Edit only morpholio.config.js for most customization:
const config = {
profile: {
name: "Your Name",
handle: "YOURHANDLE",
headline: "I build things with code and AI."
},
activity: {
github: { enabled: true, username: "your-github-name" },
codex: { enabled: true, source: "./generated/codex.json" }
},
work: [],
writing: []
};The Pages workflow runs:
npm run collect:githubIt uses the workflow's built-in GITHUB_TOKEN, queries the configured username's contribution calendar, normalizes daily intensity, then writes generated/github.json. The browser never receives a GitHub token.
You can also run it locally:
GITHUB_TOKEN=... npm run collect:githubPowerShell:
$env:GITHUB_TOKEN="..."
npm run collect:githubRun on the machine where Codex is used:
npm run collect:codexBy default Morpholio scans:
~/.codex/sessions
~/.codex/archived_sessions
Override the root with CODEX_HOME.
The committed output contains aggregated fields only:
- date
- input tokens
- cached input tokens
- output tokens
- reasoning tokens
- session count
- approximate tool-call count
The collector does not intentionally export prompts, responses, source code, tool output, API keys or OAuth tokens.
After collecting:
git add generated/codex.json
git commit -m "data: refresh codex activity"
git pushThe push triggers a new static deployment.
morpholio.config.js
│
├── Work / Writing / Profile
│
GitHub GraphQL ──> generated/github.json
Local Codex logs -> generated/codex.json
│
▼
npm build
│
▼
dist/
HTML + CSS + JS + JSON only
The repository includes .github/workflows/pages.yml. In repository settings, set Pages → Build and deployment → Source to GitHub Actions if it is not already selected.
The default palette deliberately uses only neutral values:
- light background
#ffffff - light foreground
#000000 - dark background
#000000 - dark foreground
#ffffff
Activity intensity is expressed with grayscale rather than a brand accent. Gooey interactions are produced with an SVG silhouette filter while text and links remain normal DOM elements.
- Provider adapter contract for Claude Code / WakaTime / custom JSON
- Optional MDX writing and project case studies
create-morpholiointeractive initializer- Local scheduled Codex sync helper
- richer liquid transitions without sacrificing reduced-motion/accessibility
MIT