A modern, responsive portfolio website built with Next.js, TypeScript, and Tailwind CSS. This portfolio showcases professional experience, skills, and projects with a clean, minimal design and smooth animations.
- 🌐 Multilingual Support - Available in English (🇬🇧), French (🇫🇷), and Dutch (🇳🇱)
- 📱 Fully Responsive - Optimized for all devices and screen sizes
- 🎨 Modern Design - Clean UI with smooth animations using Framer Motion
- 🔍 SEO Optimized - Meta tags, OpenGraph, Twitter cards, sitemap, and robots.txt
- 📊 Analytics Ready - Google Analytics integration
- 🚀 Performance Optimized - Image optimization, code splitting, and lazy loading
- 🌙 Accessibility - WCAG compliant with semantic HTML
- 🔄 i18n Support - Internationalization with next-i18next
- 💼 Professional Sections - About, Skills, Experience, Education, and Contact
- 🎯 Interactive Elements - Smooth scrolling, animations, and hover effects
- Framework: Next.js 15.2.1
- Language: TypeScript 5.1.3
- Styling: Tailwind CSS 3.3.2
- Animations: Framer Motion 10.12.16
- Icons: Heroicons 2.0.18
- i18n: next-i18next 14.0.0
- Linting: ESLint, Prettier
- Analytics: Google Analytics
hmounir-portfolio/
├── components/ # Reusable UI components
│ ├── Header.tsx # Navigation and language selection
│ ├── Footer.tsx # Site footer with social links
│ ├── Section.tsx # Section wrapper component
│ ├── SkillCard.tsx # Skills display component
│ ├── ExperienceCard.tsx # Experience item component
│ ├── EducationCard.tsx # Education item component
│ └── SEO.tsx # SEO meta tags component
├── hooks/ # Custom React hooks
│ ├── useLanguage.ts # Language management
│ ├── useTranslate.ts # Translation utilities
│ └── useScrollPosition.ts # Scroll handling
├── pages/ # Next.js pages
│ ├── _app.tsx # App wrapper
│ ├── _document.tsx # Document customization
│ ├── index.tsx # Homepage
│ ├── 404.tsx # Not found page
│ └── _error.tsx # Error handling
├── public/ # Static assets
│ ├── favicon/ # Favicon files
│ ├── locales/ # Translation files
│ └── images/ # Site images
├── styles/ # Global styles
├── types/ # TypeScript types
└── lib/ # Utility functions
- Node.js 18.x or later
- npm or yarn
-
Clone the repository:
git clone https://github.com/hamzaPixl/hmounir.git cd hmounir
-
Install dependencies:
npm install # or yarn install
-
Create environment files:
cp .env.example .env cp .env.local.example .env.local
-
Update the environment variables in
.env
and.env.local
with your values:NEXT_PUBLIC_GA_ID
: Google Analytics measurement IDNEXT_PUBLIC_SITE_URL
: Your website URL
-
Start the development server:
npm run dev # or yarn dev
-
Open http://localhost:3000 in your browser.
npm run dev
- Start development server with Turbopacknpm run build
- Build for productionnpm run start
- Start production servernpm run lint
- Run ESLintnpm run format
- Format code with Prettiernpm run type-check
- Run TypeScript checksnpm run analyze
- Analyze bundle sizenpm run clean
- Clear cache and node_modulesnpm run dev:clean
- Clear cache and start dev servernpm run troubleshoot
- Run troubleshooting script
The site supports three languages:
- 🇬🇧 English (default)
- 🇫🇷 French
- 🇳🇱 Dutch
Translation files are located in public/locales/{lang}/common.json
.
The site is fully responsive with breakpoints:
- Mobile: < 768px
- Tablet: 768px - 1024px
- Desktop: > 1024px
- Dynamic meta tags
- OpenGraph images
- Twitter cards
- Structured data
- Sitemap
- Robots.txt
The site can be deployed to:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
This project is licensed under the ISC License.
Hamza Mounir
- Website: pixldev.be
- GitHub: @hamzaPixl
- LinkedIn: Hamza Mounir
Made with ❤️ by Hamza Mounir