A modern, high-performance portfolio website built with Next.js, showcasing my expertise as a JavaScript Tech Lead and Full Stack Developer.
- Modern Tech Stack: Next.js 16, React 19, TypeScript
- Optimized Performance: WebP images, responsive design, Core Web Vitals optimized
- Beautiful UI: TailwindCSS with DaisyUI components
- SEO Optimized: Meta tags, structured data, sitemap
- Mobile First: Fully responsive design
- Accessibility: WCAG compliant with proper alt texts and semantic HTML
- Framework: Next.js 16 with App Router
- Language: TypeScript
- Styling: TailwindCSS + DaisyUI
- Icons: Custom SVG icons
- Fonts: Optimized Google Fonts
- Linting: ESLint with Next.js config
- Formatting: Prettier
- Image Processing: Sharp for WebP conversion
- Build: Next.js optimized build
- Node.js 20.9+
- npm, yarn, or pnpm
- Clone the repository:
git clone https://github.com/your-username/portfolio.git
cd portfolio- Install dependencies:
npm install
# or
yarn install
# or
pnpm install- Run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev- Open http://localhost:3000 in your browser.
The SemScraper monitor tracks the organic Google placement of the four local offers for Lyon on desktop and mobile (8 SERPs per run). It records the portfolio's rank and the first ten organic competitors in a local report.
- Copy
.env.exampleto.env.localand setSEMSCRAPER_API_KEYlocally. Never commit, paste, or deploy this API key. - Run
npm run seo:serp. - Read the dated JSON report in
reports/seo/(ignored by Git).
Use SEMSCRAPER_DRY_RUN=1 npm run seo:serp to review the requests without
spending a SemScraper query.
The local Google Search Console connector reads the existing bbenoit.fr
property with Google's read-only OAuth scope. It keeps the OAuth refresh token
in .search-console/token.json, which is ignored by Git. Reports are written
to reports/seo/, also ignored by Git.
- In Google Cloud Console, create or select a project, enable the Google Search Console API, configure the OAuth consent screen and add your Google account as a test user if the app is in testing.
- Create an OAuth client of type Desktop app. Copy its client ID and
client secret to
.env.localasGOOGLE_SEARCH_CONSOLE_CLIENT_IDandGOOGLE_SEARCH_CONSOLE_CLIENT_SECRET. Keep them local. - Run
npm run seo:gsc:auth, open the printed Google URL and approve the read-only authorization. Keep the terminal running until the confirmation page appears. - Run
npm run seo:gsc:reportto create a report over the latest complete 28-day period. It identifies query/page pairs ranked 11β20 and visible results ranked 1β10 with a low click-through rate.
portfolio/
βββ app/
β βββ components/ # React components
β β βββ benefits.tsx # Benefits section
β β βββ contact.tsx # Contact form
β β βββ experience.tsx # Work experience
β β βββ footer.tsx # Footer component
β β βββ header.tsx # Navigation header
β β βββ hero.tsx # Hero section
β β βββ presentation.tsx # About section
β β βββ skills.tsx # Skills showcase
β β βββ timeline.tsx # Career timeline
β β βββ works.tsx # Portfolio projects
β βββ styles/
β β βββ global.css # Global styles
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
βββ public/ # Static assets
β βββ benefits/ # Benefit icons (WebP)
β βββ works/ # Project images (WebP)
β βββ socials/ # Social media icons (SVG)
β βββ *.webp # Optimized images
βββ scripts/ # Build and optimization scripts
β βββ convert-images.js # PNG to WebP conversion
β βββ generate-responsive-images.js # Responsive image generation
βββ docs/ # Documentation
βββ IMAGE_OPTIMIZATION.md # Image optimization guide
This portfolio implements advanced image optimization techniques for maximum performance:
- 92.6% size reduction on profile image (500KB β 37KB)
- 91.2% size reduction on project images (800KB β 70KB)
- 85% quality for optimal balance between size and visual quality
- Multiple sizes: 640px, 768px, 1024px, 1280px, 1920px
- Automatic format selection (WebP/AVIF with PNG/JPG fallback)
- Lazy loading for non-critical images
# Convert PNG images to WebP
npm run convert-images
# Generate responsive image versions
npm run generate-responsiveFor detailed image optimization documentation, see IMAGE_OPTIMIZATION.md.
- Primary: Custom brand colors
- Secondary: Complementary accent colors
- Neutral: TailwindCSS gray scale
- Status: Success, warning, error states
- Headings: Bold, hierarchical sizing
- Body: Optimized readability
- Code: Monospace for technical content
- Cards: Consistent spacing and shadows
- Buttons: Interactive states and accessibility
- Modals: Project details and interactions
- Navigation: Responsive and accessible
- Mobile First: Optimized for mobile devices
- Breakpoints: sm (640px), md (768px), lg (1024px), xl (1280px), 2xl (1536px)
- Touch Friendly: Appropriate touch targets
- Performance: Optimized for slower connections
- LCP: < 2.5s (Largest Contentful Paint)
- FID: < 100ms (First Input Delay)
- CLS: < 0.1 (Cumulative Layout Shift)
- Image optimization with WebP/AVIF
- Code splitting and lazy loading
- Font optimization
- CSS purging
- Static generation where possible
# Development
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
# Code Quality
npm run format # Check code formatting
npm run format:fix # Fix code formatting
# SEO
npm run seo:audit # Audit production SEO tags, sitemap, robots and social images
# Image Optimization
npm run convert-images # Convert PNG to WebP
npm run generate-responsive # Generate responsive imagesA weekly GitHub Action runs every Monday at 07:00 UTC and checks the production
site with npm run seo:audit.
The audit covers:
- homepage and
/jobstitles, descriptions and canonicals - Open Graph and Twitter metadata
- JSON-LD structured data
sitemap.xml,robots.txtandmanifest.webmanifest- generated social images
To audit another environment locally:
SEO_AUDIT_BASE_URL=http://localhost:3000 npm run seo:audit- Push your code to GitHub
- Connect your repository to Vercel
- Deploy automatically on every push
- Netlify: Compatible with Next.js
- AWS Amplify: Full-stack deployment
- Docker: Containerized deployment
| Metric | Score | Status |
|---|---|---|
| Performance | 95+ | β Excellent |
| Accessibility | 100 | β Perfect |
| Best Practices | 95+ | β Excellent |
| SEO | 100 | β Perfect |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Benoit Bruynbroeck
- Email: bruy.benoit@gmail.com
- LinkedIn: linkedin.com/in/benoit-bruynbroeck-a21214b4
- GitHub: github.com/Fendry02
- Next.js - The React framework
- TailwindCSS - Utility-first CSS framework
- DaisyUI - Component library
- Sharp - Image processing
- Vercel - Deployment platform
β Star this repository if you found it helpful!