Skip to content

PierreMrt/nextjs-portfolio

Repository files navigation

Next.js Data Scientist Portfolio

A modern, multilingual portfolio website built with Next.js 16, featuring dark mode support and internationalization (i18n) for English, French, and Italian.

🌟 Features

Multilingual Support (i18n)

  • 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

Dark/Light Mode

  • 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

Responsive Design

  • 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

Interactive Sections

  • 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

πŸš€ Tech Stack

  • Framework: Next.js 16 (App Router)
  • Language: TypeScript
  • Styling: Tailwind CSS
  • Fonts: Google Fonts (Poppins)
  • Icons: Lucide React
  • Deployment: Vercel

πŸ“ Project Structure

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

πŸ› οΈ Installation & Setup

Prerequisites

  • Node.js 16+
  • npm or yarn

Installation

  1. Clone the repository:
git clone https://github.com/PierreMrt/nextjs-portfolio.git
cd nextjs-portfolio
  1. Install dependencies:
npm install
  1. Run the development server:
npm run dev
  1. Open http://localhost:3000 in your browser

🎨 Customization

Changing Colors

Edit the color scheme in tailwind.config.ts and update the lime accent color:

colors: {
    lime: {
        // Your custom color palette
    }
}

Adding New Sections

  1. Create component in components/sections/
  2. Add translation keys to locales/*.json
  3. Create data files in data/{locale}/ if needed
  4. Import and use in components/layout/ContentPanel.tsx

Modifying Theme

The theme is managed by ThemeProvider.tsx:

  • Light/dark mode toggle in Sidebar
  • Persisted in localStorage
  • CSS classes: dark: prefix for dark mode styles

πŸ“ Content Management

All content is stored in JSON files for easy updates:

Profile Information

  • Edit components/layout/ProfileCard.tsx
  • Update locales/{locale}.json for name/title translations

Professional Experience

  • Edit data/{locale}/experience.json
  • Each entry includes: title, company, dates, description, responsibilities, technologies

Projects

  • Edit data/{locale}/projects.json
  • Each project includes: title, description, technologies, GitHub link, highlights

Education

  • Edit data/{locale}/education.json
  • Each entry includes: degree, institution, dates, description

Skills

  • Edit data/{locale}/skills.json
  • Organized by technical categories and soft skills

πŸš€ Deployment

  1. Push your code to GitHub
  2. Import project in Vercel
  3. Deploy automatically

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

About

A website for my resume, built with nextjs

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors