A personal portfolio rendered as a git log --graph commit history. Each
career milestone is a commit on a branching rail; side pursuits (iOS Club,
AlphaEvolve research) fork off main and merge back in. Built with
Next.js (App Router) + TypeScript + Tailwind CSS + Framer Motion.
npm install
npm run dev # http://localhost:3000
npm run build # production build (deploys to Vercel with zero config)- Commit graph — click any commit to expand its case study inline;
hover to trace a branch;
git checkout <hash>spotlights one era (Esc exits). - Command palette —
⌘K/Ctrl+Kfuzzy-jumps to any project, skill, section, or link. - Résumé view — the toggle in the header flips to a plain, scannable one-page résumé (persisted for the session).
- Light/dark themes,
prefers-reduced-motionsupport, keyboard-navigable commits (Tab + Enter), single-rail mobile layout.
All content lives in lib/data.ts — the graph, command
palette, and résumé view all render from it. To add a milestone:
- Add one object to the
commitsarray (newest first). Give it a uniqueid, a believable 7-charhash, a conventional-committype(feat/perf/merge/branch/ …),lane: 0for the main trunk (1for a side branch), and the case-studybody. - Wire it into
edges(child → parent). A plain edge draws a straight rail segment; addingviaLane: 1routes it through the side lane, which is what draws a visible fork/merge curve. - Move the
refs: ["HEAD", "main"]decoration to the new newest commit.
That's it — the rail, animations, palette entries, and mobile layout all follow from the data.
lib/data.ts ← all content (commits, edges, skills, résumé)
components/
PortfolioApp.tsx ← state + shortcuts + layout shell
BranchGraph.tsx ← measured SVG rail behind the commit rows
Commit.tsx ← one log row (node + header + accordion)
CommitDetail.tsx ← expanded case study
CommandPalette.tsx ← ⌘K fuzzy search overlay
ResumeView.tsx ← plain one-page résumé escape hatch
AuthorBlock.tsx ← "git config --list" identity panel
LanguageBar.tsx ← skills as a repo language bar
ThemeToggle.tsx ← light/dark switch