← Back to projects

Portfolio

DockerMinIOPostgreSQLSvelteTypeScript
Portfolio

Personal bilingual (FR/EN) portfolio website built with SvelteKit, showcasing my projects and career timeline, backed by a full admin panel for content management.

Overview

Personal portfolio website built with SvelteKit (Svelte 5), designed as a full application combining a bilingual public site with a custom admin interface.

Features

  • Public pages: home, project list and detail, timeline (experience and education), contact form

  • Fully bilingual French/English site

  • Secure admin panel (session-based auth, Argon2 hashing) to manage projects, technologies, timeline, profile and messages

  • Rich text editor (Tiptap) for detailed project write-ups, with HTML sanitization (sanitize-html)

  • Image uploads to S3-compatible storage (MinIO)

  • Rate limiting on the admin login and the contact form

  • Email notifications for new contact messages

Tech stack

  • SvelteKit / Svelte 5, TypeScript

  • Tailwind CSS 4, Flowbite Svelte

  • PostgreSQL with Drizzle ORM

  • Zod for data validation

  • Vitest (unit tests) and Playwright (end-to-end tests)

Deployment

  • Containerized with Docker (multi-stage build, adapter-node)

  • Deployed behind Traefik (TLS) on a personal homelab

  • Continuous integration and deployment via GitLab CI/CD