© Made by Adam Bellanger
← ProjectsPersonal

The site you're reading: Next.js 16, bilingual with automatic language detection, polished animations, self-hosted in Docker on my own server.

Preview

adambellanger.pro
Portfolio home page: cut-out portrait and large scrolling name
adambellanger.pro
Project list in English, with filters
Portfolio home page on mobile

Stack

Languages
  • TypeScript
Front-end
  • Next.js
  • Tailwind CSS
  • Framer Motion
Infra
  • Docker
  • Nginx Proxy Manager
  • GitHub Actions

Context

My first portfolio (a Three.js 3D scene) was slow and hard to read. I wanted a site that owns my dual network/telecom and development profile, fast and accessible, and that I control end to end: from the code to the server it runs on.

Role

Design, development and production: art direction, case study content, architecture, deployment and maintenance.

Architecture

  1. Browser

    FR or EN from its language

  2. Nginx Proxy Manager

    HTTPS, Let's Encrypt

  3. Next.js proxy

    Language detection, URL rewriting

  4. Static pages

    Pre-rendered in FR and EN

    API routes

    Contact form, visit counter

  5. Gmail SMTP

    Contact form messages

    Docker volume

    Visit counter

On every push to GitHub, GitHub Actions checks lint and build before deployment.

Challenges

Smooth animations (page transition curtain, contextual cursor, magnetic buttons, smooth scrolling) without trading away performance or accessibility: everything turns off when visitors prefer reduced motion, and the site targets 90+ on Lighthouse. A complete English version with browser language detection and translated URLs, handled by a Next.js proxy with no library. A contact form that sends real emails over SMTP, with spam protection. And scrolling that got stuck after navigating, fixed by observing the page's real height.

Outcome

Pages pre-rendered in both languages, served by a lightweight Docker container behind Nginx Proxy Manager, with a cookie-free self-hosted visit counter, a generated preview image for each project and a build checked by GitHub Actions on every push.

Highlights

  • FR / EN with automatic detection, translated URLs and hreflang
  • Page transitions and contextual cursor, prefers-reduced-motion respected
  • Standalone Docker behind Nginx Proxy Manager, on my Hetzner server
  • Lint and build checked by GitHub Actions on every push
Next projectDocsDesk →