Personal portfolio for Debajyoti Saha. Single page: hero, about, work experience, projects, technologies and contact, with a light/dark theme toggle (dark is the default).
- Next.js 16 (App Router) + React 19
- TypeScript (strict)
- Tailwind CSS v4 — design tokens declared as CSS custom properties in
src/app/globals.css
npm install
npm run dev| Script | Does |
|---|---|
npm run dev |
Development server on :3000 |
npm run build |
Production build |
npm start |
Serve the production build |
npm run typecheck |
Type-check without emitting |
npm run lint |
Lint |
Light values live on :root; dark re-points the same custom properties under
[data-theme="dark"], so every Tailwind utility follows the theme without a
dark: variant. The choice persists to localStorage['portfolio-theme-v2'] and is
applied by a small blocking script in src/lib/theme.ts before
first paint, which is what prevents a flash of the wrong theme on load.
src/
app/ routes (App Router), global stylesheet
components/ shared components; sections/ holds one file per page section
constants/ site content — copy, links, experience, projects
lib/ small helpers (clsx, theme script)
types/ shared domain types
Content lives in src/constants/site.ts — editing copy,
projects or work history means touching that file, not the components.
All three routes prerender as static content, so any host that builds a Next.js app works — deploying from a git push on Vercel or Netlify needs no extra config.