- Vite + React 19 + TypeScript + Tailwind. Dev:
bun run dev(port 5173), build:bun run build, preview:bun run preview. - Lint/format:
bun run lint,bun run lint:fix,bun run format,bun run format:check. - Unit:
bun run test/bun run test:watch(Vitest). E2E:bun run test:e2e,bun run test:e2e:ui(Playwright). - Playwright starts dev server automatically (baseURL http://localhost:5173); config:
playwright.config.ts, tests ine2e/.
- Copy lives in
content/*.ts: personalInfo, experience, education, projects, impactMetrics, hireInfo, nowNext, skills, socialLinks, blog. Edit these, not inline strings in components. - Content/UX plan:
docs/portfolio-refresh-plan-merged.md. Portfolio = conversion-first, proof-led; no career break on site (resume only).
- E2E runs chromium, mobile (iPhone 12), tablet (iPad). Do not show "Career break" in Education UI; e2e asserts its absence.
Session Start: Read vault-index.md, vault-sessions.md, vault-past-mistakes.md (symlinks in this repo root → KnowledgeOS vault). Follow guardrails in past-mistakes strictly.
Session End write contract: sessions.md (always) → index.md (always) → past-mistakes.md (if lesson learned) → decisions.md (if decision made) → architecture.md (if structure changed).
Vault MCP: vault MCP server → 04_Projects/vijay-portfolio/.