Personal portfolio site for Hadi Bakhshi, a senior software engineer focused on backend architecture, production systems, and practical AI features.
Live: https://hadibakhshi.dev
- Next.js 16 (App Router)
- React 19 + TypeScript
- Tailwind CSS 4
- shadcn/ui (Base UI primitives)
- Biome (lint + format)
- Hugeicons
- Motion
Requires pnpm (lockfile is pnpm-lock.yaml).
pnpm install
pnpm devOpen http://localhost:3000.
| Script | Description |
|---|---|
pnpm dev |
Development server |
pnpm build |
Production build |
pnpm start |
Serve production build |
pnpm lint |
Run Biome checks |
pnpm format |
Format with Biome |
src/
app/ # Routes, root layout, globals, sitemap
components/
custom/ # Page sections (Hero, Work, Contact, …)
ui/ # shadcn primitives
data/
resume.ts # Profile, metrics, experience, stack, contact
case-studies/ # Case study copy + architecture diagrams
lib/ # Shared utilities (layout tokens, cn)
public/ # Static assets, resume.pdf, theme-init.js
Home page sections live in src/app/page.tsx. Case studies are served at /work/[slug].
- Résumé-style copy (hero, about, metrics, experience, stack, education, contact):
src/data/resume.ts - Case studies (problem, architecture, decisions, diagram nodes):
src/data/case-studies/
After changing case study slugs or adding a study, ensure it is registered in the case-studies index and appears in the work section data.
Light/dark mode is toggled in the header. A blocking script (public/theme-init.js) runs early to apply the stored preference and avoid a flash of the wrong theme.
Standard Next.js app — deploy on Vercel or any Node host that supports next build / next start.