Files
courcellematthi/index.html
T
2026-08-05 22:40:03 +02:00

931 lines
43 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<!--
================================================================================
courcellematthi.eu — Site personnel / CV de Matthieu Courcelle
Statique, sans dépendance, sans étape de compilation.
Voir README.md pour l'architecture et les choix techniques.
================================================================================
-->
<html lang="fr">
<head>
<!-- ==========================================================================
ENCODAGE ET FENÊTRE D'AFFICHAGE
charset doit figurer dans les 1024 premiers octets du document, sans quoi
le navigateur peut commencer à interpréter la page dans le mauvais
encodage puis devoir tout réanalyser.
========================================================================== -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- ==========================================================================
RÉFÉRENCEMENT — MÉTADONNÉES PRINCIPALES
Le title est le facteur de classement sur page le plus visible : il sert
de lien bleu dans les résultats. Format retenu : nom, puis fonction, puis
localisation. Environ 60 caractères avant troncature.
La description n'influence pas le classement mais détermine le taux de
clic. Environ 155 caractères. Écrite pour un humain, pas pour un robot.
========================================================================== -->
<title>Matthieu Courcelle — Professeur d'informatique | Tournai</title>
<meta name="description" content="Professeur d'informatique en secondaire technique et supérieur pour adultes à Tournai. Développeur d'applications de gestion et d'outils IA pour l'école.">
<meta name="author" content="Matthieu Courcelle">
<!--
Directives d'indexation.
max-snippet:-1 — pas de limite de longueur d'extrait
max-image-preview:large — autorise la grande vignette dans Discover
max-video-preview:-1 — sans objet ici, mais évite une restriction implicite
-->
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
<!--
URL canonique. Indispensable même sur un site d'une seule page : elle
consolide le classement si la page est atteignable via plusieurs adresses
(avec ou sans www, avec ou sans slash final, avec paramètres de campagne).
-->
<link rel="canonical" href="https://www.courcellematthi.eu/">
<!--
Langue et zone géographique. Le site est monolingue : x-default pointe donc
vers la même URL. La balise reste utile pour lever toute ambiguïté auprès
des moteurs sur un domaine en .eu.
-->
<link rel="alternate" hreflang="fr-be" href="https://www.courcellematthi.eu/">
<link rel="alternate" hreflang="x-default" href="https://www.courcellematthi.eu/">
<!-- ==========================================================================
PARTAGE SUR LES RÉSEAUX SOCIAUX
Open Graph (Facebook, LinkedIn, WhatsApp, Slack, Discord, Signal…)
LinkedIn est le canal déterminant pour un CV : c'est lui qui justifie
le soin apporté à og:image.
========================================================================== -->
<meta property="og:type" content="profile">
<meta property="og:site_name" content="Matthieu Courcelle">
<meta property="og:locale" content="fr_BE">
<meta property="og:url" content="https://www.courcellematthi.eu/">
<meta property="og:title" content="Matthieu Courcelle — Professeur d'informatique et développeur">
<meta property="og:description" content="Enseignement de l'informatique, développement d'applications de gestion et intelligence artificielle appliquée à la pédagogie et à l'administration scolaire.">
<!-- 1200×630 : ratio 1,91:1, format attendu par la quasi-totalité des
plateformes. Une image trop petite est ignorée et remplacée par un
aperçu générique. L'URL doit être absolue : les robots sociaux ne
résolvent pas les chemins relatifs. -->
<meta property="og:image" content="https://www.courcellematthi.eu/assets/img/og-image.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:type" content="image/png">
<meta property="og:image:alt" content="Monogramme MC et nom de Matthieu Courcelle, professeur d'informatique et développeur">
<!-- Champs spécifiques au type « profile » -->
<meta property="profile:first_name" content="Matthieu">
<meta property="profile:last_name" content="Courcelle">
<meta property="profile:gender" content="male">
<!-- Cartes Twitter / X. summary_large_image affiche la bannière en pleine
largeur plutôt qu'en vignette carrée. -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Matthieu Courcelle — Professeur d'informatique et développeur">
<meta name="twitter:description" content="Enseignement de l'informatique, développement d'applications de gestion et intelligence artificielle appliquée.">
<meta name="twitter:image" content="https://www.courcellematthi.eu/assets/img/og-image.png">
<meta name="twitter:image:alt" content="Monogramme MC et nom de Matthieu Courcelle">
<!-- ==========================================================================
INTERFACE ET SYSTÈME
========================================================================== -->
<!-- Colore la barre d'adresse mobile et la barre de titre des PWA -->
<meta name="theme-color" content="#f7f8f8">
<!-- Déclare que seul le thème clair est prévu : évite que le navigateur
applique une inversion automatique en mode sombre système, qui
dénaturerait la palette. -->
<meta name="color-scheme" content="light">
<!-- Nom affiché lors d'un ajout à l'écran d'accueil iOS -->
<meta name="apple-mobile-web-app-title" content="M. Courcelle">
<meta name="application-name" content="Matthieu Courcelle">
<!-- Désactive la détection automatique des numéros de téléphone par iOS,
qui transforme des suites de chiffres (dates, matricules) en liens. -->
<meta name="format-detection" content="telephone=no">
<!-- ==========================================================================
ICÔNES
Stratégie en cascade : SVG d'abord (vectoriel, une seule ressource,
net à toute taille), PNG en repli pour les navigateurs anciens,
ICO pour la compatibilité historique.
========================================================================== -->
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/assets/img/apple-touch-icon.png">
<link rel="mask-icon" href="/assets/img/safari-pinned-tab.svg" color="#05bc8a">
<link rel="manifest" href="/site.webmanifest">
<!-- ==========================================================================
POLICES
preconnect ouvre les connexions TCP/TLS vers les deux domaines de Google
Fonts avant même que le navigateur ne découvre la requête CSS : gain de
100 à 300 ms sur le premier rendu du texte.
crossorigin est obligatoire sur fonts.gstatic.com — les fichiers de police
sont récupérés en mode CORS, sans cet attribut la connexion préouverte ne
serait pas réutilisée.
display=swap affiche immédiatement la police de repli puis substitue la
webfont : le texte n'est jamais invisible (évite le FOIT).
========================================================================== -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Inter:wght@400;500;600&display=swap">
<!-- ==========================================================================
FEUILLES DE STYLE
Liées séparément plutôt qu'assemblées par @import : les @import créent
une cascade de requêtes séquentielles (le navigateur doit d'abord
télécharger et analyser le fichier parent pour découvrir l'enfant),
alors que des <link> se téléchargent en parallèle.
L'ordre de priorité ne dépend pas de l'ordre ci-dessous : il est fixé
par la déclaration @layer en tête de tokens.css.
========================================================================== -->
<link rel="stylesheet" href="/assets/css/tokens.css">
<link rel="stylesheet" href="/assets/css/base.css">
<link rel="stylesheet" href="/assets/css/layout.css">
<link rel="stylesheet" href="/assets/css/components.css">
<link rel="stylesheet" href="/assets/css/utilities.css">
<!-- Chargée uniquement à l'impression : ne pénalise pas le rendu écran -->
<link rel="stylesheet" href="/assets/css/print.css" media="print">
<!-- ==========================================================================
SCRIPT
type="module" implique defer : le téléchargement est parallèle à
l'analyse du HTML, l'exécution a lieu après. Aucun blocage du rendu,
donc pas besoin de l'écrire en fin de <body>.
========================================================================== -->
<script type="module" src="/assets/js/main.js"></script>
<!-- ==========================================================================
DONNÉES STRUCTURÉES — schema.org en JSON-LD
--------------------------------------------------------------------------
Double usage :
1. MOTEURS DE RECHERCHE. Permet à Google d'associer la page à une entité
« personne » plutôt qu'à un simple document, condition d'apparition
dans le panneau de connaissances et les résultats enrichis.
2. AGENTS CONVERSATIONNELS ET IA. Les modèles de langage et les moteurs
de réponse consomment le JSON-LD en priorité : c'est une déclaration
explicite et non ambiguë de qui est la personne, ce qu'elle fait, où
elle travaille et ce qu'elle sait faire. Sans ces données, l'agent
doit inférer depuis la prose, avec un risque d'erreur.
Le graphe est composé de trois entités reliées par @id :
WebSite → ProfilePage → Person.
========================================================================== -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://www.courcellematthi.eu/#website",
"url": "https://www.courcellematthi.eu/",
"name": "Matthieu Courcelle",
"description": "Site personnel de Matthieu Courcelle, professeur d'informatique et développeur d'applications de gestion.",
"inLanguage": "fr-BE",
"publisher": { "@id": "https://www.courcellematthi.eu/#person" }
},
{
"@type": "ProfilePage",
"@id": "https://www.courcellematthi.eu/#webpage",
"url": "https://www.courcellematthi.eu/",
"name": "Matthieu Courcelle — Professeur d'informatique et développeur",
"isPartOf": { "@id": "https://www.courcellematthi.eu/#website" },
"about": { "@id": "https://www.courcellematthi.eu/#person" },
"mainEntity": { "@id": "https://www.courcellematthi.eu/#person" },
"inLanguage": "fr-BE",
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://www.courcellematthi.eu/assets/img/og-image.png",
"width": 1200,
"height": 630
}
},
{
"@type": "Person",
"@id": "https://www.courcellematthi.eu/#person",
"name": "Matthieu Courcelle",
"givenName": "Matthieu",
"familyName": "Courcelle",
"jobTitle": "Professeur d'informatique",
"description": "Professeur d'informatique en secondaire technique et en enseignement supérieur pour adultes. Développeur d'applications de gestion et praticien de l'intelligence artificielle appliquée à la pédagogie et à l'administration scolaire.",
"url": "https://www.courcellematthi.eu/",
"email": "mailto:m@tthieu.be",
"image": "https://www.courcellematthi.eu/assets/img/og-image.png",
"nationality": { "@type": "Country", "name": "Belgique" },
"knowsLanguage": [
{ "@type": "Language", "name": "Français", "alternateName": "fr" },
{ "@type": "Language", "name": "Anglais", "alternateName": "en" }
],
"address": {
"@type": "PostalAddress",
"addressLocality": "Tournai",
"addressRegion": "Hainaut",
"addressCountry": "BE"
},
"worksFor": [
{
"@type": "EducationalOrganization",
"name": "IPES Ath",
"description": "Enseignement secondaire technique de transition et de qualification"
},
{
"@type": "EducationalOrganization",
"name": "Institut Gabrielle Petit",
"alternateName": "IPEPS Tournai-Leuze",
"description": "Enseignement de promotion sociale et supérieur pour adultes"
}
],
"alumniOf": [
{
"@type": "EducationalOrganization",
"name": "Institut de Promotion Sociale Saint Henri"
},
{
"@type": "EducationalOrganization",
"name": "IEPSCF"
}
],
"hasCredential": [
{
"@type": "EducationalOccupationalCredential",
"name": "Certificat d'Aptitudes Pédagogiques",
"credentialCategory": "Certificat",
"educationalLevel": "Enseignement de promotion sociale",
"recognizedBy": {
"@type": "EducationalOrganization",
"name": "Institut de Promotion Sociale Saint Henri"
}
},
{
"@type": "EducationalOccupationalCredential",
"name": "Bachelier en informatique de gestion",
"credentialCategory": "Bachelier",
"educationalLevel": "Enseignement supérieur de type court",
"recognizedBy": {
"@type": "EducationalOrganization",
"name": "IEPSCF"
}
}
],
"hasOccupation": [
{
"@type": "Occupation",
"name": "Professeur d'informatique",
"occupationalCategory": "2320 Enseignants de l'enseignement technique et professionnel",
"occupationLocation": { "@type": "City", "name": "Tournai" },
"skills": "Développement d'applications de gestion, administration et sécurisation des réseaux, bases de données relationnelles, ingénierie pédagogique"
},
{
"@type": "Occupation",
"name": "Développeur d'applications",
"occupationalCategory": "2512 Développeurs de logiciels",
"skills": "PHP, Python, JavaScript, Node.js, React, Vue, PostgreSQL, Docker"
}
],
"knowsAbout": [
"Enseignement de l'informatique",
"Développement d'applications orientées gestion",
"Bases de données relationnelles",
"Modélisation MCD et MLD",
"Administration et sécurisation des réseaux",
"Active Directory",
"Docker et conteneurisation",
"Intégration et déploiement continus",
"Intelligence artificielle appliquée",
"Ingénierie pédagogique",
"RGPD en contexte scolaire"
]
}
]
}
</script>
</head>
<body>
<!-- Repère de focus pour le retour en haut de page (voir back-to-top.js).
tabindex="-1" le rend focusable par script sans l'insérer dans l'ordre
de tabulation naturel. -->
<span id="haut-de-page" tabindex="-1"></span>
<!-- Sentinelle invisible : sa sortie du champ de vision déclenche
l'affichage du bouton de remontée. aria-hidden car purement technique. -->
<span data-scroll-sentinel aria-hidden="true"></span>
<!--
Lien d'évitement — premier élément focusable de la page.
WCAG 2.4.1 : permet de contourner les blocs répétés (ici la navigation)
pour atteindre directement le contenu principal.
-->
<a class="skip-link" href="#contenu">Aller au contenu principal</a>
<!-- ==========================================================================
EN-TÊTE ET NAVIGATION
========================================================================== -->
<header class="site-header">
<div class="container site-header__inner">
<a class="site-header__brand" href="#haut-de-page">
<!-- Le logo est décoratif : le nom est déjà écrit à côté en texte.
aria-hidden évite la double annonce par le lecteur d'écran. -->
<svg class="site-header__logo" viewBox="0 0 64 64" aria-hidden="true" focusable="false">
<g fill="none" stroke-width="5.5" stroke-linecap="butt" stroke-linejoin="miter">
<path d="M11 44 V21 L20.5 33.5 L30 21 V44" stroke="currentColor"/>
<path d="M50.39 23.69 A11.5 11.5 0 1 0 50.39 41.31" stroke="#05BC8A"/>
</g>
<path d="M11 52 H53" stroke="#05BC8A" stroke-width="3.5" stroke-linecap="round"/>
</svg>
courcelle_matthieu
</a>
<!--
Bouton du menu mobile.
aria-expanded : état réel du panneau, mis à jour par JavaScript.
aria-controls : désigne le panneau commandé.
Le libellé « Menu » est textuel, pas seulement une icône : un
pictogramme de trois barres n'est pas universellement compris.
-->
<button class="nav-toggle" type="button" data-nav-toggle
aria-expanded="false" aria-controls="navigation-principale">
<svg class="nav-toggle__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path class="nav-toggle__line nav-toggle__line--top" d="M4 7h16" stroke-linecap="round"/>
<path class="nav-toggle__line nav-toggle__line--middle" d="M4 12h16" stroke-linecap="round"/>
<path class="nav-toggle__line nav-toggle__line--bottom" d="M4 17h16" stroke-linecap="round"/>
</svg>
Menu
</button>
<!--
aria-label sur le <nav> : distingue cette navigation de toute autre
région de navigation de la page (ici celle du pied de page). Les
lecteurs d'écran proposent une liste des repères — sans libellé,
l'utilisateur verrait « navigation, navigation ».
-->
<nav class="site-nav" id="navigation-principale" data-nav
aria-label="Navigation principale">
<ul class="site-nav__list">
<li><a class="site-nav__link" href="#profil" data-nav-link>Profil</a></li>
<li><a class="site-nav__link" href="#enseignement" data-nav-link>Enseignement</a></li>
<li><a class="site-nav__link" href="#coordination" data-nav-link>Coordination</a></li>
<li><a class="site-nav__link" href="#projets" data-nav-link>Projets</a></li>
<li><a class="site-nav__link" href="#competences" data-nav-link>Compétences</a></li>
<li><a class="site-nav__link" href="#formation" data-nav-link>Formation</a></li>
<li><a class="site-nav__link" href="#contact" data-nav-link>Contact</a></li>
</ul>
</nav>
</div>
</header>
<!-- ==========================================================================
CONTENU PRINCIPAL
========================================================================== -->
<main id="contenu">
<div class="container">
<!-- ====================================================================
EN-TÊTE DE PAGE
==================================================================== -->
<div class="masthead">
<span class="eyebrow">profil</span>
<!-- Un seul <h1> par page : il énonce le sujet du document.
Sur un CV, c'est le nom. -->
<h1 class="page-title">Matthieu Courcelle</h1>
<p class="page-subtitle">
Professeur d'informatique &amp; développeur d'applications de gestion
</p>
<ul class="contact-list" role="list">
<li>
<svg class="contact-list__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="3" y="5" width="18" height="14" rx="2"/>
<path d="m3 7 9 6 9-6"/>
</svg>
<a href="mailto:m@tthieu.be">m@tthieu.be</a>
</li>
<li>
<svg class="contact-list__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<circle cx="12" cy="12" r="9"/>
<path d="M3 12h18M12 3a15 15 0 0 1 0 18a15 15 0 0 1 0-18"/>
</svg>
<a href="https://www.courcellematthi.eu">courcellematthi.eu</a>
</li>
<li>
<svg class="contact-list__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M12 21s7-6.2 7-11a7 7 0 1 0-14 0c0 4.8 7 11 7 11Z"/>
<circle cx="12" cy="10" r="2.5"/>
</svg>
Région de Tournai, Belgique
</li>
</ul>
<!--
Appels à l'action. Placés haut : un recruteur ou un client qui a déjà
décidé ne doit pas parcourir toute la page pour trouver comment
prendre contact.
Le bouton d'impression est masqué à l'impression (classe screen-only).
-->
<div class="actions screen-only">
<a class="button button--primary" href="mailto:m@tthieu.be">
<svg class="button__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="3" y="5" width="18" height="14" rx="2"/>
<path d="m3 7 9 6 9-6"/>
</svg>
Me contacter
</a>
<!--
onclick inline : exception assumée et unique dans ce projet.
window.print() n'a aucun sens sans JavaScript et le sortir dans un
module imposerait un fichier entier pour une ligne. Le bouton est
volontairement absent du flux d'impression.
-->
<button class="button button--secondary" type="button" onclick="window.print()">
<svg class="button__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M7 9V3h10v6"/>
<rect x="4" y="9" width="16" height="7" rx="2"/>
<path d="M7 16h10v5H7z"/>
</svg>
Imprimer / PDF
</button>
</div>
</div>
<!-- ====================================================================
PRÉSENTATION
==================================================================== -->
<section class="intro" id="profil" data-section aria-labelledby="titre-profil">
<h2 class="intro__heading" id="titre-profil">
Enseigner, transmettre, construire des outils qui servent
</h2>
<p class="intro__text">
Professeur d'informatique depuis 2018, j'enseigne aujourd'hui à la fois dans le
secondaire technique (IPES Ath) et dans le supérieur pour adultes à l'Institut
Gabrielle Petit — développement d'applications, administration réseau, sécurisation
d'infrastructures. La transmission est au cœur de ce que je fais : structurer une
matière complexe, la rendre accessible, accompagner un public en formation jusqu'à
l'autonomie.
</p>
<p class="intro__text">
<strong>En parallèle des cours, j'ai développé des outils concrets pour les
établissements où j'interviens</strong> — une application de gestion d'événements
scolaires, des systèmes d'aide à l'administration — et j'ai construit, en autodidacte,
une vraie maîtrise de l'intelligence artificielle appliquée : skills Claude et
assistants Gemini pour aider mes collègues à préparer cours et évaluations, pour
accompagner des directions d'école sur l'administratif, la communication avec les
familles ou le <abbr title="Règlement général sur la protection des données">RGPD</abbr>
scolaire. Je gère aussi ma propre infrastructure serveur (Docker, déploiement,
monitoring) pour héberger ces outils.
</p>
<p class="intro__text">
Depuis janvier 2026, je développe également en indépendant complémentaire
(<em>underscorelab</em>) des outils de gestion pour des
<abbr title="Association sans but lucratif">ASBL</abbr>, notamment dans le secteur
du handicap.
</p>
<p class="intro__text intro__text--highlight">
Cette double compétence — pédagogue et développeur formé à l'IA appliquée — ouvre
plusieurs directions : continuer à enseigner et former, accompagner des équipes dans
l'intégration d'outils IA, ou concevoir des solutions sur mesure pour des structures
qui en ont besoin.
</p>
</section>
<!-- ====================================================================
ENSEIGNEMENT
==================================================================== -->
<section class="section" id="enseignement" data-section aria-labelledby="titre-enseignement">
<h2 class="section-title" id="titre-enseignement">Enseignement</h2>
<article class="entry">
<span class="entry__date">2023 — aujourd'hui</span>
<h3 class="entry__role">Professeur d'informatique — Enseignement supérieur pour adultes</h3>
<p class="entry__org">Institut Gabrielle Petit (ex-IPEPS Tournai-Leuze)</p>
<div class="course">
<span class="course__name">Développement d'applications orientées gestion — Projet SGBD (<span class="nowrap">Bac 3</span>)</span>
<p class="course__desc">
Conception et développement d'un système de gestion de données complet — de la
modélisation (MCD/MLD, normalisation) à une application 3-tiers connectée en base,
intégrant transactions ACID, gestion d'erreurs, déploiement Cloud/DevOps
(Git, CI/CD) et soutenance technique devant jury.
</p>
</div>
<div class="course">
<span class="course__name">Administration et sécurisation des réseaux et services (<span class="nowrap">Bac 3</span>)</span>
<p class="course__desc">
Formation à l'administration autonome d'une infrastructure réseau complète :
services (DHCP, DNS, Web, messagerie), virtualisation, adressage IPv4/IPv6,
et sécurisation avancée (pare-feu, DMZ, IDS/IPS, Active Directory/LDAP,
VLAN, GPO, VPN).
</p>
</div>
<div class="course">
<span class="course__name">Base d'administration réseaux (<span class="nowrap">Bac 1</span>)</span>
<p class="course__desc">
Introduction aux modèles OSI/TCP-IP, à l'adressage IP et au subnetting, au câblage
et aux équipements actifs (switch, routeur), avec diagnostic autonome
(ping, traceroute, sniffers) et mise en œuvre d'un petit réseau interconnecté.
</p>
</div>
<div class="course">
<span class="course__name">Initiation à l'informatique (Complément CESS)</span>
<p class="course__desc">
Apprentissage des bases de l'outil informatique (Windows, navigation, bureautique)
pour un public adulte en reprise d'études.
</p>
</div>
</article>
<article class="entry">
<span class="entry__date">2020 — aujourd'hui</span>
<h3 class="entry__role">Professeur d'informatique — Secondaire technique</h3>
<p class="entry__org">IPES Ath · Technique de transition &amp; de qualification (DI et DS)</p>
<div class="course">
<span class="course__name">Traitements de Problèmes Techniques</span>
<p class="course__desc">
Apprentissage méthodique du diagnostic et de la résolution de pannes matérielles
et logicielles, pour développer une démarche rigoureuse de dépannage informatique.
</p>
</div>
<div class="course">
<span class="course__name">Laboratoire Informatique</span>
<p class="course__desc">
Mise en pratique des notions théoriques via des ateliers concrets de montage,
configuration et manipulation de systèmes informatiques.
</p>
</div>
<div class="course">
<span class="course__name">Informatique Appliquée</span>
<p class="course__desc">
Application des concepts informatiques à des cas pratiques, faisant le lien entre
théorie algorithmique/logicielle et mise en œuvre réelle.
</p>
</div>
<div class="course">
<span class="course__name">Laboratoire de Maintenance et de Télématique</span>
<p class="course__desc">
Travaux pratiques sur la maintenance des postes de travail et les bases des réseaux
et télécommunications.
</p>
</div>
<div class="course">
<span class="course__name">Informatique de Gestion (<span class="nowrap">Office 365</span>)</span>
<p class="course__desc">
Maîtrise des outils bureautiques et collaboratifs de gestion appliqués aux besoins
administratifs et professionnels.
</p>
</div>
</article>
<article class="entry">
<span class="entry__date">2020 — 2022</span>
<h3 class="entry__role">Professeur d'informatique de gestion</h3>
<p class="entry__org">IPES Tournai · Technique de qualification Gestion (DI)</p>
<p class="entry__note">Informatique de gestion appliquée à la suite Office 365.</p>
</article>
<article class="entry">
<span class="entry__date">2018 — 2020</span>
<h3 class="entry__role">Formateur en entreprise</h3>
<p class="entry__org">ORDITECH SA</p>
<p class="entry__note">
Formation professionnelle d'adultes sur les environnements Office 365 et les
systèmes d'exploitation.
</p>
</article>
</section>
<!-- ====================================================================
COORDINATION
==================================================================== -->
<section class="section" id="coordination" data-section aria-labelledby="titre-coordination">
<h2 class="section-title" id="titre-coordination">Coordination pédagogique</h2>
<article class="entry">
<span class="entry__date">Heures de coordination</span>
<h3 class="entry__role">Développement d'outils de gestion interne</h3>
<p class="entry__org">École des Frères — Tournai</p>
<ul class="marker-list" role="list">
<li>Application de gestion des remédiations : suivi des élèves, planification et affectation des séances.</li>
<li>Application de gestion des activités complémentaires.</li>
<li>Système de valve électronique pour la diffusion d'annonces aux élèves.</li>
</ul>
</article>
</section>
<!-- ====================================================================
PROJETS
==================================================================== -->
<section class="section" id="projets" data-section aria-labelledby="titre-projets">
<h2 class="section-title" id="titre-projets">Projets</h2>
<article class="project">
<div class="project__header">
<h3 class="project__title">Festifun</h3>
<span class="badge">Institut du Sacré-Cœur Mouscron</span>
</div>
<p class="project__desc">
Application web progressive de gestion d'événement scolaire, conçue et déployée
pour l'établissement.
</p>
<ul class="project__stack" role="list">
<li>PWA</li><li>JavaScript</li><li>Node.js</li>
</ul>
</article>
<article class="project">
<div class="project__header">
<h3 class="project__title">Outils IA d'aide à la direction</h3>
<span class="badge">Institut du Sacré-Cœur Mouscron</span>
</div>
<p class="project__desc">
Assistants IA sur mesure destinés aux équipes de direction : maîtrise des outils
informatiques administratifs, communication avec les familles, application du RGPD
en contexte scolaire.
</p>
<ul class="project__stack" role="list">
<li>Claude</li><li>Gemini</li><li>NotebookLM</li>
</ul>
</article>
<article class="project">
<div class="project__header">
<h3 class="project__title">Bibliothèque de skills Claude &amp; Gems Gemini</h3>
<span class="badge">Pédagogie · Administration</span>
</div>
<p class="project__desc">
Assistants IA spécialisés développés pour l'équipe éducative : rédaction de cours,
création d'exercices et d'exemples, conception d'évaluations et aide à la correction.
</p>
<p class="project__desc">
Déclinaison à destination des directions d'établissement sur les volets
administratifs, la communication institutionnelle et la conformité RGPD.
</p>
</article>
<article class="project">
<div class="project__header">
<h3 class="project__title">underscorelab</h3>
<span class="badge">Indépendant complémentaire · depuis janvier 2026</span>
</div>
<p class="project__desc">
Développement d'outils de gestion sur mesure pour le secteur associatif,
principalement des ASBL d'aide aux personnes en situation de handicap.
</p>
<ul class="project__stack" role="list">
<li>Node.js</li><li>PHP</li><li>Python</li><li>PostgreSQL</li><li>Vue</li>
</ul>
</article>
<article class="project">
<div class="project__header">
<h3 class="project__title">Écosystème d'agents automatisés</h3>
<!-- Badge neutre : signale honnêtement un projet non abouti,
plutôt que de le présenter comme un acquis. -->
<span class="badge badge--muted">en cours de développement</span>
</div>
<p class="project__desc">
Architecture d'agents IA orchestrés via n8n sur infrastructure auto-hébergée,
pour l'automatisation de flux de travail administratifs et pédagogiques.
</p>
<ul class="project__stack" role="list">
<li>n8n</li><li>Docker</li><li>API</li>
</ul>
</article>
</section>
<!-- ====================================================================
COMPÉTENCES
==================================================================== -->
<section class="section" id="competences" data-section aria-labelledby="titre-competences">
<h2 class="section-title" id="titre-competences">Compétences</h2>
<div class="grid">
<article class="card">
<h3 class="card__title">
<svg class="card__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="m9 8-5 4 5 4M15 8l5 4-5 4"/>
</svg>
Développement
</h3>
<ul class="marker-list" role="list">
<li>PHP, Python, JavaScript (Node.js)</li>
<li>React, Vue</li>
<li>PostgreSQL, SQL, modélisation MCD/MLD</li>
<li>Applications de gestion, PWA</li>
<li>VBA / Excel avancé</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">
<svg class="card__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="3" y="4" width="18" height="6" rx="1"/>
<rect x="3" y="14" width="18" height="6" rx="1"/>
<path d="M7 7h.01M7 17h.01"/>
</svg>
Systèmes &amp; réseaux
</h3>
<ul class="marker-list" role="list">
<li>Administration et sécurisation réseau</li>
<li>Active Directory, LDAP, GPO</li>
<li>Pare-feu, DMZ, VPN, VLAN</li>
<li>Windows, Linux, macOS</li>
<li>Montage, configuration, audit</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">
<svg class="card__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M12 3 3 8v8l9 5 9-5V8Z"/>
<path d="m3 8 9 5 9-5M12 13v8"/>
</svg>
Infrastructure &amp; déploiement
</h3>
<ul class="marker-list" role="list">
<li>Docker, conteneurisation</li>
<li>Reverse proxy, SSL/TLS</li>
<li>Déploiement continu (Git, CI/CD)</li>
<li>Monitoring et sauvegarde</li>
<li>Auto-hébergement de services</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">
<svg class="card__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<circle cx="12" cy="12" r="3"/>
<path d="M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M18.4 5.6l-2.8 2.8M8.4 15.6l-2.8 2.8"/>
</svg>
Intelligence artificielle appliquée
</h3>
<ul class="marker-list" role="list">
<li>Conception de skills Claude</li>
<li>Création de Gems Gemini</li>
<li>Structuration documentaire (NotebookLM)</li>
<li>Automatisation de flux de travail</li>
<li>Accompagnement et formation d'équipes</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">
<svg class="card__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M3 7l9-4 9 4-9 4Z"/>
<path d="M7 10v5c0 1.7 2.2 3 5 3s5-1.3 5-3v-5"/>
</svg>
Pédagogie
</h3>
<ul class="marker-list" role="list">
<li>Enseignement secondaire technique</li>
<li>Enseignement supérieur pour adultes</li>
<li>Conception de séquences et d'évaluations</li>
<li>Vulgarisation technique</li>
<li>Accompagnement en reprise d'études</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">
<svg class="card__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<circle cx="12" cy="12" r="9"/>
<path d="M3 12h18M12 3a15 15 0 0 1 0 18a15 15 0 0 1 0-18"/>
</svg>
Langues
</h3>
<ul class="marker-list" role="list">
<li>Français — langue maternelle</li>
<li>Anglais — lecture technique courante</li>
</ul>
</article>
</div>
</section>
<!-- ====================================================================
FORMATION
==================================================================== -->
<section class="section" id="formation" data-section aria-labelledby="titre-formation">
<h2 class="section-title" id="titre-formation">Formation</h2>
<div class="grid">
<article class="education">
<span class="entry__date">2021 — 2024</span>
<h3 class="education__degree">Certificat d'Aptitudes Pédagogiques</h3>
<p class="education__school">Institut de Promotion Sociale Saint Henri</p>
</article>
<article class="education">
<span class="entry__date">2008 — 2011</span>
<h3 class="education__degree">Bachelier en informatique de gestion</h3>
<p class="education__school">IEPSCF</p>
</article>
</div>
</section>
<!-- ====================================================================
CONTACT
==================================================================== -->
<section class="section" id="contact" data-section aria-labelledby="titre-contact">
<h2 class="section-title" id="titre-contact">Contact</h2>
<div class="contact-block">
<p class="contact-block__text">
Une question, un projet, une opportunité d'enseignement ou de collaboration —
écrivez-moi, je réponds.
</p>
<div class="actions">
<a class="button button--primary" href="mailto:m@tthieu.be">
<svg class="button__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="3" y="5" width="18" height="14" rx="2"/>
<path d="m3 7 9 6 9-6"/>
</svg>
m@tthieu.be
</a>
<!-- Bouton de copie : alternative au mailto pour qui n'a pas de
client mail configuré. Voir copy-email.js. -->
<button class="button button--secondary" type="button" data-copy="m@tthieu.be">
<svg class="button__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="9" y="9" width="12" height="12" rx="2"/>
<path d="M5 15V5a2 2 0 0 1 2-2h10"/>
</svg>
<span data-copy-label>Copier l'adresse</span>
</button>
</div>
</div>
<!--
Région d'annonce pour lecteurs d'écran.
aria-live="polite" : le message est lu dès que le lecteur a fini
son énoncé en cours, sans interrompre l'utilisateur.
Le conteneur doit exister dans le DOM avant l'insertion du texte,
sinon l'annonce n'est pas déclenchée.
-->
<div class="sr-status" role="status" aria-live="polite" data-status></div>
</section>
</div>
</main>
<!-- ==========================================================================
PIED DE PAGE
========================================================================== -->
<footer class="site-footer">
<div class="container site-footer__inner">
<span>&copy; 2026 Matthieu Courcelle</span>
<nav aria-label="Navigation de pied de page">
<ul class="site-footer__links">
<li><a href="#haut-de-page">Haut de page</a></li>
<li><a href="mailto:m@tthieu.be">m@tthieu.be</a></li>
</ul>
</nav>
</div>
</footer>
<!--
Bouton de retour en haut.
Masqué par défaut en CSS, révélé par JavaScript après défilement.
aria-label car le bouton ne contient qu'une icône.
-->
<button class="to-top" type="button" data-to-top aria-label="Retourner en haut de la page">
<svg viewBox="0 0 24 24" width="18" height="18" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M12 19V5M5 12l7-7 7 7"/>
</svg>
</button>
</body>
</html>