Site Astro de l'association Le Singe Du Numérique.
Le site présente l'association, ses actions, ses événements, ses ressources et son blog. Il est construit comme un site statique Astro, avec un blog basé sur astro:content.
L'association a pour objet :
- la démocratisation et l'inclusion numérique pour tous les publics
- le soutien à la transformation numérique du tissu associatif local
Le site sert donc à :
- présenter la mission de l'association
- expliquer ses actions et ses priorités
- publier des ressources utiles
- structurer un blog avec les rubriques
Articles,VeilleetTechnos
- Astro pour la structure du site
astro:contentpour les contenus du blog- CSS maison
- build statique généré dans
dist/
/
├── public/ # assets publics (logo, favicon, etc.)
├── src/
│ ├── content/
│ │ └── blog/ # articles Markdown du blog
│ ├── layouts/ # layouts Astro partagés
│ ├── pages/ # pages du site
│ ├── styles/ # styles globaux
│ └── content.config.ts # schéma des contenus astro:content
├── dist/ # build statique généré
└── package.json
Les pages du site sont dans src/pages/.
Exemples :
src/pages/index.astrosrc/pages/asso.astrosrc/pages/blog/index.astro
Chaque fichier .astro devient une route.
Les pages internes réutilisent un layout commun dans src/layouts/SiteLayout.astro.
Cela permet de partager la navigation, le footer et les métadonnées.
Le blog utilise astro:content.
Les articles sont stockés dans :
src/content/blog/*.md
Le schéma du contenu est défini dans :
src/content.config.ts
Chaque article contient actuellement :
titledescriptionpubDaterubriquetagsauthor
Exemple minimal :
---
title: "Mon article"
description: "Résumé court de l'article."
pubDate: 2026-03-29
rubrique: "Articles"
tags: ["Débutant", "Cybersécurité"]
author: "Le Singe Du Numérique"
---
# Titre
Contenu Markdown...Depuis la racine du projet :
| Commande | Action |
|---|---|
npm install |
installe les dépendances |
npm run dev |
lance le serveur local sur http://localhost:4321 |
npm run build |
génère le site statique dans dist/ |
npm run preview |
prévisualise le build localement |
- Créer un fichier Markdown dans
src/content/blog/ - Ajouter les métadonnées attendues
- Choisir une rubrique parmi :
ArticlesVeilleTechnos
- Ajouter des tags cohérents
- Lancer
npm run buildpour vérifier que le schéma Astro est respecté
Une base d'administration Decap CMS est préparée pour le blog.
En local :
- lancer le site avec
npm run dev - lancer le backend local avec
npx decap-server - ouvrir
/admin
En production :
- site public :
https://lesingedunumerique.fr - administration :
https://lesingedunumerique-oauth.vercel.app/admin/
L'administration publique ne doit pas être servie depuis O2Switch.
Le site public est déployé automatiquement depuis main via GitHub Actions.
Les workflows :
Security CIsur PR etmain:npm audit(racine +decap-oauth-vercel)- build Astro (racine +
decap-oauth-vercel) - scan de secrets (
gitleaks)
Dependabot Auto Merge:- auto-approve + auto-merge pour les mises à jour
patch/minor - les mises à jour
majorrestent manuelles
- auto-approve + auto-merge pour les mises à jour
Deploy O2Switchsurmain:- installe les dépendances
- exécute
npm audit --audit-level=high - build le site Astro
- déploie
dist/vers O2Switch (FTPS) - exécute des healthchecks post-déploiement
- déclenche un rollback automatique vers le dernier artefact sain si un healthcheck échoue
Secrets GitHub à renseigner dans le dépôt :
O2SWITCH_FTP_SERVERO2SWITCH_FTP_USERNAMEO2SWITCH_FTP_PASSWORDO2SWITCH_REMOTE_DIRO2SWITCH_HEALTHCHECK_URLS(optionnel)
Valeur attendue pour O2SWITCH_REMOTE_DIR :
- le chemin distant exact de la racine web du site, par exemple
/lesingedunumerique.fr/
Valeur possible pour O2SWITCH_HEALTHCHECK_URLS :
- liste d'URLs séparées par des virgules ou des retours ligne, par exemple :
https://lesingedunumerique.fr/,https://lesingedunumerique.fr/sitemap.xml
Note :
- le workflow n'envoie pas
admin/sur O2Switch - l'administration reste servie uniquement sur Vercel
- au premier déploiement, s'il n'existe pas encore d'artefact sain, un rollback automatique n'est pas possible
Les jeux sont hébergés par la super-admin (https://admin.stan-bouchet.fr/jeux/<slug>)
et embarqués en iframe. Le site ne contient plus de HTML de jeu : il lit le
catalogue src/data/jeux.json, généré et committé par l'admin à chaque
publication. Ne pas l'éditer à la main, il serait écrasé au prochain sync.
Ce catalogue alimente /sensibilisation, /sensibilisation/jeux et une page par
jeu (src/pages/sensibilisation/jeux/[slug].astro). Les vignettes sont copiées
dans public/jeux/covers/.
Pour ajouter ou modifier un jeu : tout se passe dans l'admin (upload de la
version, métadonnées de la page publique, publication), puis « Déployer » pousse
sur main et déclenche le build O2Switch.
L'origine qui sert les jeux doit rester listée dans frame-src de la CSP
(public/.htaccess), sinon l'iframe est bloquée par le navigateur.
Le site a déjà reçu plusieurs améliorations d'accessibilité. L'état public reste documenté sur la page accessibilité du site et doit rester cohérent avec les audits et tests réellement effectués.
Le dépôt utilise une séparation claire :
- contenus éditoriaux et médias : CC BY-NC-SA 4.0
- code source et fichiers techniques : droits réservés
- logo, nom de l'association et identité visuelle : droits réservés
Voir :