---
import BaseLayout from '../layouts/BaseLayout.astro';
import Eyebrow from '../components/Eyebrow.astro';
import { Badge, Button } from '@unkn0wndo3s/nova-design-system';
import { breadcrumbLd, profilePageLd } from '../lib/seo';
import { getLocaleFromUrl, useTranslations, localizePath } from '../i18n';
import type { Localized } from '../data/projects';
const locale = getLocaleFromUrl(Astro.url);
const t = useTranslations(locale);
interface Step {
period: Localized;
role: Localized;
place: string;
detail: Localized;
}
const steps: Step[] = [
{
period: { fr: 'Sept. 2025 - Août 2026', en: 'Sept. 2025 - Aug. 2026' },
role: { fr: 'Développeur full-stack en alternance', en: 'Full-stack developer (apprenticeship)' },
place: 'Legrand France, Limoges',
detail: {
fr: "Développement du DAN, application web interne pour les ateliers de production : refonte du module de gestion des utilisateurs (Vue.js/TypeScript, export CSV) et du module de statistiques avec composants graphiques sur mesure. Back-end Node.js/Express.",
en: 'Development of DAN, an internal web app for production workshops: rework of the user management module (Vue.js/TypeScript, CSV export) and of the statistics module with custom chart components. Node.js/Express back-end.',
},
},
{
period: { fr: 'Avril - Août 2025', en: 'April - Aug. 2025' },
role: { fr: "Stage puis job d'été", en: 'Internship, then summer job' },
place: 'Legrand France, Limoges',
detail: {
fr: "Premiers travaux sur le DAN : montée en compétence sur la base de code, premières fonctionnalités livrées en production. L'expérience s'est prolongée en alternance sur la même application.",
en: 'First work on DAN: ramping up on the codebase, first features shipped to production. The experience continued as an apprenticeship on the same application.',
},
},
{
period: { fr: '2023 - 2026', en: '2023 - 2026' },
role: { fr: 'BUT MMI, parcours Développement Web (DWDI)', en: 'BUT MMI degree, Web Development track (DWDI)' },
place: 'IUT du Limousin',
detail: {
fr: "Formation en développement web et dispositifs interactifs : front-end, back-end, UX, gestion de projet. Diplôme obtenu en 2026.",
en: 'Training in web development and interactive systems: front-end, back-end, UX, project management. Graduating in 2026.',
},
},
];
interface Value {
title: Localized;
body: Localized;
}
const values: Value[] = [
{
title: { fr: 'Livrer, pas prototyper', en: 'Ship, not prototype' },
body: {
fr: 'Un projet est terminé quand il tourne en production avec sa CI. Mon design system est sur npm, mon infra héberge ce site : tout ce que je montre est réellement en service.',
en: 'A project is done when it runs in production with its CI. My design system is on npm, my infrastructure hosts this site: everything I show is actually in service.',
},
},
{
title: { fr: 'Du composant au serveur', en: 'From component to server' },
body: {
fr: "Je conçois l'interface, l'API qui la sert et la machine qui l'héberge. Cette vision complète évite les frictions entre front, back et ops.",
en: 'I design the interface, the API that serves it and the machine that hosts it. That end-to-end view removes friction between front, back and ops.',
},
},
{
title: { fr: 'Réutilisable par défaut', en: 'Reusable by default' },
body: {
fr: "Tokens, composants, pipelines : je factorise ce qui se répète. C'est ce qui m'a mené à construire Nova Design System plutôt que de copier-coller des styles.",
en: 'Tokens, components, pipelines: I factor out what repeats. That mindset is what led me to build Nova Design System instead of copy-pasting styles.',
},
},
];
const crumbs = [
{ name: t('nav.home'), url: localizePath('/', locale) },
{ name: t('nav.about'), url: localizePath('/about', locale) },
];
const pageUrl = new URL(Astro.url.pathname, Astro.site ?? 'https://louis-potevin.dev').href;
const jsonLd = [breadcrumbLd(crumbs), profilePageLd(pageUrl)];
---