- Next.js 16.1.3 - React framework with App Router
- React 19.2.3 - UI library
- TypeScript 5.9.3 - Type safety
- Tailwind CSS 4 - Utility-first CSS framework
- tailwind-merge - Merge Tailwind classes safely
- Custom Fonts - Commit Mono for terminal aesthetic
- Apollo Client 4.1.0 - GraphQL client
- Hygraph - Headless CMS (GraphQL)
- GraphQL Code Generator - Type-safe GraphQL queries
- Radix UI - Accessible component primitives
- Dialog, Popover, Progress, Tabs, Command, etc.
- Lucide React - Icon library
- Sonner - Toast notifications
- React Hook Form - Form state management
- Resend - Email service for contact form
- next-themes - Theme management
- embla-carousel-react - Carousel component
- cmdk - Command palette component
portfolio-2026/
├── app/ # Next.js App Router
│ ├── api/ # API routes
│ │ ├── contact/ # Contact form endpoint
│ │ └── preload/ # Preload data endpoint
│ ├── styles/ # Global styles
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Home page
│ └── not-found.tsx # 404 page
├── components/ # React components
│ ├── ui/ # Reusable UI components
│ ├── shared/ # Shared components (Navbar, Preloader)
│ ├── portfolio-hero/ # Hero section
│ ├── experience-section/
│ ├── projects-section/
│ ├── technologies-section/
│ └── contact-section/
├── hooks/ # Custom React hooks
│ ├── useSectionNavigation.ts
│ ├── useImageLoader.ts
│ └── usePreloader.ts
├── utils/ # Pure utility functions
│ ├── preloadImage.ts
│ └── extractImageUrls.ts
├── lib/ # Shared libraries
│ ├── apolloClient.ts # Apollo Client setup
│ ├── contact.ts # Contact form logic
│ └── utils.ts # Utility functions
├── fetchers/ # Data fetching functions
│ ├── getAuthor.ts
│ ├── getExperiences.ts
│ ├── getProjects.ts
│ └── getTechnologies.ts
├── queries/ # GraphQL queries
│ └── *.graphql
├── types/ # TypeScript types
│ └── graphql.ts # Generated GraphQL types
└── public/ # Static assets
├── documents/ # Resume PDF
└── fonts/ # Custom fonts
- Node.js 20+
- npm, yarn, pnpm, or bun
- Clone the repository:
git clone <repository-url>
cd portfolio-2026- Install dependencies:
npm install
# or
yarn install
# or
pnpm install- Set up environment variables:
Create a
.env.localfile in the root directory:
# Hygraph GraphQL Endpoint
# HYGRAPH_ENDPOINT=your_endpoint
# Resend API Key (for contact form)
RESEND_API_KEY=your_resend_api_key
# Contact Email (where form submissions are sent)
CONTACT_EMAIL=your-email@example.com- Generate GraphQL types:
npm run codegen- Run the development server:
npm run dev- Open http://localhost:3000 in your browser.
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run codegen- Generate GraphQL types from schema
The project uses Hygraph (formerly GraphCMS) as the headless CMS. Update the GraphQL endpoint in:
lib/apolloClient.ts- Apollo Client configurationcodegen.ts- GraphQL Code Generator configuration
Configure allowed image domains in next.config.ts:
images: {
domains: ["your-image-domain.com"],
}npm run buildMake sure to set all required environment variables in your deployment platform:
RESEND_API_KEY- Required for contact formCONTACT_EMAIL- Required for contact form
- Vercel - Optimized for Next.js
- Netlify - Great Next.js support
- Any Node.js hosting - Standard Next.js deployment