A minimal, fast, single-page portfolio built with a modern TypeScript-first stack.
- Next.js 16 (App Router) + React 19
- Tailwind CSS v4 with OKLCH design tokens (red primary accent)
- next-themes — dark / light theme switcher (defaults to dark)
- Motion (
motion/react) — subtle scroll reveals - lucide-react — icons (brand icons are inline SVG in
src/components/icons.tsx) - shadcn-style UI primitives (
cva+tailwind-merge)
pnpm install
pnpm dev # http://localhost:3000Other scripts:
pnpm build # production build
pnpm start # serve the production build
pnpm lint # eslintAll copy lives in one file: src/lib/data.ts.
Update your profile, experience, tech stack, projects, and links there — every
section reads from it. Nothing else needs to change for a content update.
profile— name, role, tagline, summary, email, phone, locationsocials— GitHub / LinkedIn / emailexperiences— work history (Intozi) with per-role highlightsskillGroups— tech stack, groupedprojects— setfeatured: trueon one to give it the large hero cardeducation/achievements
src/
├─ app/
│ ├─ layout.tsx # fonts, metadata, ThemeProvider, Navbar + Footer shell
│ ├─ page.tsx # assembles the sections
│ ├─ globals.css # Tailwind v4 + design tokens (light/dark)
│ └─ icon.svg # favicon
├─ components/
│ ├─ sections/ # hero, experience, tech-stack, projects, contact
│ ├─ ui/ # button, badge primitives
│ ├─ navbar.tsx · footer.tsx · theme-toggle.tsx · reveal.tsx · …
└─ lib/
├─ data.ts # ← single source of truth for content
└─ utils.ts # cn() helper
- Primary color: change
--primary(and--ring) insrc/app/globals.css. - Theme default:
defaultThemeinsrc/app/layout.tsx. - Metadata / OG: update
metadataBaseinsrc/app/layout.tsxto your real domain once deployed. - Resume download: drop
resume.pdfintopublic/and wire a link in the hero or nav if you want a download button.
Deploys as static output anywhere; easiest on Vercel.


