A modern, high-performance portfolio website built with Next.js 16, React 19, TypeScript, and Tailwind CSS.
- β Modern Stack: Next.js 16 + React 19 + TypeScript
- β Styling: Tailwind CSS with custom design system
- β Performance: Static export for blazing-fast load times
- β SEO Optimized: Complete metadata, sitemap, robots.txt
- β Responsive: Mobile-first design with hamburger menu
- β Dark Mode: Built-in dark mode toggle
- β Analytics: Vercel Analytics integration
- β Accessibility: ARIA labels, semantic HTML, keyboard navigation
- β Type-Safe: Strict TypeScript configuration
- β State Management: Zustand ready for complex state
- β Data Fetching: React Query integrated
- β Animations: Framer Motion + custom animations
- β Icons: Lucide React icon library
- Framework: Next.js 16.0.0 (App Router, Static Export)
- React: 19.0.0
- TypeScript: 5.6.3
- Styling: Tailwind CSS 3.4.13
- State Management: Zustand 5.0.2
- Data Fetching: TanStack React Query 5.59.20
- Utility: clsx, tailwind-merge
- Animations: Framer Motion 11.11.17
- Icons: Lucide React 0.454.0
- Fonts: Inter (Google Fonts, optimized)
- Analytics: Vercel Analytics 1.4.1
- Node.js 18+
- npm or yarn
# Clone the repository
git clone https://github.com/hematenergi/hematenergi.github.io.git
cd hematenergi.github.io
# Install dependencies
npm install
# Run development server
npm run devOpen http://localhost:3000 in your browser.
# Create optimized production build
npm run build
# Preview production build locally
npm startThe static site will be exported to the out directory.
/
βββ app/ # Next.js App Router
β βββ case-studies/[id]/ # Dynamic case study pages
β βββ styles/ # Global styles
β βββ layout.tsx # Root layout with metadata
β βββ page.tsx # Homepage
β βββ not-found.tsx # 404 page
β βββ error.tsx # Error boundary
βββ components/
β βββ layout/ # Layout components (Navbar)
β βββ sections/ # Page sections (Hero, Contact, etc.)
β βββ ui/ # Reusable UI components
βββ lib/
β βββ constants.ts # All content data & configuration
β βββ utils.ts # Utility functions
βββ public/ # Static assets
β βββ .nojekyll # GitHub Pages config
β βββ robots.txt # SEO crawler instructions
β βββ sitemap.xml # SEO sitemap
β βββ og-image.png # Open Graph image (add your own)
βββ registry/
βββ magicui/ # Custom UI components (Terminal)
Edit /lib/constants.ts:
export const PERSONAL_INFO = {
name: "Your Name",
title: "Your Title",
email: "your@email.com",
github: "https://github.com/yourusername",
linkedin: "https://linkedin.com/in/yourusername",
// ... more fields
}In /lib/constants.ts, update the CASE_STUDIES array:
export const CASE_STUDIES = [
{
id: "project-slug",
title: "Project Title",
category: "Category",
description: "Description",
tags: ["React", "TypeScript"],
// ... more fields
},
]Edit /tailwind.config.js or update CSS variables in /app/styles/globals.css.
- Create a 1200x630 PNG image
- Save as
/public/og-image.png - The metadata is already configured in
app/layout.tsx
- Add your favicon files to
/public/ - Update
app/layout.tsxto include favicon link tags
This site is configured for GitHub Pages deployment:
-
Ensure
next.config.jshas:output: 'export', images: { unoptimized: true }
-
Build the project:
npm run build
-
Deploy to GitHub Pages:
- The
outdirectory contains your static site - Push to the
gh-pagesbranch or configure GitHub Pages to deploy fromout
- The
-
GitHub Actions (recommended): Create
.github/workflows/deploy.yml:name: Deploy to GitHub Pages on: push: branches: [master] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" - run: npm ci - run: npm run build - uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./out
- Import your repository on Vercel
- Vercel will auto-detect Next.js and deploy
- Analytics will work automatically with Vercel deployment
- β Static export for instant page loads
- β
Font optimization with
next/font - β Component code-splitting
- β Tailwind CSS purging in production
- β Lazy-loaded components where appropriate
- β Optimized animations with Framer Motion
- Performance: 95+
- Accessibility: 100
- Best Practices: 100
- SEO: 100
npm run dev # Start development server
npm run build # Build for production
npm run start # Preview production build
npm run type-check # Run TypeScript compiler check
npm run lint # Run ESLint (when configured)Create a .env.local file for any environment-specific variables (none required by default).
All content is managed through /lib/constants.ts for easy updates:
- Personal Info: Contact details, social links
- Tech Stack: List of technologies
- Highlights: Key achievements
- Case Studies: Project details
- Experience: Work history
- Why Work With Me: Value propositions
Issue: OG Image generation fails
Solution: OG image is static (/public/og-image.png). Create your own 1200x630 PNG.
Issue: Sitemap build errors
Solution: Sitemap is static XML in /public/sitemap.xml. Update manually when adding pages.
Issue: Module not found
Solution: Run rm -rf node_modules package-lock.json && npm install
Check the error boundary (app/error.tsx) for detailed error messages.
All rights reserved Β© 2025 Dany Arkham
This is a personal portfolio. Feel free to fork and adapt for your own use!
- Email: danyarkham@example.com (update in constants.ts)
- LinkedIn: Dany Arkham
- GitHub: @hematenergi
Built with β€οΈ using Next.js, React, TypeScript & Tailwind CSS