Personal portfolio website built with Vue 3 + Vite, fully data-driven and bilingual (FR/EN).
- Vue 3 (Composition API,
<script setup>) - Vue Router
- Pinia
- Tailwind CSS v4
- TypeScript
- Bilingual UI with persistent language toggle (French / English)
- Dark mode with persistent preference
- Responsive navigation with mobile menu and smooth scrolling
- Data-driven sections (Hero, About, Projects, CV, Contact, Footer)
- CV download from
public/cv.pdf - SEO metadata updated dynamically based on selected language
npm install
npm run devApp runs at http://localhost:5173 by default.
npm run dev— Start development servernpm run build— Type-check + production buildnpm run build-only— Production build onlynpm run preview— Preview production build locallynpm run type-check— Run Vue TypeScript checksnpm run lint— Run linters
Most personalization is done in src/data/:
src/data/personal.js- Name, tagline, bio, avatar, social links, CTA labels, skills, interests
- Language-specific variants (
*Enfields) avatarPositionto fine-tune image framing
src/data/projects.js- Project cards and links
src/data/cv.js- CV timeline entries (work/education)
src/data/i18n.js- UI labels and section copy for EN/FR
- Avatar image:
public/avatar.jpg - CV file:
public/cv.pdf
src/
components/
data/
router/
stores/
views/
- If language toggle changes text but not metadata, ensure JavaScript is enabled (metadata updates at runtime).
- If CV download opens HTML, verify the file exists at
public/cv.pdfand links use lowercase/cv.pdf.