Ajout page Veille avec agrégation RSS automatique

- Création d'un plugin Docusaurus pour agréger les flux RSS au build
  * Récupère 37 flux RSS depuis le fichier OPML
  * Filtre les articles des dernières 24h
  * Génère un fichier JSON statique pour chargement instantané

- Page Veille avec composant React
  * Affichage des articles groupés par catégorie
  * Menus dépliables (repliés par défaut)
  * Chargement ultra-rapide depuis JSON pré-généré
  * Support bilingue FR/EN

- GitHub Actions pour rebuild automatique quotidien
  * Workflow déclenché tous les jours à 6h UTC
  * Met à jour les flux RSS via l'API Cloudflare Pages
  * Déclenchement manuel possible

- Configuration Webpack pour compatibilité navigateur
  * Désactivation des polyfills Node.js côté client
  * Correction du warning onBrokenMarkdownLinks

- Icône RSS dans la navbar
  * Lien vers le flux Atom du blog
  * Style cohérent avec les autres icônes

125 articles trouvés dans les dernières 24h lors du dernier build.
This commit is contained in:
Tellsanguis 2025-12-06 09:33:43 +01:00
parent aaf03916d4
commit df63713055
16 changed files with 1148 additions and 5 deletions

View file

@ -0,0 +1,155 @@
.veillePage {
padding: 2rem 0;
min-height: calc(100vh - 60px);
}
.header {
text-align: center;
margin-bottom: 3rem;
padding-bottom: 2rem;
border-bottom: 2px solid var(--ifm-color-emphasis-200);
}
.header h1 {
font-size: 3rem;
margin-bottom: 1rem;
color: var(--ifm-color-primary);
}
.subtitle {
font-size: 1.2rem;
color: var(--ifm-color-content-secondary);
max-width: 800px;
margin: 0 auto 2rem;
line-height: 1.6;
}
.actions {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
margin-top: 2rem;
}
.downloadButton {
display: inline-block;
padding: 0.75rem 2rem;
background: var(--ifm-color-primary);
color: white;
text-decoration: none;
border-radius: 8px;
font-weight: 600;
font-size: 1.1rem;
transition: all 0.2s ease;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.downloadButton:hover {
background: var(--ifm-color-primary-dark);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
color: white;
text-decoration: none;
}
.opmlInfo {
font-size: 0.9rem;
color: var(--ifm-color-content-secondary);
font-style: italic;
margin: 0;
}
.content {
margin: 3rem 0;
}
.footer {
margin-top: 4rem;
padding-top: 3rem;
border-top: 2px solid var(--ifm-color-emphasis-200);
}
.footer h2 {
text-align: center;
margin-bottom: 2rem;
color: var(--ifm-color-content);
}
.infoGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.infoCard {
padding: 1.5rem;
background-color: var(--ifm-background-surface-color);
border: 1px solid var(--ifm-color-emphasis-200);
border-radius: 8px;
transition: all 0.2s ease;
}
.infoCard:hover {
border-color: var(--ifm-color-primary);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.infoCard h3 {
margin-top: 0;
margin-bottom: 1rem;
color: var(--ifm-color-primary);
font-size: 1.3rem;
}
.infoCard p {
margin-bottom: 0;
line-height: 1.6;
color: var(--ifm-color-content);
}
.infoCard ul {
margin: 0;
padding-left: 1.5rem;
line-height: 1.8;
}
.infoCard li {
margin-bottom: 0.5rem;
color: var(--ifm-color-content);
}
/* Responsive */
@media (max-width: 996px) {
.header h1 {
font-size: 2.5rem;
}
.subtitle {
font-size: 1.1rem;
}
.infoGrid {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.veillePage {
padding: 1rem 0;
}
.header h1 {
font-size: 2rem;
}
.subtitle {
font-size: 1rem;
}
.downloadButton {
padding: 0.6rem 1.5rem;
font-size: 1rem;
}
}

View file

@ -0,0 +1,39 @@
import React from 'react';
import Layout from '@theme/Layout';
import RSSFeedWidget from '@site/src/components/RSSFeedWidget';
import styles from './veille.module.css';
export default function Veille(): JSX.Element {
return (
<Layout
title="Tech Watch"
description="Daily RSS feeds on SysAdmin, DevOps, SRE, Cloud, and Security">
<main className={styles.veillePage}>
<div className="container">
<header className={styles.header}>
<h1>Tech Watch</h1>
<p className={styles.subtitle}>
Today's articles from recognized sources in SysAdmin, DevOps, SRE, Cloud, and Cybersecurity
</p>
<div className={styles.actions}>
<a
href="/veille-tech.opml"
download="veille-tech.opml"
className={styles.downloadButton}>
Download OPML file
</a>
<p className={styles.opmlInfo}>
Import this file into your favorite RSS reader (Feedly, Inoreader, FreshRSS, etc.)
</p>
</div>
</header>
<section className={styles.content}>
<RSSFeedWidget />
</section>
</div>
</main>
</Layout>
);
}