feat(stack): grille complète (71 technos) en masonry centré + peaufinage UI
All checks were successful
Deploy production / build-deploy (push) Successful in 24s

Stack & icônes
- grille unique enrichie (+24 technos) : React, TypeORM, Apache, Gitea,
  GitLab, GitHub Actions, Vite, pnpm, Socket.io, Chart.js, Discord.js,
  Prisma, Sequelize, IntelliJ IDEA, VS Code, Windows, HubSpot, HTML5/CSS3…
- nouvelles catégories « Bases de données & ORM » et « Tests & Qualité »
- 21 icônes simple-icons + tracés monochromes custom VS Code, Windows,
  Playwright ; support du fill-rule dans TechIcon
- mise en page masonry (CSS columns) + titres et puces centrés

Contenu & UI
- Hero : retrait du badge « ouvert aux opportunités »
- About / Contact : reformulation orientée projets
- ProjectCard : statut « en développement »
- typographie : tirets cadratins → virgules (titres, OG, aria-labels)
- ajout du visuel public/images/logo/couverture.png
This commit is contained in:
Johan LEROY
2026-06-27 13:46:53 +02:00
parent 8b2d823fdf
commit 155ab2977f
12 changed files with 178 additions and 126 deletions

View File

@@ -4,7 +4,7 @@
c'est ici que ça se passe. Tout est typé.
============================================================ */
export type ProjectStatus = "live" | "archived" | "oss";
export type ProjectStatus = "live" | "dev" | "archived" | "oss";
export interface Project {
id: string;
@@ -53,9 +53,9 @@ export const profile = {
name: "Johan Leroy",
role: "Développeur fullstack",
lede:
"Je conçois et développe des applications web performantes, propres et scalables du front jusqu'à la mise en production. Basé à Nantes, profil « builder » : open-source, auto-hébergement, projets perso.",
"Je conçois et développe des applications web performantes, propres et scalables, du front jusqu'à la mise en production. Basé à Nantes, profil « builder » : open-source, auto-hébergement, projets perso.",
bio:
"Développeur fullstack passionné par les technologies modernes. J'aime construire des produits complets penser l'archi, soigner l'expérience, déployer et maintenir. J'expérimente en continu via mes projets perso, mes services auto-hébergés et l'open-source.",
"Développeur fullstack passionné par les technologies modernes, j'aime construire des produits complets : penser l'architecture, soigner l'expérience, déployer et maintenir. J'expérimente en continu via mes projets perso, mes services auto-hébergés et l'open-source.",
};
export const social = {
@@ -86,7 +86,7 @@ export const projects: Project[] = [
desc:
"Plateforme client + admin de gestion d'hébergement web et de domaines pour une association, bâtie sur WHMCS. Design system « Liquid Glass » clair/sombre.",
stack: ["Next.js 16", "React 19", "NestJS 11", "Tailwind 4", "shadcn/ui", "Redis", "WHMCS API"],
status: "live",
status: "dev",
link: "https://techos-asso.fr",
img: "/images/projets/techos.png",
imgDark: "/images/projets/techos-dark.png",
@@ -94,9 +94,9 @@ export const projects: Project[] = [
{
id: "amarea",
title: "Amarea Tattoo",
subtitle: "Site du studio de tatouage Amarea",
subtitle: "Site d'une tatoueuse indépendante",
desc:
"Site vitrine + gestion pour un studio de tatouage. Architecture découplée SPA + API REST avec gestion de médias.",
"Site vitrine + gestion pour une tatoueuse indépendante. Architecture découplée SPA + API REST avec gestion de médias.",
stack: ["Vue 3", "Vite", "NestJS 11", "TypeORM", "MariaDB", "Tailwind 4"],
status: "live",
link: "https://amarea-tattoo.fr",
@@ -180,7 +180,7 @@ export const experiences: Experience[] = [
company: "Almeria",
logo: "/images/entreprises/almeria.png",
role: "Développeur",
period: "20232025",
period: "20232025",
duration: "2 ans",
desc: "Conception et développement d'applications web et de logiciels d'intégration ERP.",
missions: [
@@ -193,8 +193,8 @@ export const experiences: Experience[] = [
{
company: "CEREMA",
logo: "/images/entreprises/cerema.png",
role: "Technicien évaluation mesure trafic & mobilité",
period: "20212023",
role: "Technicien évaluation, mesure trafic & mobilité",
period: "20212023",
duration: "2 ans",
desc: "Installation de capteurs et analyse de données de mobilité.",
missions: [
@@ -208,7 +208,7 @@ export const experiences: Experience[] = [
company: "Réseau SNCF",
logo: "/images/entreprises/sncf.png",
role: "Agent télécom",
period: "20192021",
period: "20192021",
duration: "2 ans",
desc:
"Maintenance des équipements de sonorisation, d'affichage et de téléphonie sur le réseau ferroviaire.",
@@ -255,20 +255,20 @@ export const experiences: Experience[] = [
export const formation: Formation[] = [
{
title: "Concepteur Développeur d'Applications",
school: "Campus ENI Nantes",
school: "Campus ENI, Nantes",
period: "Depuis 2023",
desc: "Conception & dév d'applications web/mobiles, architecture logicielle, gestion de projet.",
},
{
title: "BTS Systèmes Numériques",
school: "Saint Félix La Salle Nantes",
period: "20212023",
school: "Saint Félix La Salle, Nantes",
period: "20212023",
desc: "Systèmes électroniques & informatiques, informatique industrielle & réseaux.",
},
{
title: "BAC PRO Systèmes Numériques",
school: "Saint Félix La Salle Nantes",
period: "20182021",
school: "Saint Félix La Salle, Nantes",
period: "20182021",
desc: "Systèmes électroniques & réseaux, installation & maintenance.",
},
{
@@ -278,20 +278,16 @@ export const formation: Formation[] = [
},
];
export const stackMain: StackGroup[] = [
{ label: "Langages", items: ["TypeScript", "JavaScript", "Java", "Python", "PHP"] },
{ label: "Frameworks", items: ["NestJS", "Nuxt", "Next.js", "Vue.js", "Angular", "Tailwind CSS", "Astro"] },
{ label: "Bases de données", items: ["MariaDB", "MySQL", "PostgreSQL", "Redis"] },
{ label: "Outils & DevOps", items: ["Docker", "Git", "AWS", "Terraform", "NGINX", "Plesk"] },
{ label: "IDE & Éditeurs", items: ["WebStorm", "PhpStorm", "PyCharm", "Claude Code"] },
{ label: "Systèmes", items: ["Debian", "Ubuntu", "macOS"] },
];
export const stackSecondary: StackGroup[] = [
{ label: "Langages", items: ["C#", "C++", "Dart", "Kotlin"] },
{ label: "Frameworks & libs", items: ["Spring", "Symfony", "Express.js", "FastAPI", "Flutter", "GraphQL", "Vuetify", "Bootstrap"] },
{ label: "Bases de données", items: ["MongoDB", "SQLite"] },
{ label: "Services & outils", items: ["Firebase", "Swagger", "Postman", "Stripe"] },
/* Grille unique, groupée par catégorie (technos « cœur » d'abord, puis le reste). */
export const stack: StackGroup[] = [
{ label: "Langages", items: ["TypeScript", "JavaScript", "Java", "Python", "PHP", "C#", "C++", "Dart", "Kotlin", "HTML5", "CSS3"] },
{ label: "Frameworks & libs", items: ["NestJS", "Nuxt", "Next.js", "React", "Vue.js", "Angular", "Astro", "Tailwind CSS", "Spring", "Symfony", "Express.js", "FastAPI", "Flutter", "GraphQL", "Socket.io", "Chart.js", "Discord.js", "Vuetify", "Bootstrap"] },
{ label: "Bases de données & ORM", items: ["MariaDB", "MySQL", "PostgreSQL", "Redis", "MongoDB", "SQLite", "TypeORM", "Prisma", "Sequelize"] },
{ label: "Outils & DevOps", items: ["Docker", "Git", "Gitea", "GitLab", "GitHub Actions", "AWS", "Terraform", "NGINX", "Apache", "Vite", "pnpm", "Plesk"] },
{ label: "Tests & Qualité", items: ["Jest", "Vitest", "Playwright", "ESLint", "Prettier"] },
{ label: "Services & outils", items: ["Firebase", "Swagger", "Postman", "Stripe", "HubSpot"] },
{ label: "IDE & Éditeurs", items: ["WebStorm", "PhpStorm", "PyCharm", "IntelliJ IDEA", "VS Code", "Claude Code"] },
{ label: "Systèmes", items: ["Debian", "Ubuntu", "Windows", "macOS"] },
];
export const softTech = [
@@ -330,6 +326,5 @@ $ cat about.json
"name": "Johan Leroy",
"role": "Développeur fullstack",
"stack": ["TypeScript", "NestJS", "Nuxt", "Next.js"],
"location": "Nantes, France",
"status": "ouvert aux opportunités"
"location": "Nantes, France"
}`;