A modern, multilingual portfolio website built with Next.js 16, featuring dark mode support and internationalization (i18n) for English, French, and Italian.
- 3 Languages: English, French, and Italian
- Dynamic Language Switching: Click on language flags to instantly switch between languages
- Locale-Based Routing: Each language has its own URL path (
/en,/fr,/it) - Fully Translated Content: All UI labels, professional experience, projects, education, and skills are translated
- Theme Toggle: Switch between light and dark themes with a single click
- Persistent Preference: Your theme choice is saved in localStorage
- Smooth Transitions: Seamless color transitions between themes
- Mobile-First: Optimized for all screen sizes
- Collapsible Mobile Menu: Profile section collapses on mobile for better UX
- Adaptive Sidebar: Horizontal navigation on mobile, vertical on desktop
- About: Personal introduction with technical and soft skills
- Experience: Professional work history with detailed responsibilities
- Education: Academic background with course details
- Projects: Featured data science projects with live demos and GitHub links
- Contact: Multiple contact methods with interactive cards
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Fonts: Google Fonts (Poppins)
- Icons: Lucide React
- Deployment: Vercel
nextjs-portfolio/
βββ app/
β βββ [locale]/ # Locale-based routing
β β βββ layout.tsx # Main layout with providers
β β βββ page.tsx # Homepage
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
βββ components/
β βββ layout/
β β βββ ProfileCard.tsx # Profile with language switcher
β β βββ Sidebar.tsx # Navigation sidebar
β β βββ ContentPanel.tsx # Main content area
β βββ sections/
β β βββ AboutSection.tsx
β β βββ ExperienceSection.tsx
β β βββ EducationSection.tsx
β β βββ ProjectsSection.tsx
β β βββ ContactSection.tsx
β βββ ThemeProvider.tsx # Dark/light mode context
β βββ Providers.tsx # Combined providers wrapper
β βββ AnimatedBackground.tsx
βββ contexts/
β βββ LanguageContext.tsx # i18n context and logic
βββ hooks/
β βββ useTranslation.ts # Translation hook
βββ data/
β βββ en/ # English data files
β β βββ experience.json
β β βββ projects.json
β β βββ education.json
β β βββ skills.json
β βββ fr/ # French data files
β β βββ experience.json
β β βββ projects.json
β β βββ education.json
β β βββ skills.json
β βββ it/ # Italian data files
β βββ experience.json
β βββ projects.json
β βββ education.json
β βββ skills.json
βββ locales/
β βββ en.json # English UI translations
β βββ fr.json # French UI translations
β βββ it.json # Italian UI translations
βββ middleware.ts # Locale detection and routing
βββ public/
βββ images/
βββ profile.jpg
- Node.js 16+
- npm or yarn
- Clone the repository:
git clone https://github.com/PierreMrt/nextjs-portfolio.git
cd nextjs-portfolio- Install dependencies:
npm install- Run the development server:
npm run dev- Open http://localhost:3000 in your browser
Edit the color scheme in tailwind.config.ts and update the lime accent color:
colors: {
lime: {
// Your custom color palette
}
}
- Create component in
components/sections/ - Add translation keys to
locales/*.json - Create data files in
data/{locale}/if needed - Import and use in
components/layout/ContentPanel.tsx
The theme is managed by ThemeProvider.tsx:
- Light/dark mode toggle in Sidebar
- Persisted in localStorage
- CSS classes:
dark:prefix for dark mode styles
All content is stored in JSON files for easy updates:
- Edit
components/layout/ProfileCard.tsx - Update
locales/{locale}.jsonfor name/title translations
- Edit
data/{locale}/experience.json - Each entry includes: title, company, dates, description, responsibilities, technologies
- Edit
data/{locale}/projects.json - Each project includes: title, description, technologies, GitHub link, highlights
- Edit
data/{locale}/education.json - Each entry includes: degree, institution, dates, description
- Edit
data/{locale}/skills.json - Organized by technical categories and soft skills
- Push your code to GitHub
- Import project in Vercel
- Deploy automatically
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Next.js
- Styled with Tailwind CSS
- Icons by Lucide
- Fonts from Google Fonts
- Inspired from RyanCV