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