Personal portfolio, rebuilt as an Nx monorepo, doubling as a hands-on testbed for agentic development workflows.
- A rebuild of an existing portfolio (previously static, deployed on GitHub Pages) — new stack, new design, same core purpose: showcase experience and projects.
- A "Lab" / pet-projects section: standalone demo apps for practicing specific libraries/techniques, including a rebuilt version of an earlier barbershop project.
- An explicit experiment in agent-driven development: most implementation work here goes through Claude Code following the conventions in
AGENTS.md, with the process itself being part of the point, not just the output.
- Monorepo: Nx (task orchestration/caching; apps are hand-scaffolded, not Nx-generated)
- Apps: Next.js 16 (App Router, Turbopack), TypeScript, Tailwind
- Package manager: pnpm
- Testing: Playwright (e2e)
- Deploy: Cloudflare, via
@opennextjs/cloudflare - Backend: minimal by design — starts as a contact-form endpoint (email API), expands only as specific pet projects need it (e.g. a Postgres + Auth.js pet project for auth practice)
apps/
portfolio/ # main site
<pet-project>/ # each pet project is its own app
modules/
common/ # shared utils, types, hooks
ui/ # shared design-system components
config/ # shared eslint/tsconfig/tailwind config (manual)
.github/
workflows/ci.yml # lint, typecheck, build, e2e; deploys main to Cloudflare
docs/
specs/ # spec-per-non-trivial-change, see spec-template.md
PROGRESS.md # running log, updated at the end of each stage
.claude/
agents/
code-reviewer.md # read-only review subagent
launch.json # dev-server config for agent-driven local runs
Requires Node 24 (see .nvmrc) and pnpm — pnpm install, then pnpm nx dev portfolio.
- Stage 0 — Agent workflow setup:
AGENTS.md, spec template,code-reviewersubagent,.gitignore - Stage 1 — Nx workspace + portfolio app scaffolding
- Stage 2 — Architecture & design system
- Stage 3 — Backend/storage (contact-form endpoint first)
- Stage 4 — Legacy content/design migration
- Stage 5 — Cloudflare CI/CD
- Stage 6 — Experience page: detailed case studies of past work
- Stage 7 — Pet-projects section + barbershop duplicate
- Stage 8 — Testing & ongoing agent loop
See
docs/PROGRESS.mdfor what's actually landed vs. this plan, andAGENTS.mdfor how work in this repo is done.
- Non-trivial changes: write a spec in
docs/specs/first (docs/spec-template.md), then implement. - One branch per feature (
stage/…,feat/…,fix/…), PR tomain, never commit directly tomain. Follow-ups to a feature in flight stay on its branch. - Agents implement and self-check, then stop — commits, pushes and PRs happen only when I ask for them, after I've read the diff.
- Full conventions: see
AGENTS.md.