Ce dépôt contient le code source d'un portfolio statique généré avec Nikola. Le site présente mon parcours de reconversion vers la data science et regroupe des projets de machine learning, deep learning, NLP, RAG, MLOps et data visualisation.
Documentation officielle Nikola : https://getnikola.com
Fichier de configuration principal : conf.py
Le portfolio sert à documenter des projets data de bout en bout : contexte métier, choix techniques, résultats, limites, déploiement et liens vers les dépôts GitHub associés.
Le contenu est organisé autour de trois niveaux :
- une page d'introduction au parcours et aux compétences ;
- des rapports de projets publiés comme posts Nikola ;
- des pages complémentaires, comme le diagramme de compétences.
conf.py: configuration Nikola, thème, langues, GitHub Pages et métadonnées GitHub ;posts/: rapports de projets et pages éditoriales publiées comme posts ;pages/: pages indépendantes ;files/: fichiers statiques copiés à la racine du site généré, dontsite.webmanifest;paradigm-shift/: thème Nikola local adapté depuis HTML5 UP Paradigm Shift ;plugins/: plugins Nikola locaux créés pour ce portfolio ;requirements.txt: dépendances Python nécessaires au build.
cache/ et output/ sont des artefacts générés par Nikola. Ils ne doivent pas
être commités.
- Python 3.8+
- Nikola et les dépendances du projet
Installation recommandée :
python -m pip install -r requirements.txtInstallation minimale :
python -m pip install nikolaLe plugin github_metadata utilise aussi certifi, déclaré dans
plugins/github_metadata/requirements.txt. Si besoin :
python -m pip install -r plugins/github_metadata/requirements.txtConstruire le site :
nikola buildPrévisualiser en local :
nikola serve -bVoir toutes les commandes :
nikola helpNettoyer les caches avant un build propre :
nikola clean
rm -f .doit.dbVérifier les liens internes après génération :
nikola check -lLe thème actif est paradigm-shift, configuré dans conf.py :
THEME = "paradigm-shift"
EXTRA_THEMES_DIRS = ["."]Il s'agit d'une adaptation Nikola du template HTML5 UP Paradigm Shift. Les templates principaux sont :
base.tmpl: structure globale, assets, footer et scripts ;post.tmpl: rendu standard des posts ;post_gh.tmpl: rendu du post portfolio avec liste GitHub ;page.tmpl: rendu des pages indépendantes dans la structure<section><div class="content">.
Deux plugins Nikola ont été créés pour les besoins du portfolio.
Emplacement : plugins/mermaid/
Ce plugin ajoute un shortcode Nikola permettant d'insérer des diagrammes Mermaid dans les contenus Markdown.
Il sont disponibles sur leur repository respectif :
Exemple d'utilisation :
{{% mermaid %}}
mindmap
root((Data Scientist - ML))
Analyse de données
MLOps
NLP et RAG
{{% /mermaid %}}Le shortcode produit un bloc HTML :
<div class="mermaid">...</div>Le rendu côté navigateur est assuré par le plugin lui-même : il injecte un
loader Mermaid.js protégé avec le shortcode. Le thème n'a donc pas besoin de
charger Mermaid dans base.tmpl.
Usage actuel : carte de compétences dans posts/02-nouveau-depart.md.
Emplacement : plugins/github_metadata/
Ce plugin injecte un objet github dans le contexte global des templates Nikola,
sur le modèle de jekyll-github-metadata. Il permet d'afficher une liste de
dépôts GitHub sans dupliquer toute la logique dans les templates.
Configuration actuelle dans conf.py :
GITHUB_METADATA = {
"manual_repositories": [
{"full_name": "stephmnt/optimisation-des-rendements-agricoles", "release_badge": True, "created_at_badge": True},
{"full_name": "stephmnt/eval_RAGAS", "release_badge": True, "created_at_badge": True},
],
}Le plugin peut fonctionner de deux manières :
- avec une liste manuelle de dépôts, comme dans ce projet ;
- avec l'API publique GitHub pour récupérer les dépôts publics d'un utilisateur.
Le template post_gh.tmpl utilise ensuite github.public_repositories pour
générer la liste des dépôts, les liens, les badges de release et les dates de
création.
Usage actuel : page posts/03-portolio.md, qui déclare :
.. template: post_gh.tmplLe fichier ressources/share-plugin.md conserve des notes sur la publication
d'un plugin dans l'index officiel Nikola. Pour un plugin partageable, les fichiers
importants sont :
README.md;requirements.txtsi le plugin dépend de paquets Python ;conf.py.samplesi le plugin expose des options de configuration ;[plugin-name].pluginpour les métadonnées Nikola/Yapsy ;[plugin-name].pypour le code du plugin.
Le déploiement est automatisé avec GitHub Actions via :
.github/workflows/deploy.ymlLe workflow utilise l'action getnikola/nikola-action@v2 et exécute :
nikola github_deployConfiguration attendue dans conf.py :
GITHUB_SOURCE_BRANCH = 'main'GITHUB_DEPLOY_BRANCH = 'gh-pages'GITHUB_COMMIT_SOURCE = Falsecar le déploiement est géré par Actions
Dans GitHub -> Settings -> Pages :
- Source : Deploy from a branch
- Branch :
gh-pages//(root)
Une fois le workflow terminé, la page devient visible après quelques minutes.
git checkout --orphan gh-pages
git rm -rf .
touch .nojekyll
git commit -m "Init gh-pages"
git push origin gh-pages
git checkout main.doit.dbne doit jamais être versionné, car son format dépend de l'OS. Supprimez-le localement et laissez Nikola le régénérer.- Erreur
dbm.error: db type could not be determined: supprimez.doit.dbet relanceznikola build. cache/etoutput/sont des artefacts : ils ne doivent pas être commités.- Si les badges GitHub ne s'affichent pas, vérifier la configuration
GITHUB_METADATAet les champsfull_namedes dépôts. - Si un diagramme Mermaid ne s'affiche pas, vérifier que le shortcode est bien
fermé avec
{{% /mermaid %}}.
HTML5 UP Paradigm Shift est disponible sous licence Creative Commons BY 3.0.