Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e45432990c | ||
|
|
3f6bc571d3 | ||
|
|
3c4dab88a5 | ||
|
|
aceb7e2c70 | ||
|
|
e2f7ea4546 | ||
|
|
e13a4b1bb5 | ||
|
|
1c01cb20eb |
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.1.0] — 2026-07-23
|
||||
|
||||
Profile geography moved to the Loire-Atlantique · Vendée · Morbihan zone, and
|
||||
the CV restructured.
|
||||
|
||||
### Changed
|
||||
- Landing profile block: `Zone` (Loire-Atlantique · Vendée · Morbihan) replaces
|
||||
the former `Localisation actuelle`; every mention of Yerres and of the planned
|
||||
Nantes relocation removed, including the ZenQuality timeline entry.
|
||||
- Presence stated as an explicit order of preference on both surfaces — full
|
||||
remote, then hybrid or on-site inside the zone, Paris only as a fallback and
|
||||
capped at 1–2 days per month.
|
||||
- CV restructured: technical skills promoted above professional experience,
|
||||
"Centres d'intérêt" dropped, markup trimmed 656 → 424 lines.
|
||||
- `CLAUDE.md` content rules: geography note rewritten to the zone model, with an
|
||||
explicit guard against reintroducing Yerres.
|
||||
|
||||
### Added
|
||||
- `CV_Bastien_CHANOT_General.{html,pdf}` — general CV variant kept beside the
|
||||
served one. Repo-only: not linked from the landing, not in the Dockerfile
|
||||
COPY whitelist.
|
||||
|
||||
## [1.0.0] — 2026-07-06
|
||||
|
||||
First tagged release. Landing page + CV live at https://bchanot.fr, served by
|
||||
|
||||
@@ -122,9 +122,10 @@ Forbidden:
|
||||
- Profile state, including job search context, must stay consistent across
|
||||
index.html and CV. Currently: looking for **CDI** in embedded / systems
|
||||
software first; freelance missions (ZenQuality) in parallel.
|
||||
- Geography: Yerres (91) currently; relocation to the Nantes area (Pays de
|
||||
la Loire) planned mid-term; full remote preferred, hybrid possible in
|
||||
Nantes, or hybrid 1–2 days/month if Paris.
|
||||
- Geography: zone **Loire-Atlantique · Vendée · Morbihan**. Never mention
|
||||
Yerres or the Essonne. Presence, in order of preference: full remote →
|
||||
hybrid in the zone → on-site in the zone → Paris only as a fallback, and
|
||||
only hybrid at 1–2 days per month maximum.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,424 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
=====================================================================
|
||||
CV MAÎTRE — Bastien Chanot
|
||||
Personnalisation par offre : édite UNIQUEMENT les 3 zones marquées
|
||||
▼ ZONE 1 : TITRE (la ligne sous le nom)
|
||||
▼ ZONE 2 : ACCROCHE (2-3 lignes d'objectif, à adapter à l'entreprise)
|
||||
▼ ZONE 3 : ORDRE (réordonne les <li> / blocs compétences selon l'offre)
|
||||
Le reste (faits, dates, réalisations) ne bouge pas.
|
||||
TODO une fois pour toutes : remplace les URLs LinkedIn / GitHub réelles
|
||||
dans la ligne de contact (cherche "TODO-LIENS").
|
||||
Palette reprise du CV v2.
|
||||
=====================================================================
|
||||
-->
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Bastien Chanot — CV</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{
|
||||
--ink:#14201a;
|
||||
--paper:#eeebe0;
|
||||
--band:#0d1b12;
|
||||
--band2:#16301f;
|
||||
--name:#ffffff;
|
||||
--sage:#61ab7f;
|
||||
--band-muted:#b7bbb8;
|
||||
--green-deep:#1b5e3b;
|
||||
--muted:#586b60;
|
||||
--rule:#d6d2c3;
|
||||
--chip-bg:#e6e2d4;
|
||||
--chip-bd:#cfcabb;
|
||||
--chip-ink:#1b5e3b;
|
||||
}
|
||||
|
||||
*{ box-sizing:border-box; margin:0; padding:0; }
|
||||
html{ background:#dcdfda; }
|
||||
|
||||
body{
|
||||
font-family:"IBM Plex Sans", system-ui, "Segoe UI", Roboto, sans-serif;
|
||||
color:var(--ink);
|
||||
font-size:10.4pt;
|
||||
line-height:1.42;
|
||||
-webkit-font-smoothing:antialiased;
|
||||
}
|
||||
|
||||
.page{
|
||||
background:var(--paper);
|
||||
width:210mm;
|
||||
min-height:297mm;
|
||||
margin:24px auto;
|
||||
padding:0;
|
||||
box-shadow:0 8px 40px rgba(0,0,0,.18);
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
/* ---------- HEADER BAND (full-bleed) ---------- */
|
||||
.band{
|
||||
background:linear-gradient(125deg, var(--band) 0%, var(--band2) 100%);
|
||||
padding:11mm 14mm 8mm;
|
||||
}
|
||||
.head{
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
align-items:flex-start;
|
||||
gap:18px;
|
||||
}
|
||||
.name{
|
||||
font-size:26pt;
|
||||
font-weight:700;
|
||||
letter-spacing:-.02em;
|
||||
line-height:1;
|
||||
color:var(--name);
|
||||
}
|
||||
.name em{ font-style:normal; color:var(--sage); }
|
||||
.title{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:9.2pt;
|
||||
font-weight:500;
|
||||
letter-spacing:.05em;
|
||||
color:var(--sage);
|
||||
text-transform:uppercase;
|
||||
margin-top:7px;
|
||||
}
|
||||
.contact{
|
||||
text-align:right;
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.1pt;
|
||||
line-height:1.75;
|
||||
color:var(--band-muted);
|
||||
white-space:nowrap;
|
||||
}
|
||||
.contact a{ color:var(--sage); text-decoration:none; }
|
||||
.contact .strong{ color:var(--name); font-weight:500; }
|
||||
|
||||
/* ---------- CONTENT WRAPPER ---------- */
|
||||
.content{ padding:13px 14mm 0; }
|
||||
|
||||
.status{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.2pt;
|
||||
font-weight:500;
|
||||
letter-spacing:.04em;
|
||||
color:var(--sage);
|
||||
margin-top:6px;
|
||||
}
|
||||
.avail{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.3pt;
|
||||
color:var(--muted);
|
||||
margin:2px 0 12px 0;
|
||||
}
|
||||
.avail b{ color:var(--green-deep); font-weight:600; }
|
||||
|
||||
/* ---------- PROFIL ---------- */
|
||||
.profil{ margin-top:13px;
|
||||
font-size:10.2pt;
|
||||
line-height:1.5;
|
||||
color:#22302a;
|
||||
border-left:3px solid var(--green-deep);
|
||||
padding-left:12px;
|
||||
margin:0 0 15px 0;
|
||||
max-width:172mm;
|
||||
}
|
||||
.profil strong{ color:var(--green-deep); font-weight:600; }
|
||||
|
||||
/* ---------- SECTION HEADERS ---------- */
|
||||
.sec{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:10px;
|
||||
margin:0 0 9px 0;
|
||||
break-after:avoid;
|
||||
}
|
||||
.sec h2{
|
||||
font-size:10.5pt;
|
||||
font-weight:600;
|
||||
letter-spacing:.13em;
|
||||
text-transform:uppercase;
|
||||
color:var(--ink);
|
||||
white-space:nowrap;
|
||||
}
|
||||
.sec .tok{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8pt;
|
||||
color:var(--green-deep);
|
||||
font-weight:500;
|
||||
}
|
||||
.sec .line{ flex:1; height:1px; background:var(--rule); }
|
||||
|
||||
section{ margin-bottom:14px; }
|
||||
|
||||
/* ---------- COMPÉTENCES ---------- */
|
||||
.skills{ margin-left:2px; }
|
||||
.skill-row{
|
||||
display:grid;
|
||||
grid-template-columns:34mm 1fr;
|
||||
gap:8px;
|
||||
padding:2.5px 0;
|
||||
align-items:baseline;
|
||||
}
|
||||
.skill-row + .skill-row{ border-top:1px solid var(--rule); }
|
||||
.skill-k{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.2pt;
|
||||
font-weight:500;
|
||||
color:var(--green-deep);
|
||||
letter-spacing:.01em;
|
||||
}
|
||||
.skill-v{ font-size:9.6pt; color:#22302a; }
|
||||
.skill-v .sep{ color:var(--chip-bd); padding:0 1px; }
|
||||
|
||||
/* ---------- EXPÉRIENCE ---------- */
|
||||
.entry{ margin-bottom:11px; }
|
||||
.entry-top, .entry-role{ break-after:avoid; }
|
||||
.entry-top{
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
align-items:baseline;
|
||||
gap:12px;
|
||||
}
|
||||
.entry-co{ font-size:12pt; font-weight:600; color:var(--ink); }
|
||||
.entry-date{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.4pt;
|
||||
color:var(--muted);
|
||||
white-space:nowrap;
|
||||
}
|
||||
.entry-role{
|
||||
font-size:9.7pt;
|
||||
color:var(--green-deep);
|
||||
font-weight:500;
|
||||
margin:1px 0 5px;
|
||||
}
|
||||
.entry-role .meta{ color:var(--muted); font-weight:400; }
|
||||
ul.bul{ list-style:none; orphans:2; widows:2; }
|
||||
ul.bul li{
|
||||
list-style:"▸ ";
|
||||
margin-left:13px;
|
||||
margin-bottom:3.5px;
|
||||
font-size:9.7pt;
|
||||
line-height:1.4;
|
||||
color:#212d27;
|
||||
break-inside:avoid;
|
||||
}
|
||||
|
||||
ul.bul li b{ color:var(--ink); font-weight:600; }
|
||||
code.k{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.4pt;
|
||||
background:var(--chip-bg);
|
||||
color:var(--chip-ink);
|
||||
border:1px solid var(--chip-bd);
|
||||
padding:.5px 4px;
|
||||
border-radius:3px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
/* ---------- PROJETS / FORMATION grid ---------- */
|
||||
.two{ display:grid; grid-template-columns:1fr 1fr; gap:9px 22px; }
|
||||
.blk-h{ font-size:10.2pt; font-weight:600; color:var(--ink); }
|
||||
.blk-sub{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8pt; color:var(--muted); margin:1px 0 4px;
|
||||
}
|
||||
.blk p{ font-size:9.4pt; line-height:1.4; color:#28332d; }
|
||||
.blk a{ color:var(--green-deep); text-decoration:none; }
|
||||
|
||||
.langs{ font-size:9.8pt; color:#22302a; margin-left:2px; }
|
||||
.langs b{ color:var(--ink); font-weight:600; }
|
||||
.langs .sep{ color:var(--chip-bd); padding:0 6px; }
|
||||
|
||||
/* ---------- SCREEN FOOTER BAND ---------- */
|
||||
.screen-foot{
|
||||
background:var(--band);
|
||||
color:#7e8b84;
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:7.6pt;
|
||||
padding:7px 14mm;
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
margin-top:18px;
|
||||
}
|
||||
.screen-foot a, .pdf-foot a{ color:inherit; text-decoration:none; }
|
||||
|
||||
/* ---------- PDF BACKDROP + FOOTER ---------- */
|
||||
.bg{ display:none; }
|
||||
.pdf-foot{ display:none; }
|
||||
|
||||
/* ---------- PRINT / PDF ---------- */
|
||||
/* marges : 14mm haut (sauf p.1) · 0 L/R (bleed) · 13mm bas (réserve footer) */
|
||||
@page{ size:A4; margin:14mm 0 13mm 0; }
|
||||
@page :first{ margin-top:0; }
|
||||
@media print{
|
||||
html{ background:#fff; }
|
||||
.two{ display:block; }
|
||||
.two .blk{ margin-bottom:7px; break-inside:avoid; }
|
||||
.page{ width:auto; min-height:0; margin:0; box-shadow:none; overflow:visible; background:transparent; }
|
||||
.screen-foot{ display:none; }
|
||||
/* fond crème pleine feuille, répété chaque page (déborde dans les marges) */
|
||||
.bg{
|
||||
display:block; position:fixed;
|
||||
top:-14mm; bottom:-13mm; left:0; right:0;
|
||||
background:var(--paper);
|
||||
z-index:-1;
|
||||
}
|
||||
.pdf-foot{
|
||||
display:flex;
|
||||
position:fixed;
|
||||
bottom:-13mm; left:0; right:0;
|
||||
height:9mm;
|
||||
align-items:center;
|
||||
justify-content:space-between;
|
||||
padding:0 14mm;
|
||||
background:var(--band);
|
||||
color:#8a968f;
|
||||
font-family:"IBM Plex Mono", monospace;
|
||||
font-size:7.4pt;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<div class="bg"></div>
|
||||
|
||||
<!-- ===== HEADER BAND ===== -->
|
||||
<div class="band">
|
||||
<header class="head">
|
||||
<div>
|
||||
<div class="name">Bastien <em>Chanot</em></div>
|
||||
<!-- ▼ ZONE 1 : TITRE — adapte au poste visé (format court, séparé par ·) -->
|
||||
<div class="title">Développeur Systèmes & Backend · C · Rust · Linux</div>
|
||||
<div class="status">CDI · disponible</div>
|
||||
<!-- ▲ ZONE 1 -->
|
||||
</div>
|
||||
<div class="contact">
|
||||
<a href="tel:+33778822297" class="strong">+33 7 78 82 22 97</a><br>
|
||||
<a href="mailto:bastien@bchanot.fr">bastien@bchanot.fr</a><br>
|
||||
<a href="https://bchanot.fr">bchanot.fr</a> · <a href="https://git.bchanot.fr/bchanot">git.bchanot.fr</a><br>
|
||||
<!-- TODO-LIENS : remplace par tes URLs réelles -->
|
||||
<a href="https://www.linkedin.com/in/bastien-chanot-4075a0a3/">linkedin.com/in/bastien-chanot</a><br><a href="https://github.com/bchanot">github.com/bchanot</a><br>
|
||||
Loire-Atlantique · Vendée · Morbihan<br>full remote ou hybride<br>Permis B & A
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
|
||||
<!-- ===== CONTENT ===== -->
|
||||
<div class="content">
|
||||
|
||||
<!-- ▼ ZONE 2 : ACCROCHE — réécris 2-3 lignes orientées vers l'entreprise / le poste -->
|
||||
<p class="profil">
|
||||
Développeur <strong>systèmes & backend</strong>, 7 ans en <strong>C et Rust sur Linux bare-metal</strong>. Du <strong>module kernel</strong> au backend temps réel : drivers, conteneurs (Docker / LXC / QEMU), exploitation d'une <strong>fleet GPU bare-metal</strong> en production, automatisation et CI/CD. Compréhension globale de la stack, du matériel au service.
|
||||
</p>
|
||||
<!-- ▲ ZONE 2 -->
|
||||
|
||||
<!-- ================= COMPÉTENCES ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Compétences techniques</h2><span class="line"></span></div>
|
||||
<!-- ▼ ZONE 3a : réordonne les lignes selon l'offre -->
|
||||
<div class="skills">
|
||||
<div class="skill-row"><div class="skill-k">Langages</div><div class="skill-v">C <span class="sep">·</span> Rust <span class="sep">·</span> C++ <span class="sep">·</span> Bash <span class="sep">·</span> Python <span class="sep">·</span> Java (AOSP/Android)</div></div>
|
||||
<div class="skill-row"><div class="skill-k">Systèmes & Embarqué</div><div class="skill-v">Linux kernel drivers <span class="sep">·</span> AOSP <span class="sep">·</span> ARM / x86 <span class="sep">·</span> GPIO <span class="sep">·</span> NFC <span class="sep">·</span> cross-compilation GCC <span class="sep">·</span> systemd <span class="sep">·</span> SELinux</div></div>
|
||||
<div class="skill-row"><div class="skill-k">Conteneurs / Virtu.</div><div class="skill-v">Docker <span class="sep">·</span> LXC / LXD <span class="sep">·</span> QEMU <span class="sep">·</span> cgroups <span class="sep">·</span> namespaces</div></div>
|
||||
<div class="skill-row"><div class="skill-k">Cloud & Infra</div><div class="skill-v">AWS (EC2, g4dn bare-metal, IAM, S3, CloudWatch) <span class="sep">·</span> Scaleway <span class="sep">·</span> OVH / Hetzner <span class="sep">·</span> Nginx</div></div>
|
||||
<div class="skill-row"><div class="skill-k">DevOps & Outils</div><div class="skill-v">Git <span class="sep">·</span> GitHub Actions <span class="sep">·</span> GitLab CI <span class="sep">·</span> CI/CD <span class="sep">·</span> Claude Code (agents/skills custom) <span class="sep">·</span> N8N</div></div>
|
||||
</div>
|
||||
<!-- ▲ ZONE 3a -->
|
||||
</section>
|
||||
|
||||
<!-- ================= EXPÉRIENCE ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Expérience professionnelle</h2><span class="line"></span></div>
|
||||
|
||||
<div class="entry">
|
||||
<div class="entry-top"><div class="entry-co">ZenQuality</div><div class="entry-date">2026 — présent</div></div>
|
||||
<div class="entry-role">Développeur indépendant · Infra & dév web <span class="meta">· zenquality.fr</span></div>
|
||||
<ul class="bul">
|
||||
<li>Déployé et opéré en production l'<b>infrastructure auto-hébergée</b> (uptime continu) en conteneurisant une stack <code class="k">Astro</code> <code class="k">React</code> <code class="k">PHP 8</code> <code class="k">PostgreSQL</code> sur VPS <code class="k">Scaleway</code>, avec pipeline de déploiement automatisé.</li>
|
||||
<li>Livré <b>5 projets clients de bout en bout</b> depuis avril 2026 — conception, intégration, déploiement, hébergement et support continu.</li>
|
||||
<li>Réalisé des <b>audits techniques</b> (Core Web Vitals, Schema.org) et la <b>mise en conformité légale</b> (RGPD, CGV B2B/B2C, médiateur CM2C) pour des PME — plan d'action sur 12 sprints.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="entry">
|
||||
<div class="entry-top"><div class="entry-co">CareGame</div><div class="entry-date">2019 — 2025</div></div>
|
||||
<div class="entry-role">Développeur logiciel · Systèmes & Backend <span class="meta">· Paris · full remote dès 2020</span></div>
|
||||
<!-- ▼ ZONE 3b : remonte les bullets les plus alignés avec l'offre -->
|
||||
<ul class="bul">
|
||||
<li>Conçu et maintenu les <b>modules kernel Linux en C</b> (x86 / ARM) assurant la communication bidirectionnelle hôte ↔ instances AOSP conteneurisées — drivers d'interface, brique critique du pipeline d'exécution serveur.</li>
|
||||
<li>Co-développé le <b>backend Rust</b> orchestrant le cycle de vie des conteneurs AOSP (<code class="k">WebSocket</code> temps réel clients ↔ instances, scheduling sur la fleet GPU, intégration <code class="k">Docker</code> + <code class="k">LXC</code>) — support de <b>plusieurs centaines de joueurs simultanés</b>.</li>
|
||||
<li>Porté la densité de production à <b>32 sessions de jeu AAA stables par serveur</b> en concevant l'isolation <b>CPU/GPU par session</b> — adaptation de modules GPU <code class="k">Nvidia</code>, partitionnement 2 cœurs/session (physiques et émulés), sérialisation des accès concurrents sur zones GPU partagées.</li>
|
||||
<li>Architecturé et exploité une <b>fleet GPU bare-metal</b> <code class="k">AWS g4dn.metal</code> (8× T4, 64 vCPU, ~20 serveurs en pic) servant plusieurs centaines de joueurs en parallèle — isolation 2 cœurs CPU/session, ramdisk I/O (Asphalt 9 : 3 sessions / T4).</li>
|
||||
<li>Industrialisé jusqu'en production un <b>PoC LXD + Docker</b> issu d'une R&D Nvidia — débogage kernel/conteneur, performance validée par les équipes Nvidia comme dépassant le scope initial du PoC.</li>
|
||||
<li>Collaboré techniquement en <b>anglais</b> avec <b>Canonical</b> (Anbox, builds LXC/LXD non commerciaux, remontée bugs et feature requests) et <b>Ampere Computing</b> (benchmark de serveurs ARM pré-commerciaux pour évaluation de migration de fleet).</li>
|
||||
<li>Automatisé l'installation des jeux AOSP et la persistance des sauvegardes (fusion Android Backup + scripts custom couvrant DRM et données externes) et développé un <b>outil d'orchestration Bash modulaire (1000+ lignes)</b> appelé par la CI et le backend Rust.</li>
|
||||
<li>Atteint une <b>latence compatible gameplay AAA temps réel</b> en développant les virtual input devices AOSP en <code class="k">Java</code> (touchscreen, gamepad) sur le pipeline complet frontend → backend Rust → drivers hôtes → injection AOSP.</li>
|
||||
</ul>
|
||||
<!-- ▲ ZONE 3b -->
|
||||
</div>
|
||||
|
||||
<div class="entry">
|
||||
<div class="entry-top"><div class="entry-co">Deewee</div><div class="entry-date">2017</div></div>
|
||||
<div class="entry-role">Développeur C · Système embarqué <span class="meta">· Ivry-sur-Seine · stage 42 (6 mois) puis CDD (4 mois)</span></div>
|
||||
<ul class="bul">
|
||||
<li>Développé en <b>C</b> le logiciel embarqué d'un boîtier connecté <code class="k">Orange Pi</code> (Debian ARM) interceptant le flux <b>ESC/POS</b> d'une imprimante thermique pour générer le PNG du ticket et le transférer en WiFi direct vers mobile.</li>
|
||||
<li>Intégré le matériel : <b>GPIO</b> physique (bouton + timeout), hotspot WiFi embarqué avec appairage automatique par diffusion <b>NFC</b> des credentials.</li>
|
||||
<li>Travaillé en cycle court sur un prototype fonctionnel — cross-compilation ARM, débogage sur cible, itérations rapides entre intégration matérielle et logiciel embarqué.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ================= PROJETS ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Projets & réalisations</h2><span class="line"></span></div>
|
||||
<div class="two">
|
||||
<div class="blk">
|
||||
<div class="blk-h">Homelab — infrastructure personnelle</div>
|
||||
<div class="blk-sub">en continu</div>
|
||||
<p>Auto-hébergement Git / DNS / VPN / SMB — NAS Asustor, WireGuard site-to-site, Pi-hole, segmentation réseau, hardening fail2ban, gocryptfs sur dossiers sensibles.</p>
|
||||
</div>
|
||||
<div class="blk">
|
||||
<div class="blk-h">Code source & projets persos</div>
|
||||
<div class="blk-sub"><a href="https://git.bchanot.fr/bchanot">git.bchanot.fr/bchanot</a></div>
|
||||
<p>Serveur Git auto-hébergé en production. Configuration Claude Code (agents/skills custom), dotfiles, projets bas-niveau C / Rust. Mirror automatique vers GitHub via push hook.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ================= FORMATION ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Formation</h2><span class="line"></span></div>
|
||||
<div class="two">
|
||||
<div class="blk">
|
||||
<div class="blk-h">École 42 — programmation informatique</div>
|
||||
<div class="blk-sub">2015 — 2019 · Clichy</div>
|
||||
<p>Kernel / systèmes (ft_linux, kfs-1, drivers, malloc), bas niveau (nm, 42sh POSIX, ft_ls), sécurité & algorithmie (snow crash, ft_ssl_md5, lem-in).</p>
|
||||
</div>
|
||||
<div class="blk">
|
||||
<div class="blk-h">TSRIT — Next Formation</div>
|
||||
<div class="blk-sub">2013 — 2015 · Vincennes · Félicitations du jury</div>
|
||||
<p>BTS Technicien Supérieur Réseaux & Télécoms. Socle réseau (OSI, TCP/IP), administration Linux / Windows Server, virtualisation.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ================= LANGUES ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Langues</h2><span class="line"></span></div>
|
||||
<div class="langs"><b>Anglais</b> C2 <span class="sep">·</span> <b>Espagnol</b> B1 <span class="sep">·</span> <b>Français</b> natif</div>
|
||||
</section>
|
||||
|
||||
</div><!-- /content -->
|
||||
|
||||
<div class="screen-foot"><a href="https://bchanot.fr">bchanot.fr</a><span>Bastien Chanot · CV 2026</span></div>
|
||||
<div class="pdf-foot"><a href="https://bchanot.fr">bchanot.fr</a><span>Bastien Chanot · CV 2026</span></div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
+324
-556
@@ -1,655 +1,423 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
=====================================================================
|
||||
CV MAÎTRE — Bastien Chanot
|
||||
Personnalisation par offre : édite UNIQUEMENT les 3 zones marquées
|
||||
▼ ZONE 1 : TITRE (la ligne sous le nom)
|
||||
▼ ZONE 2 : ACCROCHE (2-3 lignes d'objectif, à adapter à l'entreprise)
|
||||
▼ ZONE 3 : ORDRE (réordonne les <li> / blocs compétences selon l'offre)
|
||||
Le reste (faits, dates, réalisations) ne bouge pas.
|
||||
TODO une fois pour toutes : remplace les URLs LinkedIn / GitHub réelles
|
||||
dans la ligne de contact (cherche "TODO-LIENS").
|
||||
Palette reprise du CV v2.
|
||||
=====================================================================
|
||||
-->
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Bastien Chanot — CV</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&family=Fraunces:ital,wght@0,700;1,300&family=DM+Sans:wght@400;500&display=swap" rel="stylesheet">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{
|
||||
/* Zones sombres (header, footer) */
|
||||
--dark: #0d1b12;
|
||||
--dark-mid: #183325;
|
||||
|
||||
/* Échelle verte — même teinte, 5 niveaux */
|
||||
--g900: #0e3320; /* texte sur fond clair : très fort */
|
||||
--g700: #1b5e3b; /* titres section, rôles, accroches */
|
||||
--g500: #2d7a4f; /* bordures accent, liens */
|
||||
--g300: #6ab98a; /* sur fond sombre : lisible */
|
||||
--g100: #dff0e7; /* tag bg clair */
|
||||
--g050: #eef7f1; /* skills block bg */
|
||||
|
||||
/* Typographie — neutrals chauds */
|
||||
--ink-1: #111111; /* noms entreprises, school, titres forts */
|
||||
--ink-2: #1e1e1e; /* corps de texte, bullets */
|
||||
--ink-3: #636363; /* dates, lieux, labels légers */
|
||||
|
||||
/* Surfaces */
|
||||
--page: #f5f3ec; /* fond document */
|
||||
--rule: #d8d4c8; /* séparateurs */
|
||||
--tag: #e6e2d8; /* tag générique */
|
||||
|
||||
--mono: 'JetBrains Mono', monospace;
|
||||
--serif: 'Fraunces', serif;
|
||||
--sans: 'DM Sans', sans-serif;
|
||||
--ink:#14201a;
|
||||
--paper:#eeebe0;
|
||||
--band:#0d1b12;
|
||||
--band2:#16301f;
|
||||
--name:#ffffff;
|
||||
--sage:#61ab7f;
|
||||
--band-muted:#b7bbb8;
|
||||
--green-deep:#1b5e3b;
|
||||
--muted:#586b60;
|
||||
--rule:#d6d2c3;
|
||||
--chip-bg:#e6e2d4;
|
||||
--chip-bd:#cfcabb;
|
||||
--chip-ink:#1b5e3b;
|
||||
}
|
||||
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
*{ box-sizing:border-box; margin:0; padding:0; }
|
||||
html{ background:#dcdfda; }
|
||||
|
||||
body{
|
||||
background: var(--page);
|
||||
font-family: var(--sans);
|
||||
font-family:"IBM Plex Sans", system-ui, "Segoe UI", Roboto, sans-serif;
|
||||
color:var(--ink);
|
||||
font-size:10.4pt;
|
||||
line-height:1.42;
|
||||
-webkit-font-smoothing:antialiased;
|
||||
}
|
||||
|
||||
.page{
|
||||
background:var(--paper);
|
||||
width:210mm;
|
||||
max-width: 100%;
|
||||
margin: 0 auto;
|
||||
background: var(--page);
|
||||
min-height:297mm;
|
||||
margin:24px auto;
|
||||
padding:0;
|
||||
box-shadow:0 8px 40px rgba(0,0,0,.18);
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
/* ── HEADER DARK BLOCK ── */
|
||||
.cv-header {
|
||||
background: var(--dark);
|
||||
background-image: radial-gradient(ellipse 120% 200% at 0% 50%, var(--dark-mid) 0%, var(--dark) 60%);
|
||||
padding: 18px 20mm 14px;
|
||||
/* ---------- HEADER BAND (full-bleed) ---------- */
|
||||
.band{
|
||||
background:linear-gradient(125deg, var(--band) 0%, var(--band2) 100%);
|
||||
padding:11mm 14mm 8mm;
|
||||
}
|
||||
.head{
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
gap: 20px;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
align-items:flex-start;
|
||||
gap:18px;
|
||||
}
|
||||
|
||||
.cv-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0; top: 0; bottom: 0;
|
||||
width: 4px;
|
||||
background: linear-gradient(to bottom, var(--g300), var(--g700));
|
||||
}
|
||||
|
||||
.cv-header::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
right: -40px; top: -40px;
|
||||
width: 200px; height: 200px;
|
||||
border-radius: 50%;
|
||||
background: radial-gradient(circle, rgba(45,122,79,0.12) 0%, transparent 70%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.header-name {
|
||||
font-family: var(--serif);
|
||||
.name{
|
||||
font-size:26pt;
|
||||
font-weight:700;
|
||||
color: #fff;
|
||||
letter-spacing:-.02em;
|
||||
line-height:1;
|
||||
letter-spacing: -0.5px;
|
||||
white-space: nowrap;
|
||||
color:var(--name);
|
||||
}
|
||||
|
||||
.header-title {
|
||||
font-family: var(--mono);
|
||||
font-size: 9pt;
|
||||
font-weight: 600;
|
||||
color: var(--g300);
|
||||
letter-spacing: 2.5px;
|
||||
.name em{ font-style:normal; color:var(--sage); }
|
||||
.title{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:9.2pt;
|
||||
font-weight:500;
|
||||
letter-spacing:.05em;
|
||||
color:var(--sage);
|
||||
text-transform:uppercase;
|
||||
margin-top: 6px;
|
||||
opacity: 0.9;
|
||||
margin-top:7px;
|
||||
}
|
||||
|
||||
.header-contact {
|
||||
.contact{
|
||||
text-align:right;
|
||||
font-family: var(--mono);
|
||||
font-size: 7.5pt;
|
||||
color: rgba(255,255,255,0.55);
|
||||
line-height: 1.8;
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.1pt;
|
||||
line-height:1.75;
|
||||
color:var(--band-muted);
|
||||
white-space:nowrap;
|
||||
min-width: 240px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.contact-sep {
|
||||
color: rgba(106,185,138,0.4);
|
||||
margin: 0 4px;
|
||||
}
|
||||
.header-contact a {
|
||||
color: rgba(255,255,255,0.8);
|
||||
text-decoration: underline;
|
||||
text-decoration-color: rgba(106,185,138,0.5);
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
.contact a{ color:var(--sage); text-decoration:none; }
|
||||
.contact .strong{ color:var(--name); font-weight:500; }
|
||||
|
||||
/* ── BODY ── */
|
||||
.cv-body {
|
||||
padding: 10px 20mm 12px;
|
||||
background:
|
||||
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='rgba(27,94,59,0.05)'/%3E%3C/svg%3E"),
|
||||
linear-gradient(160deg, var(--page) 0%, var(--tag) 55%, var(--page) 100%);
|
||||
/* ---------- CONTENT WRAPPER ---------- */
|
||||
.content{ padding:13px 14mm 0; }
|
||||
|
||||
.status{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.2pt;
|
||||
font-weight:500;
|
||||
letter-spacing:.04em;
|
||||
color:var(--sage);
|
||||
margin-top:6px;
|
||||
}
|
||||
|
||||
.accroche {
|
||||
font-family: var(--serif);
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-size: 11pt;
|
||||
color: var(--ink-2);
|
||||
line-height: 1.55;
|
||||
border-left: 3px solid var(--g500);
|
||||
padding: 5px 0 5px 12px;
|
||||
margin: 8px 0;
|
||||
background: linear-gradient(to right, rgba(14,51,32,0.04), transparent);
|
||||
.avail{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.3pt;
|
||||
color:var(--muted);
|
||||
margin:2px 0 12px 0;
|
||||
}
|
||||
.avail b{ color:var(--green-deep); font-weight:600; }
|
||||
|
||||
.rule {
|
||||
height: 1px;
|
||||
background: linear-gradient(to right, var(--rule), rgba(216,212,200,0));
|
||||
margin: 5px 0;
|
||||
/* ---------- PROFIL ---------- */
|
||||
.profil{ margin-top:13px;
|
||||
font-size:10.2pt;
|
||||
line-height:1.5;
|
||||
color:#22302a;
|
||||
border-left:3px solid var(--green-deep);
|
||||
padding-left:12px;
|
||||
margin:0 0 15px 0;
|
||||
max-width:172mm;
|
||||
}
|
||||
.profil strong{ color:var(--green-deep); font-weight:600; }
|
||||
|
||||
.section { margin-bottom: 6px; }
|
||||
|
||||
.section-title {
|
||||
font-family: var(--mono);
|
||||
font-size: 9pt;
|
||||
font-weight: 700;
|
||||
letter-spacing: 2.5px;
|
||||
text-transform: uppercase;
|
||||
color: var(--g700);
|
||||
margin-bottom: 7px;
|
||||
/* ---------- SECTION HEADERS ---------- */
|
||||
.sec{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:10px;
|
||||
margin:0 0 9px 0;
|
||||
break-after:avoid;
|
||||
}
|
||||
.sec h2{
|
||||
font-size:10.5pt;
|
||||
font-weight:600;
|
||||
letter-spacing:.13em;
|
||||
text-transform:uppercase;
|
||||
color:var(--ink);
|
||||
white-space:nowrap;
|
||||
}
|
||||
.sec .tok{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8pt;
|
||||
color:var(--green-deep);
|
||||
font-weight:500;
|
||||
}
|
||||
.sec .line{ flex:1; height:1px; background:var(--rule); }
|
||||
|
||||
section{ margin-bottom:14px; }
|
||||
|
||||
/* ---------- COMPÉTENCES ---------- */
|
||||
.skills{ margin-left:2px; }
|
||||
.skill-row{
|
||||
display:grid;
|
||||
grid-template-columns:34mm 1fr;
|
||||
gap:8px;
|
||||
padding:2.5px 0;
|
||||
align-items:baseline;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: '';
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
background: var(--rule);
|
||||
.skill-row + .skill-row{ border-top:1px solid var(--rule); }
|
||||
.skill-k{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.2pt;
|
||||
font-weight:500;
|
||||
color:var(--green-deep);
|
||||
letter-spacing:.01em;
|
||||
}
|
||||
.skill-v{ font-size:9.6pt; color:#22302a; }
|
||||
.skill-v .sep{ color:var(--chip-bd); padding:0 1px; }
|
||||
|
||||
/* ── SHARED (xp/project/edu headers, date chips, roles, tags, links) ── */
|
||||
.xp-header, .project-header, .edu-header {
|
||||
/* ---------- EXPÉRIENCE ---------- */
|
||||
.entry{ margin-bottom:11px; }
|
||||
.entry-top, .entry-role{ break-after:avoid; }
|
||||
.entry-top{
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
align-items:baseline;
|
||||
gap:12px;
|
||||
}
|
||||
.xp-header, .project-header { margin-bottom: 1px; }
|
||||
|
||||
.xp-dates, .project-dates, .edu-dates {
|
||||
font-family: var(--mono);
|
||||
color: var(--ink-3);
|
||||
background: var(--tag);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
.entry-co{ font-size:12pt; font-weight:600; color:var(--ink); }
|
||||
.entry-date{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.4pt;
|
||||
color:var(--muted);
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
.xp-role, .edu-degree {
|
||||
font-size: 10pt;
|
||||
.entry-role{
|
||||
font-size:9.7pt;
|
||||
color:var(--green-deep);
|
||||
font-weight:500;
|
||||
color: var(--g700);
|
||||
margin-bottom: 3px;
|
||||
margin:1px 0 5px;
|
||||
}
|
||||
.entry-role .meta{ color:var(--muted); font-weight:400; }
|
||||
ul.bul{ list-style:none; orphans:2; widows:2; }
|
||||
ul.bul li{
|
||||
list-style:"▸ ";
|
||||
margin-left:13px;
|
||||
margin-bottom:3.5px;
|
||||
font-size:9.7pt;
|
||||
line-height:1.4;
|
||||
color:#212d27;
|
||||
break-inside:avoid;
|
||||
}
|
||||
|
||||
.lang-item, .interest-tag {
|
||||
font-family: var(--mono);
|
||||
font-size: 8.5pt;
|
||||
color: var(--g900);
|
||||
background: var(--g100);
|
||||
padding: 2px 8px;
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.inline-link {
|
||||
color: var(--g500);
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid var(--g300);
|
||||
}
|
||||
|
||||
/* ── XP ── */
|
||||
.xp-block { margin-bottom: 6px; }
|
||||
|
||||
.xp-company {
|
||||
font-family: var(--mono);
|
||||
font-size: 12pt;
|
||||
font-weight: 700;
|
||||
color: var(--ink-1);
|
||||
}
|
||||
|
||||
.xp-dates { font-size: 8.5pt; white-space: nowrap; }
|
||||
|
||||
.xp-loc {
|
||||
font-size: 7.5pt;
|
||||
color: var(--ink-3);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.xp-contract {
|
||||
font-size: 8.5pt;
|
||||
color: var(--ink-3);
|
||||
font-style: italic;
|
||||
margin-bottom: 3px;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
ul.bullets { list-style: none; }
|
||||
|
||||
ul.bullets li {
|
||||
padding-left: 13px;
|
||||
position: relative;
|
||||
margin-bottom: 2px;
|
||||
font-size: 10pt;
|
||||
font-weight: 500;
|
||||
color: var(--ink-2);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
ul.bullets li::before {
|
||||
content: '▸';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
color: var(--g300);
|
||||
font-size: 7pt;
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
.tag {
|
||||
display: inline-block;
|
||||
background: var(--g100);
|
||||
border: 1px solid var(--g300);
|
||||
font-family: var(--mono);
|
||||
font-size: 6.5pt;
|
||||
padding: 1px 5px;
|
||||
ul.bul li b{ color:var(--ink); font-weight:600; }
|
||||
code.k{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8.4pt;
|
||||
background:var(--chip-bg);
|
||||
color:var(--chip-ink);
|
||||
border:1px solid var(--chip-bd);
|
||||
padding:.5px 4px;
|
||||
border-radius:3px;
|
||||
color: var(--g900);
|
||||
margin: 0 1px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
/* ── PROJECTS ── */
|
||||
.project-block { margin-bottom: 5px; }
|
||||
|
||||
.project-name {
|
||||
font-family: var(--mono);
|
||||
font-size: 10.5pt;
|
||||
font-weight: 700;
|
||||
color: var(--ink-1);
|
||||
/* ---------- PROJETS / FORMATION grid ---------- */
|
||||
.two{ display:grid; grid-template-columns:1fr 1fr; gap:9px 22px; }
|
||||
.blk-h{ font-size:10.2pt; font-weight:600; color:var(--ink); }
|
||||
.blk-sub{
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:8pt; color:var(--muted); margin:1px 0 4px;
|
||||
}
|
||||
.blk p{ font-size:9.4pt; line-height:1.4; color:#28332d; }
|
||||
.blk a{ color:var(--green-deep); text-decoration:none; }
|
||||
|
||||
.project-tagline {
|
||||
font-size: 10pt;
|
||||
font-weight: 500;
|
||||
color: var(--g700);
|
||||
font-style: italic;
|
||||
}
|
||||
.langs{ font-size:9.8pt; color:#22302a; margin-left:2px; }
|
||||
.langs b{ color:var(--ink); font-weight:600; }
|
||||
.langs .sep{ color:var(--chip-bd); padding:0 6px; }
|
||||
|
||||
.project-dates { font-size: 8pt; white-space: nowrap; }
|
||||
|
||||
.project-desc {
|
||||
font-size: 10pt;
|
||||
font-weight: 500;
|
||||
color: var(--ink-2);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.project-link {
|
||||
font-family: var(--mono);
|
||||
font-size: 8pt;
|
||||
color: var(--g500);
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
/* ── SKILLS ── */
|
||||
.skills-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 115px 1fr;
|
||||
gap: 1px 10px;
|
||||
}
|
||||
|
||||
.skill-label {
|
||||
font-family: var(--mono);
|
||||
font-size: 9.5pt;
|
||||
font-weight: 700;
|
||||
color: var(--g700);
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.skill-label::after {
|
||||
content: " :";
|
||||
}
|
||||
|
||||
.skill-values { font-size: 10pt; font-weight: 500; color: var(--ink-2); }
|
||||
|
||||
/* ── EDU ── */
|
||||
.edu-block { margin-bottom: 5px; }
|
||||
|
||||
.edu-school {
|
||||
font-family: var(--mono);
|
||||
font-size: 11.5pt;
|
||||
font-weight: 700;
|
||||
color: var(--ink-1);
|
||||
}
|
||||
|
||||
.edu-dates { font-size: 7.2pt; }
|
||||
|
||||
.edu-detail {
|
||||
font-size: 10pt;
|
||||
font-weight: 500;
|
||||
color: var(--ink-2);
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
/* ── TWO COL BOTTOM ── */
|
||||
.two-col {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 0 20px;
|
||||
}
|
||||
|
||||
.lang-row { display: flex; gap: 4px; flex-wrap: wrap; }
|
||||
|
||||
.lang-item .level {
|
||||
color: var(--ink-3);
|
||||
font-size: 7.5pt;
|
||||
}
|
||||
|
||||
.interests { display: flex; flex-wrap: wrap; gap: 4px; }
|
||||
|
||||
/* ── FOOTER ── */
|
||||
.footer-bar {
|
||||
background: var(--dark);
|
||||
padding: 5px 20mm;
|
||||
/* ---------- SCREEN FOOTER BAND ---------- */
|
||||
.screen-foot{
|
||||
background:var(--band);
|
||||
color:#7e8b84;
|
||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
||||
font-size:7.6pt;
|
||||
padding:7px 14mm;
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
align-items: center;
|
||||
margin-top:18px;
|
||||
}
|
||||
.screen-foot a, .pdf-foot a{ color:inherit; text-decoration:none; }
|
||||
|
||||
.footer-bar span {
|
||||
font-family: var(--mono);
|
||||
font-size: 6.8pt;
|
||||
color: rgba(255,255,255,0.3);
|
||||
}
|
||||
/* ---------- PDF BACKDROP + FOOTER ---------- */
|
||||
.bg{ display:none; }
|
||||
.pdf-foot{ display:none; }
|
||||
|
||||
.footer-bar a {
|
||||
font-family: var(--mono);
|
||||
font-size: 6.8pt;
|
||||
color: var(--g300);
|
||||
text-decoration: none;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
/* ── PRINT ── */
|
||||
/* ---------- PRINT / PDF ---------- */
|
||||
/* marges : 14mm haut (sauf p.1) · 0 L/R (bleed) · 13mm bas (réserve footer) */
|
||||
@page{ size:A4; margin:14mm 0 13mm 0; }
|
||||
@page :first{ margin-top:0; }
|
||||
@media print{
|
||||
body {
|
||||
background:
|
||||
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='rgba(27,94,59,0.05)'/%3E%3C/svg%3E"),
|
||||
linear-gradient(160deg, var(--page) 0%, var(--tag) 55%, var(--page) 100%);
|
||||
}
|
||||
.page { background: transparent; }
|
||||
.cv-header { padding: 18px 14mm 14px; }
|
||||
.cv-body { padding: 10px 14mm 12px; background: transparent; }
|
||||
|
||||
/* Saut de page forcé avant Deewee */
|
||||
.break-before-page {
|
||||
break-before: page;
|
||||
page-break-before: always;
|
||||
}
|
||||
|
||||
/* Cache le footer HTML, remplacé par le footer @page (auto-numéroté) */
|
||||
.footer-bar { display: none; }
|
||||
|
||||
/* Footer pleine largeur sur chaque page, avec numérotation auto */
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 0 0 8mm 0;
|
||||
|
||||
@bottom-left-corner {
|
||||
content: "\00a0";
|
||||
background: #0d1b12;
|
||||
}
|
||||
@bottom-left {
|
||||
content: "bchanot.fr";
|
||||
background: #0d1b12;
|
||||
color: #6ab98a;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 6.8pt;
|
||||
padding-left: 20mm;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
width: 80mm;
|
||||
}
|
||||
@bottom-center {
|
||||
content: "\00a0";
|
||||
background: #0d1b12;
|
||||
width: 50mm;
|
||||
}
|
||||
@bottom-right {
|
||||
content: "Bastien Chanot · CV 2026 · " counter(page) "/" counter(pages);
|
||||
background: #0d1b12;
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 6.8pt;
|
||||
padding-right: 20mm;
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
width: 80mm;
|
||||
}
|
||||
@bottom-right-corner {
|
||||
content: "\00a0";
|
||||
background: #0d1b12;
|
||||
html{ background:#fff; }
|
||||
.two{ display:block; }
|
||||
.two .blk{ margin-bottom:7px; break-inside:avoid; }
|
||||
.page{ width:auto; min-height:0; margin:0; box-shadow:none; overflow:visible; background:transparent; }
|
||||
.screen-foot{ display:none; }
|
||||
/* fond crème pleine feuille, répété chaque page (déborde dans les marges) */
|
||||
.bg{
|
||||
display:block; position:fixed;
|
||||
top:-14mm; bottom:-13mm; left:0; right:0;
|
||||
background:var(--paper);
|
||||
z-index:-1;
|
||||
}
|
||||
.pdf-foot{
|
||||
display:flex;
|
||||
position:fixed;
|
||||
bottom:-13mm; left:0; right:0;
|
||||
height:9mm;
|
||||
align-items:center;
|
||||
justify-content:space-between;
|
||||
padding:0 14mm;
|
||||
background:var(--band);
|
||||
color:#8a968f;
|
||||
font-family:"IBM Plex Mono", monospace;
|
||||
font-size:7.4pt;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="page">
|
||||
<div class="bg"></div>
|
||||
|
||||
<div class="cv-header">
|
||||
<!-- ===== HEADER BAND ===== -->
|
||||
<div class="band">
|
||||
<header class="head">
|
||||
<div>
|
||||
<div class="header-name">Bastien Chanot</div>
|
||||
<div class="header-title">Développeur Systèmes · Embarqué · Backend</div>
|
||||
<div class="name">Bastien <em>Chanot</em></div>
|
||||
<!-- ▼ ZONE 1 : TITRE — adapte au poste visé (format court, séparé par ·) -->
|
||||
<div class="title">Développeur Systèmes & Backend · C · Rust · Linux</div>
|
||||
<div class="status">CDI · disponible</div>
|
||||
<!-- ▲ ZONE 1 -->
|
||||
</div>
|
||||
<div class="header-contact">
|
||||
<a href="tel:+33778822297">+33 7 78 82 22 97</a> <span class="contact-sep">·</span> <a href="mailto:bastien@bchanot.fr">bastien@bchanot.fr</a><br>
|
||||
Yerres (91) · installation région nantaise prévue<br>
|
||||
Full remote <span class="contact-sep">·</span> hybride Nantes <span class="contact-sep">·</span> ou 1–2 j/mois Paris<br>
|
||||
Permis B & A<br>
|
||||
<a href="https://github.com/bchanot">GitHub</a> <span class="contact-sep">·</span> <a href="https://www.linkedin.com/in/bastien-chanot-4075a0a3/">LinkedIn</a> <span class="contact-sep">·</span> <a href="https://bchanot.fr">bchanot.fr</a>
|
||||
<div class="contact">
|
||||
<a href="tel:+33778822297" class="strong">+33 7 78 82 22 97</a><br>
|
||||
<a href="mailto:bastien@bchanot.fr">bastien@bchanot.fr</a><br>
|
||||
<a href="https://bchanot.fr">bchanot.fr</a> · <a href="https://git.bchanot.fr/bchanot">git.bchanot.fr</a><br>
|
||||
<!-- TODO-LIENS : remplace par tes URLs réelles -->
|
||||
<a href="https://www.linkedin.com/in/bastien-chanot-4075a0a3/">linkedin.com/in/bastien-chanot</a><br><a href="https://github.com/bchanot">github.com/bchanot</a><br>
|
||||
Loire-Atlantique · Vendée · Morbihan<br>full remote, hybride ou présentiel<br>Paris : hybride 1–2 j/mois max<br>Permis B & A
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
|
||||
<div class="cv-body">
|
||||
<!-- ===== CONTENT ===== -->
|
||||
<div class="content">
|
||||
|
||||
<div class="accroche">
|
||||
Développeur systèmes senior, 7 ans en C sur Linux bare-metal, kernel drivers et AOSP.
|
||||
Conception, développement et déploiement de la stack cloud gaming serveur en production
|
||||
(kernel, conteneurs AOSP, backend Rust temps réel, fleet GPU bare-metal) servant plusieurs centaines de joueurs simultanés.
|
||||
Collaboration technique directe avec Canonical (Anbox) et Nvidia.
|
||||
En recherche d'un CDI systèmes ou embarqué.
|
||||
<!-- ▼ ZONE 2 : ACCROCHE — réécris 2-3 lignes orientées vers l'entreprise / le poste -->
|
||||
<p class="profil">
|
||||
Développeur <strong>systèmes & backend</strong>, 7 ans en <strong>C et Rust sur Linux bare-metal</strong>. Du <strong>module kernel</strong> au backend temps réel : drivers, conteneurs (Docker / LXC / QEMU), exploitation d'une <strong>fleet GPU bare-metal</strong> en production, automatisation et CI/CD. Compréhension globale de la stack, du matériel au service.
|
||||
</p>
|
||||
<!-- ▲ ZONE 2 -->
|
||||
|
||||
<!-- ================= COMPÉTENCES ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Compétences techniques</h2><span class="line"></span></div>
|
||||
<!-- ▼ ZONE 3a : réordonne les lignes selon l'offre -->
|
||||
<div class="skills">
|
||||
<div class="skill-row"><div class="skill-k">Langages</div><div class="skill-v">C <span class="sep">·</span> Rust <span class="sep">·</span> C++ <span class="sep">·</span> Bash <span class="sep">·</span> Python <span class="sep">·</span> Java (AOSP/Android)</div></div>
|
||||
<div class="skill-row"><div class="skill-k">Systèmes & Embarqué</div><div class="skill-v">Linux kernel drivers <span class="sep">·</span> AOSP <span class="sep">·</span> ARM / x86 <span class="sep">·</span> GPIO <span class="sep">·</span> NFC <span class="sep">·</span> cross-compilation GCC <span class="sep">·</span> systemd <span class="sep">·</span> SELinux</div></div>
|
||||
<div class="skill-row"><div class="skill-k">Conteneurs / Virtu.</div><div class="skill-v">Docker <span class="sep">·</span> LXC / LXD <span class="sep">·</span> QEMU <span class="sep">·</span> cgroups <span class="sep">·</span> namespaces</div></div>
|
||||
<div class="skill-row"><div class="skill-k">Cloud & Infra</div><div class="skill-v">AWS (EC2, g4dn bare-metal, IAM, S3, CloudWatch) <span class="sep">·</span> Scaleway <span class="sep">·</span> OVH / Hetzner <span class="sep">·</span> Nginx</div></div>
|
||||
<div class="skill-row"><div class="skill-k">DevOps & Outils</div><div class="skill-v">Git <span class="sep">·</span> GitHub Actions <span class="sep">·</span> GitLab CI <span class="sep">·</span> CI/CD <span class="sep">·</span> Claude Code (agents/skills custom) <span class="sep">·</span> N8N</div></div>
|
||||
</div>
|
||||
<!-- ▲ ZONE 3a -->
|
||||
</section>
|
||||
|
||||
<div class="rule"></div>
|
||||
<!-- ================= EXPÉRIENCE ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Expérience professionnelle</h2><span class="line"></span></div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">Expérience professionnelle</div>
|
||||
|
||||
<div class="xp-block">
|
||||
<div class="xp-header">
|
||||
<span class="xp-company">ZenQuality</span>
|
||||
<span class="xp-dates">avr. 2026 – présent</span>
|
||||
</div>
|
||||
<div class="xp-role">Développeur indépendant <span class="xp-loc">· Yerres · <a href="https://zenquality.fr" class="inline-link">zenquality.fr</a></span></div>
|
||||
<ul class="bullets">
|
||||
<li>Mission SEO et conformité légale RGPD pour PME service (Île-de-France) — audit technique Core Web Vitals + Schema.org + NAP, refonte CGV B2B/B2C, RGPD, mentions légales, mise en conformité médiateur CM2C. Plan d'action 12 sprints.</li>
|
||||
<li>Site vitrine WordPress (<span class="tag">Gutenverse</span>) pour PME esthétique — conception, intégration, déploiement et support continu (hébergement client).</li>
|
||||
<li>Setup et auto-hébergement de l'infra ZenQuality sur VPS <span class="tag">Scaleway</span> — stack <span class="tag">Astro</span> / <span class="tag">React</span> / <span class="tag">PHP 8</span> / <span class="tag">PostgreSQL</span> conteneurisée <span class="tag">Docker</span>, déploiement automatisé, pipeline de production complet.</li>
|
||||
<div class="entry">
|
||||
<div class="entry-top"><div class="entry-co">ZenQuality</div><div class="entry-date">2026 — présent</div></div>
|
||||
<div class="entry-role">Développeur indépendant · Infra & dév web <span class="meta">· zenquality.fr</span></div>
|
||||
<ul class="bul">
|
||||
<li>Déployé et opéré en production l'<b>infrastructure auto-hébergée</b> (uptime continu) en conteneurisant une stack <code class="k">Astro</code> <code class="k">React</code> <code class="k">PHP 8</code> <code class="k">PostgreSQL</code> sur VPS <code class="k">Scaleway</code>, avec pipeline de déploiement automatisé.</li>
|
||||
<li>Livré <b>5 projets clients de bout en bout</b> depuis avril 2026 — conception, intégration, déploiement, hébergement et support continu.</li>
|
||||
<li>Réalisé des <b>audits techniques</b> (Core Web Vitals, Schema.org) et la <b>mise en conformité légale</b> (RGPD, CGV B2B/B2C, médiateur CM2C) pour des PME — plan d'action sur 12 sprints.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="xp-block">
|
||||
<div class="xp-header">
|
||||
<span class="xp-company">CareGame</span>
|
||||
<span class="xp-dates">mars 2019 – mars 2025</span>
|
||||
<div class="entry">
|
||||
<div class="entry-top"><div class="entry-co">CareGame</div><div class="entry-date">2019 — 2025</div></div>
|
||||
<div class="entry-role">Développeur logiciel · Systèmes & Backend <span class="meta">· Paris · full remote dès 2020</span></div>
|
||||
<!-- ▼ ZONE 3b : remonte les bullets les plus alignés avec l'offre -->
|
||||
<ul class="bul">
|
||||
<li>Conçu et maintenu les <b>modules kernel Linux en C</b> (x86 / ARM) assurant la communication bidirectionnelle hôte ↔ instances AOSP conteneurisées — drivers d'interface, brique critique du pipeline d'exécution serveur.</li>
|
||||
<li>Co-développé le <b>backend Rust</b> orchestrant le cycle de vie des conteneurs AOSP (<code class="k">WebSocket</code> temps réel clients ↔ instances, scheduling sur la fleet GPU, intégration <code class="k">Docker</code> + <code class="k">LXC</code>) — support de <b>plusieurs centaines de joueurs simultanés</b>.</li>
|
||||
<li>Porté la densité de production à <b>32 sessions de jeu AAA stables par serveur</b> en concevant l'isolation <b>CPU/GPU par session</b> — adaptation de modules GPU <code class="k">Nvidia</code>, partitionnement 2 cœurs/session (physiques et émulés), sérialisation des accès concurrents sur zones GPU partagées.</li>
|
||||
<li>Architecturé et exploité une <b>fleet GPU bare-metal</b> <code class="k">AWS g4dn.metal</code> (8× T4, 64 vCPU, ~20 serveurs en pic) servant plusieurs centaines de joueurs en parallèle — isolation 2 cœurs CPU/session, ramdisk I/O (Asphalt 9 : 3 sessions / T4).</li>
|
||||
<li>Industrialisé jusqu'en production un <b>PoC LXD + Docker</b> issu d'une R&D Nvidia — débogage kernel/conteneur, performance validée par les équipes Nvidia comme dépassant le scope initial du PoC.</li>
|
||||
<li>Collaboré techniquement en <b>anglais</b> avec <b>Canonical</b> (Anbox, builds LXC/LXD non commerciaux, remontée bugs et feature requests) et <b>Ampere Computing</b> (benchmark de serveurs ARM pré-commerciaux pour évaluation de migration de fleet).</li>
|
||||
<li>Automatisé l'installation des jeux AOSP et la persistance des sauvegardes (fusion Android Backup + scripts custom couvrant DRM et données externes) et développé un <b>outil d'orchestration Bash modulaire (1000+ lignes)</b> appelé par la CI et le backend Rust.</li>
|
||||
<li>Atteint une <b>latence compatible gameplay AAA temps réel</b> en développant les virtual input devices AOSP en <code class="k">Java</code> (touchscreen, gamepad) sur le pipeline complet frontend → backend Rust → drivers hôtes → injection AOSP.</li>
|
||||
</ul>
|
||||
<!-- ▲ ZONE 3b -->
|
||||
</div>
|
||||
<div class="xp-role">Développeur logiciel — Systèmes & Backend <span class="xp-loc">· Paris · Full remote dès 2020</span></div>
|
||||
<ul class="bullets">
|
||||
<li>Conception et maintenance de modules kernel Linux en <span class="tag">C</span> (x86 / ARM) — drivers d'interface hôte/conteneur orchestrant la communication bidirectionnelle entre Linux hôte et instances AOSP conteneurisées.</li>
|
||||
<li>Conception de l'isolation CPU/GPU par session sur la fleet bare-metal — adaptation de modules GPU Nvidia, partitionnement 2 cœurs/session (physiques et émulés), sérialisation des accès concurrents sur zones GPU partagées. Résultat : passage à 32 sessions AAA stables/serveur.</li>
|
||||
<li>Co-développement du backend <span class="tag">Rust</span> orchestrant le cycle de vie des conteneurs AOSP — communication WebSocket temps réel clients ↔ instances, intégration <span class="tag">Docker</span> et <span class="tag">LXC</span>, scheduling des sessions sur la fleet GPU.</li>
|
||||
<li>Développement de virtual input devices AOSP en <span class="tag">Java</span> (touchscreen, gamepad) — pipeline complet inputs frontend → backend Rust → drivers hôtes → injection AOSP, optimisé pour latence temps réel gameplay AAA.</li>
|
||||
<li>Architecture et exploitation de fleet GPU bare-metal <span class="tag">AWS g4dn.metal</span> (8× GPU T4, 64 vCPU, ~20 serveurs en pic) — isolation 2 cœurs CPU/session, ramdisk I/O, 32 sessions AAA simultanées par serveur. Plusieurs centaines de joueurs servis en parallèle (Asphalt 9 : 3 sessions / GPU T4).</li>
|
||||
<li>Reprise et hardening d'un PoC <span class="tag">LXD</span> + <span class="tag">Docker</span> issu d'une R&D Nvidia (intégration côté Docker principalement) — adaptation à la production cloud gaming, débogage kernel/conteneur, performance validée par les équipes Nvidia comme dépassant le scope initial du PoC.</li>
|
||||
<li>Collaboration technique directe en anglais avec Canonical (<span class="tag">Anbox</span> + builds LXC/LXD non commerciaux, remontée bugs et feature requests) et Ampere Computing (intégration et benchmark de serveurs ARM pré-commerciaux pour évaluation de migration de fleet).</li>
|
||||
<li>Pipeline d'installation automatique de jeux AOSP et persistance des sauvegardes utilisateur — fusion Android Backup natif + scripts custom pour couvrir les cas non gérés nativement (DRM, données externes).</li>
|
||||
<li>Développement d'un outil d'orchestration <span class="tag">Bash</span> modulaire (1000+ lignes) pour la gestion du cycle de vie des conteneurs et l'intégration en production — parsing avancé des arguments Docker, préparation et lancement automatisé des conteneurs AOSP, brique appelée par la CI et le backend Rust.</li>
|
||||
|
||||
<div class="entry">
|
||||
<div class="entry-top"><div class="entry-co">Deewee</div><div class="entry-date">2017</div></div>
|
||||
<div class="entry-role">Développeur C · Système embarqué <span class="meta">· Ivry-sur-Seine · stage 42 (6 mois) puis CDD (4 mois)</span></div>
|
||||
<ul class="bul">
|
||||
<li>Développé en <b>C</b> le logiciel embarqué d'un boîtier connecté <code class="k">Orange Pi</code> (Debian ARM) interceptant le flux <b>ESC/POS</b> d'une imprimante thermique pour générer le PNG du ticket et le transférer en WiFi direct vers mobile.</li>
|
||||
<li>Intégré le matériel : <b>GPIO</b> physique (bouton + timeout), hotspot WiFi embarqué avec appairage automatique par diffusion <b>NFC</b> des credentials.</li>
|
||||
<li>Travaillé en cycle court sur un prototype fonctionnel — cross-compilation ARM, débogage sur cible, itérations rapides entre intégration matérielle et logiciel embarqué.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="xp-block break-before-page">
|
||||
<div class="xp-header">
|
||||
<span class="xp-company">Deewee</span>
|
||||
<span class="xp-dates">fév. 2017 – nov. 2017</span>
|
||||
<!-- ================= PROJETS ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Projets & réalisations</h2><span class="line"></span></div>
|
||||
<div class="two">
|
||||
<div class="blk">
|
||||
<div class="blk-h">Homelab — infrastructure personnelle</div>
|
||||
<div class="blk-sub">en continu</div>
|
||||
<p>Auto-hébergement Git / DNS / VPN / SMB — NAS Asustor, WireGuard site-to-site, Pi-hole, segmentation réseau, hardening fail2ban, gocryptfs sur dossiers sensibles.</p>
|
||||
</div>
|
||||
<div class="xp-role">Développeur C — Système embarqué <span class="xp-loc">· Ivry-sur-Seine</span></div>
|
||||
<div class="xp-contract">Stage 42 (6 mois) puis CDD (4 mois)</div>
|
||||
<ul class="bullets">
|
||||
<li>Développement du logiciel embarqué en <span class="tag">C</span> pour boîtier connecté basé Orange Pi (<span class="tag">Debian ARM</span>) — interception du flux <span class="tag">ESC/POS</span> d'une imprimante thermique, génération PNG du ticket, transfert WiFi direct vers application mobile à la connexion.</li>
|
||||
<li>Intégration matérielle : <span class="tag">GPIO</span> physique (bouton + timeout), hotspot WiFi embarqué avec diffusion des credentials via <span class="tag">NFC</span> pour appairage automatique.</li>
|
||||
</ul>
|
||||
<div class="blk">
|
||||
<div class="blk-h">Code source & projets persos</div>
|
||||
<div class="blk-sub"><a href="https://git.bchanot.fr/bchanot">git.bchanot.fr/bchanot</a></div>
|
||||
<p>Serveur Git auto-hébergé en production. Configuration Claude Code (agents/skills custom), dotfiles, projets bas-niveau C / Rust. Mirror automatique vers GitHub via push hook.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="rule"></div>
|
||||
<!-- ================= FORMATION ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Formation</h2><span class="line"></span></div>
|
||||
<div class="two">
|
||||
<div class="blk">
|
||||
<div class="blk-h">École 42 — programmation informatique</div>
|
||||
<div class="blk-sub">2015 — 2019 · Clichy</div>
|
||||
<p>Kernel / systèmes (ft_linux, kfs-1, drivers, malloc), bas niveau (nm, 42sh POSIX, ft_ls), sécurité & algorithmie (snow crash, ft_ssl_md5, lem-in).</p>
|
||||
</div>
|
||||
<div class="blk">
|
||||
<div class="blk-h">TSRIT — Next Formation</div>
|
||||
<div class="blk-sub">2013 — 2015 · Vincennes · Félicitations du jury</div>
|
||||
<p>BTS Technicien Supérieur Réseaux & Télécoms. Socle réseau (OSI, TCP/IP), administration Linux / Windows Server, virtualisation.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">Projets & Réalisations</div>
|
||||
<!-- ================= LANGUES ================= -->
|
||||
<section>
|
||||
<div class="sec"><span class="tok">~/</span><h2>Langues</h2><span class="line"></span></div>
|
||||
<div class="langs"><b>Anglais</b> C2 <span class="sep">·</span> <b>Espagnol</b> B1 <span class="sep">·</span> <b>Français</b> natif</div>
|
||||
</section>
|
||||
|
||||
<div class="project-block">
|
||||
<div class="project-header">
|
||||
<div>
|
||||
<span class="project-name">Code source & projets persos</span>
|
||||
<span class="project-tagline"> — serveur Git auto-hébergé en production</span>
|
||||
</div>
|
||||
<span class="project-dates">en continu</span>
|
||||
</div>
|
||||
<div class="project-desc">
|
||||
Configuration Claude Code, dotfiles, projets bas-niveau (42, expérimentations C/Rust) — accessibles publiquement. Mirror automatique vers GitHub via push hook.
|
||||
</div>
|
||||
<div class="project-link"><a href="https://git.bchanot.fr/bchanot" class="inline-link">git.bchanot.fr/bchanot</a></div>
|
||||
</div>
|
||||
</div><!-- /content -->
|
||||
|
||||
<div class="project-block">
|
||||
<div class="project-header">
|
||||
<div>
|
||||
<span class="project-name">Homelab</span>
|
||||
<span class="project-tagline"> — Infrastructure personnelle</span>
|
||||
</div>
|
||||
<span class="project-dates">en continu</span>
|
||||
</div>
|
||||
<div class="project-desc">
|
||||
Auto-hébergement Git (<span class="tag">Gogs</span>) / DNS / VPN / SMB — NAS Asustor, Freebox <span class="tag">WireGuard</span> VPN site-to-site, Pi-hole, segmentation réseau, hardening <span class="tag">fail2ban</span>, <span class="tag">gocryptfs</span> sur dossiers sensibles.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule"></div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">Formation</div>
|
||||
|
||||
<div class="edu-block">
|
||||
<div class="edu-header">
|
||||
<span class="edu-school">École 42</span>
|
||||
<span class="edu-dates">2015 – 2019</span>
|
||||
</div>
|
||||
<div class="edu-degree">Programmation informatique <span class="xp-loc">· Clichy</span></div>
|
||||
<div class="edu-detail">
|
||||
<strong>Systèmes / Kernel :</strong> ft_linux & kfs-1 (Linux From Scratch — bootloader ASM, GDT, interruptions, driver char device) · drivers & interrupt · process & memory · little penguin<br>
|
||||
<strong>Bas niveau :</strong> malloc (allocateur mémoire) · nm (parsing ELF) · ft_ls · ft_select · 42sh (shell POSIX complet)<br>
|
||||
<strong>Réseau / Sécurité :</strong> ft_ssl_md5 (crypto) · snow crash (exploitation système) · lem-in · push-swap · doctor quine
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="edu-block">
|
||||
<div class="edu-header">
|
||||
<span class="edu-school">Next Formation</span>
|
||||
<span class="edu-dates">2013 – 2015</span>
|
||||
</div>
|
||||
<div class="edu-degree">TSRIT — Technicien Supérieur Réseaux & Télécoms, <em>Félicitations du jury</em> <span class="xp-loc">· Vincennes</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule"></div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">Compétences techniques</div>
|
||||
<div class="skills-grid">
|
||||
<div class="skill-label">Langages</div>
|
||||
<div class="skill-values">C · Rust · Bash · Python · Java (AOSP/Android)</div>
|
||||
|
||||
<div class="skill-label">Embarqué</div>
|
||||
<div class="skill-values">Linux kernel drivers · AOSP · ARM / x86 · GPIO · NFC · ESC/POS · Orange Pi · cross-compilation GCC</div>
|
||||
|
||||
<div class="skill-label">Conteneurs</div>
|
||||
<div class="skill-values">Docker · LXC / LXD · QEMU · cgroups · namespaces</div>
|
||||
|
||||
<div class="skill-label">Backend</div>
|
||||
<div class="skill-values">Rust · WebSocket · architecture GPU bare-metal · ramdisk I/O</div>
|
||||
|
||||
<div class="skill-label">Systèmes</div>
|
||||
<div class="skill-values">Linux bare-metal · AOSP · Android Backup · systemd · SELinux</div>
|
||||
|
||||
<div class="skill-label">Cloud / Infra</div>
|
||||
<div class="skill-values">AWS (EC2, g4dn bare-metal, IAM, S3, CloudWatch) · Scaleway VPS · OVH / Hetzner · Nginx · Apache · Let's Encrypt</div>
|
||||
|
||||
<div class="skill-label">DevOps</div>
|
||||
<div class="skill-values">Git · GitHub Actions · GitLab · CI/CD</div>
|
||||
|
||||
<div class="skill-label">IA / Outils</div>
|
||||
<div class="skill-values">Claude Code (agents/skills custom) · N8N · automatisation</div>
|
||||
|
||||
<div class="skill-label">Familier avec</div>
|
||||
<div class="skill-values">C++</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule"></div>
|
||||
|
||||
<div class="two-col">
|
||||
<div class="section">
|
||||
<div class="section-title">Langues</div>
|
||||
<div class="lang-row">
|
||||
<div class="lang-item">Anglais <span class="level">C2</span></div>
|
||||
<div class="lang-item">Espagnol <span class="level">B1</span></div>
|
||||
<div class="lang-item">Français <span class="level">natif</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-title">Centres d'intérêt</div>
|
||||
<div class="interests">
|
||||
<span class="interest-tag">Voyage</span>
|
||||
<span class="interest-tag">Sciences</span>
|
||||
<span class="interest-tag">Astronomie</span>
|
||||
<span class="interest-tag">Nature</span>
|
||||
<span class="interest-tag">Jeux vidéo</span>
|
||||
<span class="interest-tag">Musique</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer-bar">
|
||||
<a href="https://bchanot.fr">bchanot.fr</a>
|
||||
<span>Bastien Chanot · CV 2026</span>
|
||||
</div>
|
||||
<div class="screen-foot"><a href="https://bchanot.fr">bchanot.fr</a><span>Bastien Chanot · CV 2026</span></div>
|
||||
<div class="pdf-foot"><a href="https://bchanot.fr">bchanot.fr</a><span>Bastien Chanot · CV 2026</span></div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
Binary file not shown.
+5
-5
@@ -1016,17 +1016,17 @@
|
||||
<p>Ce qui m'intéresse, c'est descendre jusqu'à ce qu'il n'y ait plus de magie — <strong>kernel, hardware, drivers</strong>. Là, soit ça marche, soit ça ne marche pas.</p>
|
||||
<p>C'est ce confort-là que je cherche dans une équipe : <strong>systèmes, embarqué, backend bas niveau</strong>, sur une stack dont on peut lire le code source. Pas envie d'aller vers le buzzword-driven — microservices à tout prix, framework du mois, archi conçue pour le pitch deck.</p>
|
||||
<p>Aujourd'hui indépendant sous la marque <strong>ZenQuality</strong>, mais avant tout en recherche d'un <strong>CDI en systèmes embarqués ou logiciel</strong> — les missions freelance se font en parallèle.</p>
|
||||
<p>Côté présence : <strong>full remote</strong> idéalement, <strong>hybride possible sur Nantes</strong>, ou <strong>1 à 2 jours par mois</strong> si l'équipe est à Paris. Installation en <strong>région nantaise</strong> prévue à moyen terme.</p>
|
||||
<p>Côté présence : <strong>full remote</strong> idéalement, sinon <strong>hybride ou présentiel</strong> en <strong>Loire-Atlantique · Vendée · Morbihan</strong>. Si l'équipe est à Paris, uniquement en <strong>hybride, 1 à 2 jours par mois maximum</strong>.</p>
|
||||
</div>
|
||||
<dl class="about-callout">
|
||||
<dt>Recherche prioritaire</dt>
|
||||
<dd>CDI systèmes embarqués / logiciel</dd>
|
||||
<dt>En parallèle</dt>
|
||||
<dd>Missions freelance · ZenQuality</dd>
|
||||
<dt>Localisation actuelle</dt>
|
||||
<dd>Yerres (91) · installation région nantaise prévue</dd>
|
||||
<dt>Zone</dt>
|
||||
<dd>Loire-Atlantique · Vendée · Morbihan</dd>
|
||||
<dt>Présence</dt>
|
||||
<dd>Full remote · hybride Nantes · ou 1–2 j/mois Paris</dd>
|
||||
<dd>Full remote · hybride ou présentiel dans la zone · Paris 1–2 j/mois max</dd>
|
||||
<dt>Site pro</dt>
|
||||
<dd><a href="https://zenquality.fr" target="_blank" rel="noopener">zenquality.fr ↗</a></dd>
|
||||
</dl>
|
||||
@@ -1175,7 +1175,7 @@
|
||||
<div class="timeline-meta">
|
||||
<span class="period">avr. 2026 — présent</span>
|
||||
<span class="badge">En cours</span>
|
||||
<span>Yerres · Full remote</span>
|
||||
<span>Full remote</span>
|
||||
</div>
|
||||
<h3><a href="https://zenquality.fr" target="_blank" rel="noopener">ZenQuality</a></h3>
|
||||
<p class="timeline-role">Développeur indépendant · Systèmes & Backend</p>
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.0.0
|
||||
1.1.0
|
||||
|
||||
Reference in New Issue
Block a user