Files
.profile/README.md
2026-07-03 08:01:23 +00:00

171 lines
12 KiB
Markdown

# 👋 Salut, moi c'est Johan
🎧 Dév le jour, DJ la nuit
💻 Développeur fullstack passionné par les technos modernes
🚀 J'aime créer des expériences web performantes, propres et scalables
📍 Basé à Nantes, France · 🌐 [johanleroy.fr](https://johanleroy.fr) · 💼 Dév fullstack @ Qualiobee
> 🦊 Bienvenue sur **mon forge perso**. Je code principalement ici, loin de Microsoft.
---
## 🧠 À propos de moi
- 🔭 Je bosse sur des projets en **NestJS 11**, **Nuxt 3**, **Next.js 16**, **Vue 3**, **MariaDB**, **TailwindCSS 4**
- ⚙️ Stack préférée : `NestJS` + `Nuxt` / `Next.js` + `TypeORM` + `MariaDB` + `Tailwind`
- ☁️ Infra AWS (ECS, Lambda, RDS, CloudFront, SES) pilotée en **Terraform**
- 🛠️ Reverse proxy & hébergement : `NGINX`, `Apache`, `Plesk`
- 🔐 Auth : `JWT` access+refresh, `OAuth2 PKCE`, cookies httpOnly, chiffrement AES-256-GCM
- 📨 Queues & temps réel : `BullMQ`, `Redis`, `Socket.IO`, `SQS`
- 🧩 J'aime structurer mes projets avec des archis propres (Strategy/Adapter, services découplés)
- 🎨 Fan de UI bien léchée : design systems glass, dark/light mode, animations douces, UX fluide
- 🏗️ Profil « builder » : open-source, **8+ services auto-hébergés**, projets perso en continu
- 🎵 DJ & passionné de tekno, mes projets web ont parfois un petit beat qui groove 😎
---
## 🚀 Mes projets
| Projet | Description | Stack | Lien |
|--------|-------------|-------|------|
| **Techos** | Plateforme client + admin de gestion d'hébergement web & domaines (WHMCS), design system « Liquid Glass » clair/sombre | `Next.js 16` · `NestJS 11` · `Tailwind 4` · `Redis` · `WHMCS` | [techos-asso.fr](https://techos-asso.fr) |
| **Amarea Tattoo** | Site vitrine + gestion d'un studio de tatouage, archi découplée SPA + API REST avec gestion de médias | `Vue 3` · `Vite` · `NestJS 11` · `TypeORM` · `MariaDB` | [amarea-tattoo.fr](https://amarea-tattoo.fr) |
| **Lidge** | Portail d'abonnements à mes services auto-hébergés (Cloud, Vault, Git) avec SSO, tickets & workflow d'accès | `Nuxt 3` · `NestJS 11` · `TypeORM` · `MariaDB` · `JWT` | [lidge.fr](https://lidge.fr) |
| **Arboretum** 🌱 | Outil **open-source** : dashboard pour piloter des worktrees git & des sessions d'agents IA, lancé en `npx git-arboretum` | `Node.js` · `Vue 3` · `TypeScript` | [git-arboretum.com](https://git-arboretum.com/) |
| **Bot Discord KSauce** | Bot communautaire Discord : commandes, modération & fonctionnalités sur-mesure | `Node.js` · `TypeScript` · `Discord.js` | [ksauce.lidge.fr](https://ksauce.lidge.fr/) |
| **Liberty Pour La Vie** | Site web complet pour l'association Liberty Pour La Vie | `Java` · `Spring Boot` · `Thymeleaf` · `MariaDB` | [libertypourlavie.fr](https://libertypourlavie.fr/) |
| **Mon Voisin Geek** | Site vitrine _(projet archivé)_ | `Angular` · `Express.js` · `MariaDB` | — |
---
## 🛠️ Technologies & Outils
### 🧑‍💻 Langages
![Java](https://img.shields.io/badge/-Java-007396?style=for-the-badge&logo=openjdk&logoColor=white)
![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)
![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)
![Python](https://img.shields.io/badge/-Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
![PHP](https://img.shields.io/badge/-PHP-777BB4?style=for-the-badge&logo=php&logoColor=white)
![C#](https://img.shields.io/badge/-C%23-239120?style=for-the-badge&logo=dotnet&logoColor=white)
![C++](https://img.shields.io/badge/-C++-00599C?style=for-the-badge&logo=cplusplus&logoColor=white)
![Dart](https://img.shields.io/badge/-Dart-0175C2?style=for-the-badge&logo=dart&logoColor=white)
![Kotlin](https://img.shields.io/badge/-Kotlin-7F52FF?style=for-the-badge&logo=kotlin&logoColor=white)
### 🧩 Frameworks & Libraries
![NestJS](https://img.shields.io/badge/-NestJS-E0234E?style=for-the-badge&logo=nestjs&logoColor=white)
![Next.js](https://img.shields.io/badge/-Next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white)
![React](https://img.shields.io/badge/-React-61DAFB?style=for-the-badge&logo=react&logoColor=black)
![Vue.js](https://img.shields.io/badge/-Vue.js-4FC08D?style=for-the-badge&logo=vuedotjs&logoColor=white)
![Nuxt](https://img.shields.io/badge/-Nuxt-00DC82?style=for-the-badge&logo=nuxt&logoColor=white)
![Angular](https://img.shields.io/badge/-Angular-DD0031?style=for-the-badge&logo=angular&logoColor=white)
![Astro](https://img.shields.io/badge/-Astro-BC52EE?style=for-the-badge&logo=astro&logoColor=white)
![Vite](https://img.shields.io/badge/-Vite-646CFF?style=for-the-badge&logo=vite&logoColor=white)
![Pinia](https://img.shields.io/badge/-Pinia-FFD859?style=for-the-badge&logoColor=black)
![Socket.IO](https://img.shields.io/badge/-Socket.IO-010101?style=for-the-badge&logo=socketdotio&logoColor=white)
![Vuetify](https://img.shields.io/badge/-Vuetify-1867C0?style=for-the-badge&logo=vuetify&logoColor=white)
![shadcn/ui](https://img.shields.io/badge/-shadcn%2Fui-000000?style=for-the-badge&logo=shadcnui&logoColor=white)
![Spring](https://img.shields.io/badge/-Spring-6DB33F?style=for-the-badge&logo=spring&logoColor=white)
![Express.js](https://img.shields.io/badge/-Express.js-000000?style=for-the-badge&logo=express&logoColor=white)
![Symfony](https://img.shields.io/badge/-Symfony-000000?style=for-the-badge&logo=symfony&logoColor=white)
![Flutter](https://img.shields.io/badge/-Flutter-02569B?style=for-the-badge&logo=flutter&logoColor=white)
![FastAPI](https://img.shields.io/badge/-FastAPI-009688?style=for-the-badge&logo=fastapi&logoColor=white)
![GraphQL](https://img.shields.io/badge/-GraphQL-E10098?style=for-the-badge&logo=graphql&logoColor=white)
![TailwindCSS](https://img.shields.io/badge/-TailwindCSS-06B6D4?style=for-the-badge&logo=tailwindcss&logoColor=white)
![Bootstrap](https://img.shields.io/badge/-Bootstrap-7952B3?style=for-the-badge&logo=bootstrap&logoColor=white)
### 🗄️ Bases de données
![MariaDB](https://img.shields.io/badge/-MariaDB-003545?style=for-the-badge&logo=mariadb&logoColor=white)
![MySQL](https://img.shields.io/badge/-MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white)
![SQL Server](https://img.shields.io/badge/-SQL%20Server-CC2927?style=for-the-badge&logoColor=white)
![PostgreSQL](https://img.shields.io/badge/-PostgreSQL-4169E1?style=for-the-badge&logo=postgresql&logoColor=white)
![SQLite](https://img.shields.io/badge/-SQLite-003B57?style=for-the-badge&logo=sqlite&logoColor=white)
![MongoDB](https://img.shields.io/badge/-MongoDB-47A248?style=for-the-badge&logo=mongodb&logoColor=white)
![Redis](https://img.shields.io/badge/-Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white)
### ☁️ Cloud & Infrastructure
![AWS](https://img.shields.io/badge/-AWS-232F3E?style=for-the-badge&logo=amazonwebservices&logoColor=white)
![Azure](https://img.shields.io/badge/-Azure-0078D4?style=for-the-badge&logoColor=white)
![Terraform](https://img.shields.io/badge/-Terraform-7B42BC?style=for-the-badge&logo=terraform&logoColor=white)
![AWS Lambda](https://img.shields.io/badge/-AWS%20Lambda-FF9900?style=for-the-badge&logo=awslambda&logoColor=white)
![Amazon ECS](https://img.shields.io/badge/-Amazon%20ECS-FF9900?style=for-the-badge&logo=amazonecs&logoColor=white)
![Firebase](https://img.shields.io/badge/-Firebase-FFCA28?style=for-the-badge&logo=firebase&logoColor=black)
### 🧰 Outils & DevOps
![Git](https://img.shields.io/badge/-Git-F05032?style=for-the-badge&logo=git&logoColor=white)
![Gitea](https://img.shields.io/badge/-Gitea-609926?style=for-the-badge&logo=gitea&logoColor=white)
![GitLab](https://img.shields.io/badge/-GitLab-FC6D26?style=for-the-badge&logo=gitlab&logoColor=white)
![Docker](https://img.shields.io/badge/-Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)
![CI/CD](https://img.shields.io/badge/-CI%2FCD-2088FF?style=for-the-badge&logo=githubactions&logoColor=white)
![Plesk](https://img.shields.io/badge/-Plesk-52BBE6?style=for-the-badge&logo=plesk&logoColor=white)
![Postman](https://img.shields.io/badge/-Postman-FF6C37?style=for-the-badge&logo=postman&logoColor=white)
![Swagger](https://img.shields.io/badge/-Swagger-85EA2D?style=for-the-badge&logo=swagger&logoColor=black)
![JWT](https://img.shields.io/badge/-JWT-000000?style=for-the-badge&logo=jsonwebtokens&logoColor=white)
![OAuth2](https://img.shields.io/badge/-OAuth2-3EAAAF?style=for-the-badge&logo=auth0&logoColor=white)
![Stripe](https://img.shields.io/badge/-Stripe-635BFF?style=for-the-badge&logo=stripe&logoColor=white)
![Jest](https://img.shields.io/badge/-Jest-C21325?style=for-the-badge&logo=jest&logoColor=white)
![Vitest](https://img.shields.io/badge/-Vitest-6E9F18?style=for-the-badge&logo=vitest&logoColor=white)
### 🖥️ IDE & Éditeurs
![PhpStorm](https://img.shields.io/badge/-PhpStorm-000000?style=for-the-badge&logo=phpstorm&logoColor=white)
![WebStorm](https://img.shields.io/badge/-WebStorm-000000?style=for-the-badge&logo=webstorm&logoColor=white)
![PyCharm](https://img.shields.io/badge/-PyCharm-000000?style=for-the-badge&logo=pycharm&logoColor=white)
![Eclipse](https://img.shields.io/badge/-Eclipse-2C2255?style=for-the-badge&logo=eclipseide&logoColor=white)
![VS Code](https://img.shields.io/badge/-VS%20Code-007ACC?style=for-the-badge&logoColor=white)
![Android Studio](https://img.shields.io/badge/-Android%20Studio-3DDC84?style=for-the-badge&logo=androidstudio&logoColor=white)
![Claude Code](https://img.shields.io/badge/-Claude%20Code-D97757?style=for-the-badge&logo=claude&logoColor=white)
### 🧱 Serveurs & Réseaux
![NGINX](https://img.shields.io/badge/-NGINX-009639?style=for-the-badge&logo=nginx&logoColor=white)
![Apache](https://img.shields.io/badge/-Apache-D22128?style=for-the-badge&logo=apache&logoColor=white)
### 💻 OS
![Windows](https://img.shields.io/badge/-Windows-0078D6?style=for-the-badge&logoColor=white)
![macOS](https://img.shields.io/badge/-macOS-000000?style=for-the-badge&logo=macos&logoColor=white)
![Debian](https://img.shields.io/badge/-Debian-A81D33?style=for-the-badge&logo=debian&logoColor=white)
![Ubuntu](https://img.shields.io/badge/-Ubuntu-E95420?style=for-the-badge&logo=ubuntu&logoColor=white)
---
## 🎧 Côté musique
Dév le jour, **DJ la nuit** 🌙
La **tekno** et la musique électronique, c'est mon échappatoire après le clavier — et ça déteint forcément sur mes projets : un petit beat qui groove n'est jamais bien loin 😎
🎶 **Mes mixs** → [soundcloud.com/skuuuu](https://soundcloud.com/skuuuu)
[![SoundCloud](https://img.shields.io/badge/-SoundCloud-FF5500?style=for-the-badge&logo=soundcloud&logoColor=white)](https://soundcloud.com/skuuuu)
![DJ](https://img.shields.io/badge/-DJ%20%2F%20Mix-1DB954?style=for-the-badge&logo=ableton-live&logoColor=white)
![Vinyl](https://img.shields.io/badge/-Musique%20électronique-8E44AD?style=for-the-badge&logo=applemusic&logoColor=white)
---
## ☕ Un petit café ?
Si mes projets ou mon travail open-source te sont utiles, tu peux m'offrir un café — ça fait toujours plaisir et ça alimente la prochaine nuit de code (et de mix) 🎶
[![Buy Me A Coffee](https://img.shields.io/badge/-Offrir%20un%20café-FFDD00?style=for-the-badge&logo=buymeacoffee&logoColor=black)](https://buymeacoffee.com/johanleroy)
---
## 📫 Me contacter
Tu veux collaborer ? Juste discuter ?
- ✉️ **Email** : contact@johanleroy.fr
- 🌐 **Site web / Portfolio** : [johanleroy.fr](https://johanleroy.fr)
- 💼 **LinkedIn** : [Johan Leroy](https://www.linkedin.com/in/johan-leroy-472409180/)
- 🐙 **Aussi sur GitHub** : [github.com/JohanLeroy](https://github.com/JohanLeroy)
---
> _"Code propre, sono sale." — Johan_ 🎶