Changelog
Historique des évolutions du blog.
Modification
- Migration Astro 5 → Astro 6 : `glob()` loader, `render(entry)`, `ClientRouter`, content config dans `src/`
- Migration Tailwind CSS 3 → Tailwind CSS 4 : `@tailwindcss/vite`, `@theme` en CSS, suppression du config JS
Ajout
- Analytics Umami : script chargé en lazy après `window.load` pour préserver le Speed Index
Ajout
- Recherche vocale dans la modale de recherche via la Web Speech API (Chrome, Edge, Safari)
- Structured data JSON-LD : BlogPosting, Speakable, dateModified et WebSite schema sur la homepage pour le VSEO
Modification
- Header : disparaît au scroll vers le bas, réapparaît au scroll vers le haut
- Barre de progression de lecture découplée du header en élément fixe indépendant
Correctif
- Token FCM retiré du localStorage ; désabonnement via deleteToken() côté client uniquement, sans appel serveur
- Erreurs ElevenLabs loggées en interne, message générique retourné au client
- Limite de 4 Ko appliquée sur les corps des requêtes POST des endpoints push
Ajout
- Rapport d'audit de sécurité (SECURITY-REPORT.md)
Modification
- Ping des abonnés FCM : passage de hebdomadaire (lundi) à quotidien (9h UTC)
Correctif
- Barre de progression de lecture : exclut la section « Articles similaires » du calcul
- Comparaison du secret PUSH_NOTIFY_SECRET en constant-time via crypto.subtle.timingSafeEqual
- Validation des paramètres slug et date dans l'API audio avant construction des chemins R2
- Rate limiting : 10 req/60s sur /api/push/subscribe et 20 req/60s sur /api/search
- Headers de sécurité HTTP sur toutes les réponses API : X-Content-Type-Options, X-Frame-Options, HSTS, Referrer-Policy
Sécurité
- Clé Firebase API vérifiée dans Firebase Console : restreinte à Cloud Messaging API et au referrer https://dumont.me
Ajout
- Bouton notifications : affiche « ✓ Inscrit aux notifications » avec un style discret une fois abonné
- Encart Résumé : résumé en points clés rétractable avec dégradé, déroulable au clic
- Widget Green IT : poids de la page, énergie consommée par requête et budget carbone sur chaque article
- Page Changelog : historique public des évolutions du blog, accessible depuis le footer
- Nouvel article : Quand l'IA code à votre place, qui écrit les règles ? — approche Contract-First en 4 chapitres (JSON Schema, OpenAPI, Schema Registry, Data Contracts)
Modification
- Notifications push découplées de la requête HTTP via Cloudflare Queue : POST /api/push/notify retourne 202 immédiatement, diffusion FCM en arrière-plan avec jusqu'à 3 tentatives automatiques
Correctif
- Bannière de révision : affiche la période exacte « telle qu'elle existait du [date] au [date] »
Modification
- robots.txt enrichi : accès accordé à Claude-User, Claude-SearchBot, ChatGPT-User, OAI-SearchBot, Googlebot, Google-Extended et Perplexity-User
Lancement
Ajout
- Première version publique : Astro SSG, Tailwind, MDX, lecteur audio ElevenLabs, archivage des révisions sur R2, articles similaires par embeddings vectoriels (Cloudflare Vectorize + Workers AI), recherche full-text Pagefind, API Edge sur Cloudflare Workers