diff --git a/README.md b/README.md index c2f90dc..fd58237 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # louis-potevin.dev -Professional portfolio of **Louis Potevin** — full-stack developer. +Professional portfolio of **Louis Potevin** - full-stack developer. Static multi-page website built with **Astro + TypeScript + Sass**, styled **exclusively** by the in-house design system **`@unkn0wndo3s/nova-design-system`** (tokens, components), featuring a 3D space background controlled via scrolling. @@ -28,9 +28,9 @@ compatibility with Astro 7 in its `peerDependencies`. The **`.npmrc`** All modifiable content is centralized. Values to be confirmed are marked with `TODO` in the code : -- **`src/data/site.ts`** — name, role, email, external links (Gitea, GitHub, +- **`src/data/site.ts`** - name, role, email, external links (Gitea, GitHub, npm, LinkedIn). In particular, verify : -- **`src/data/projects.ts`** — la liste des projets (les « stations »). +- **`src/data/projects.ts`** - la liste des projets (les « stations »). Chaque entrée : résumé, contexte, contributions, stack, liens. --- diff --git a/package.json b/package.json index 666538f..0ebe588 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "type": "module", "version": "1.0.0", "private": true, - "description": "Portfolio Louis Potevin — louis-potevin.dev. Astro + Nova Design System.", + "description": "Portfolio Louis Potevin - louis-potevin.dev. Astro + Nova Design System.", "engines": { "node": ">=22.12.0" }, diff --git a/src/components/scene/scene.ts b/src/components/scene/scene.ts index 5e16c95..aef41cd 100644 --- a/src/components/scene/scene.ts +++ b/src/components/scene/scene.ts @@ -1,13 +1,11 @@ import * as THREE from 'three'; -// ───────────────────────────────────────────────────────────────────────────── // Ambient space background: starfield, subtle nebula, and a slow-drifting, // slow-rotating asteroid. No scroll binding, no engine flames. // Slight pointer parallax. Respects prefers-reduced-motion. -// ───────────────────────────────────────────────────────────────────────────── export interface SceneHandle { - /** Kept for compatibility — no-op (no more impact/flame effect). */ + /** Kept for compatibility - no-op (no more impact/flame effect). */ setImpact(value: number): void; destroy(): void; } @@ -64,7 +62,7 @@ export function initScene(canvas: HTMLCanvasElement): SceneHandle { ); camera.position.set(0, 0, 18); - // ── Lighting (cold, consistent with Nova tokens) ─────────────────────────── + // Lighting (cold, consistent with Nova tokens) const ambient = new THREE.AmbientLight(0x16323a, 1.0); scene.add(ambient); const key = new THREE.DirectionalLight(COLORS.starCool, 0.9); @@ -74,7 +72,7 @@ export function initScene(canvas: HTMLCanvasElement): SceneHandle { rimLight.position.set(8, -3, 4); scene.add(rimLight); - // ── Starfield ────────────────────────────────────────────────────────────── + // Starfield const STAR_COUNT = prefersReduced ? 700 : 1700; const starGeo = new THREE.BufferGeometry(); const starPos = new Float32Array(STAR_COUNT * 3); @@ -106,7 +104,7 @@ export function initScene(canvas: HTMLCanvasElement): SceneHandle { const stars = new THREE.Points(starGeo, starMat); scene.add(stars); - // ── Nebula (soft sprites, pushed far into the background) ────────────────── + // Nebula (soft sprites, pushed far into the background) const nebula = new THREE.Group(); const nebTex = radialTexture('rgba(40,129,129,0.55)'); [ @@ -129,7 +127,7 @@ export function initScene(canvas: HTMLCanvasElement): SceneHandle { }); scene.add(nebula); - // ── Asteroid (cold rock, subtle halo) ────────────────────────────────────── + // Asteroid (cold rock, subtle halo) const asteroid = new THREE.Group(); const rockGeo = new THREE.IcosahedronGeometry(1.9, 2); const pos = rockGeo.attributes.position as THREE.BufferAttribute; @@ -171,7 +169,7 @@ export function initScene(canvas: HTMLCanvasElement): SceneHandle { asteroid.position.set(6.5, 4.5, -2); scene.add(asteroid); - // ── State & loop ─────────────────────────────────────────────────────────── + // State & loop const pointer = { x: 0, y: 0, tx: 0, ty: 0 }; let running = true; diff --git a/src/data/projects.ts b/src/data/projects.ts index f370495..3d79e74 100644 --- a/src/data/projects.ts +++ b/src/data/projects.ts @@ -1,7 +1,5 @@ -// ───────────────────────────────────────────────────────────────────────────── -// Projects — real content. Edit freely. +// Projects - real content. Edit freely. // `icon` matches a simple-icons-astro component (using PascalCase elsewhere). -// ───────────────────────────────────────────────────────────────────────────── export type ProjectStatus = 'live' | 'maintenu' | 'archive' | 'r&d'; @@ -32,8 +30,8 @@ export const projects: Project[] = [ slug: 'nova-design-system', designation: '01', title: 'Nova Design System', - tagline: 'Astro component library — tokens, accessibility, npm distribution.', - period: '2026 — ongoing', + tagline: 'Astro component library - tokens, accessibility, npm distribution.', + period: '2026 - ongoing', role: 'Author · maintainer', status: 'maintenu', featured: true, @@ -65,7 +63,7 @@ export const projects: Project[] = [ designation: '02', title: 'Self-hosted Infrastructure & Deployment', tagline: 'Containerized services, CI/CD, and secured ingress on a fully controlled infrastructure.', - period: '2025 — ongoing', + period: '2025 - ongoing', role: 'Design & operations', status: 'live', featured: true, @@ -120,9 +118,9 @@ export const projects: Project[] = [ { slug: 'rust-file-organizer', designation: '04', - title: 'File Organizer — Java to Rust', + title: 'File Organizer - Java to Rust', tagline: 'File sorting tool, currently being ported from Java to Rust.', - period: '2025 — ongoing', + period: '2025 - ongoing', role: 'Development', status: 'r&d', featured: false, @@ -147,7 +145,7 @@ export const projects: Project[] = [ designation: '05', title: 'LLM Training & Inference', tagline: 'Small language model trained on a Reddit conversation dataset.', - period: '2025 — ongoing', + period: '2025 - ongoing', role: 'Development', status: 'r&d', featured: false, diff --git a/src/data/site.ts b/src/data/site.ts index 2dd522a..0677d4b 100644 --- a/src/data/site.ts +++ b/src/data/site.ts @@ -5,7 +5,7 @@ export const site = { domain: "louis-potevin.dev", location: "Limoges · Nouvelle-Aquitaine", // Job Search - availability: "Permanent contract (CDI) — September 2026", + availability: "Permanent contract (CDI) - September 2026", mobility: "Anywhere in France, on-site or remote", // Contact email: "contact@louis-potevin.dev", diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index f265fde..6358a27 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -15,7 +15,7 @@ export interface Props { } const { - title = 'Louis Potevin — Full-stack Developer (front, back, web)', + title = 'Louis Potevin - Full-stack Developer (front, back, web)', description = "Louis Potevin, full-stack web developer: front-end, back-end, TypeScript, Astro, Node. Available for a permanent contract (CDI) starting September 2026, anywhere in France or remote.", keywords = [], } = Astro.props; @@ -91,7 +91,7 @@ const personLd = { const siteLd = { '@context': 'https://schema.org', '@type': 'WebSite', - name: `${site.name} — Portfolio`, + name: `${site.name} - Portfolio`, url: Astro.site?.href ?? 'https://louis-potevin.dev', inLanguage: ['en-US', 'fr-FR'], }; @@ -113,7 +113,7 @@ const siteLd = { - + diff --git a/src/pages/about.astro b/src/pages/about.astro index 834d189..33e428c 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -16,23 +16,23 @@ import { import { Send, Mail } from '@lucide/astro'; import { site } from '../data/site'; -const title = 'About — Louis Potevin, full-stack web developer / développeur full-stack'; +const title = 'About - Louis Potevin, full-stack web developer / développeur full-stack'; const description = "Louis Potevin, full-stack web developer with a BUT MMI degree (DWDI track). 18 months of professional experience at Legrand France. Available for a permanent contract (CDI), anywhere in France or remote."; const parcours = [ { - year: '2024 — 2026', + year: '2024 - 2026', title: 'Professional Experience · Legrand France', body: "18 months total: 12 weeks of internship, 1 month on a fixed-term contract (CDD), followed by 1 year of work-study apprenticeship. Web development on a production-ready internal corporate application.", }, { - year: '2024 — 2026', - title: 'BUT MMI — DWDI Track · IUT du Limousin', + year: '2024 - 2026', + title: 'BUT MMI - DWDI Track · IUT du Limousin', body: "Multimedia and Internet Job Degrees (Métiers du Multimédia et de l'Internet), specializing in Web Development and Interactive Devices (DWDI). Degree completed in 2026.", }, { - year: '2026 — ongoing', + year: '2026 - ongoing', title: 'Personal Projects', body: "Designing an open-source design system published on npm, managing a self-hosted server infrastructure, and building system tools with Rust and Python.", }, diff --git a/src/pages/contact.astro b/src/pages/contact.astro index f585c08..4da1340 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -15,7 +15,7 @@ import { Send, Mail } from '@lucide/astro'; import BrandLinkedin from '../components/BrandLinkedin.astro'; import { site } from '../data/site'; -const title = 'Contact — Louis Potevin'; +const title = 'Contact - Louis Potevin'; const description = 'Contact Louis Potevin, full-stack web developer. Available for permanent positions (CDI) starting September 2026, anywhere in France or remote.'; @@ -46,7 +46,7 @@ const directLinks = [
- {/* ── Form (Nova components) ── */} + {/* Form (Nova components) */}

Message

@@ -95,7 +95,7 @@ const directLinks = [
- {/* ── Direct Links ── */} + {/* Direct Links */}