Aller au contenu

Créée le 12/11/2026 à 14h00 · modifiée le 13/11/2026 à 22h30

KiosKe.fr : veille des médias indépendants et voix LGBTQIA+

Qu'est-ce que c'est ?

Le KiosKe.fr (disponible sur github) est une veille automatisée des médias indépendants et des luttes, en particulier les voix LGBTQIA+ qu'on n'entend pas assez. Contrairement aux agrégateurs de géants, c'est un ensemble de ~1035 pages HTML statiques générées toutes les 30 minutes, sans API distante, sans JavaScript qui appelle le serveur, sans cookie de traçage.

  • Page d'accueil : toutes les sources rangées par catégorie
  • 7 pages de catégories : articles mélangés et triés par date
  • Pages RSS par catégorie : flux à jour automatiquement
  • Page de découverte des flux : lister les sources par catégorie avec icônes décorées aux couleurs du drapeau trans

Aucun JavaScript qui appelle une API distante. Pas de publicité, pas de pistage, pas de dépendance à un géant du web. Les images sont hébergées en local : tout vient de kioske.fr.

Mots-clés : veille, médias indépendants, LGBTQIA+, RSS, Twitch, informatique libre, PWA, statique.

Les principes

  • Statique : pages HTML régénérées toutes les 30 minutes, servies en pur HTML (pas d'exécution serveur)
  • Auto-hébergée : sur mon serveur Debian, derrière nginx, sans dépendance externe
  • Sans pistage : pas de cookies de traçage, pas d'analytics, pas de services tiers, rien que tu cliques n'est enregistré
  • PWA : installable sur téléphone et ordinateur, fonctionne hors ligne (service worker v14), notification native possible
  • Minimaliste : HTML, CSS, et JavaScript limité (pas de framework)
  • Accessible : choix des thèmes, taille de police réglable, respects des préférences de contraste

Fonctionnement

Sources

Le KiosKe suit trois types de flux (fichiers texte, édités à la main) :

  1. Flux RSS : médias indépendants, sites de luttes, blogs LGBTQIA+
  2. Fichier sources/RSS_feeds.txt : URL du flux + catégorie
  3. Chaînes Twitch : créateur·rice·s et streamer·euse·s LGBTQIA+
  4. Fichier sources/Twitch_feeds.txt : ID de chaîne + catégorie
  5. Utilise yt-dlp pour récupérer les infos (titre, durée, vignette)
  6. Flux corrigés : ajustements locaux
  7. Fichier sources/flux_corrige_main.txt : ignorer un flux (!"URL"), changer son nom affichéé ("URL" | Nom)

Mise à jour automatique (toutes les 30 minutes)

Un timer systemd lance le build complet sur le serveur :

  1. Récupération réseau : articles RSS, vidéos Twitch, aperçus Open Graph
  2. Stockage : tout va dans une base SQLite locale (data/historique.db) + un cache local d'images
  3. Génération : la page d'accueil, 7 pages de catégories, ~1028 pages d'articles (une par article)
  4. Flux RSS dynamiques : rss.xml (tous les articles) + 7 rss/catégorie.xml
  5. Publication : copie uniquement les fichiers modifiés vers /var/www/kioske.fr

Chaque page contient tout (texte, image, date) : aucun JavaScript n'appelle le serveur.

La page d'accueil

  • Navbar sticky en haut : logo + stats à gauche, barre de recherche au centre, cœur ♡ (favoris) + menu ≡ à droite
  • Bloc immuable : cagnotte, lien Discord, code de conduite — jamais modifié par le build
  • Galerie : 12 derniers articles avec image, scroll horizontal, clic pour ouvrir
  • Étiquettes des sources : rangées par catégorie, cliquables pour ouvrir un panneau

Pages de catégories

  • Articles mélangés : tous les articles de la catégorie, triés par date (pas de groupement par source)
  • Grille paginée : 30 articles par page, pagination JS
  • Navigation hiérarchique : bouton retour en haut à gauche (vers l'accueil)

Pages d'articles

  • Contenu du flux : titre, image, description, date (en heure de Paris)
  • Lien original : redirection vers l'article sur le site source
  • Navigation : Précédent/Suivant pour circuler entre articles, cœur ♡ pour ajouter aux favoris
  • Navigation hiérarchique : retour vers la catégorie parent

Favoris et recherche

  • Cœur ♡ : cliquable dans la barre de navigation, violet quand en favori, stockage local (localStorage)
  • Panneau Mes favoris : dans le menu ≡, voir tous les favoris, exporter/importer en JSON
  • Barre de recherche : cherche dans titres, descriptions, sources, dates ; crée un panneau de résultats avec cartes cliquables

Thèmes

Deux thèmes au choix (+ possibilité d'en ajouter) :

  1. Voie Lactée : fond noir étoilé avec bande galactique
  2. Pluie : matricielle trans (bleu, rose, blanc)

Tous deux respectent les couleurs du drapeau trans, contraste accessible, et sélectionnables avec CSS pur (pas de cookie, choix par visite).

PWA et hors ligne

Le site est installable sur téléphone (ajouter à l'écran d'accueil) et ordinateur (menu Installer). Un service worker v14 cache les assets statiques, donc : - Les pages téléchargées une fois restent visibles hors ligne - Les asset (CSS, fonts, images) ne rechargent qu'en cas de changement - À jour automatiquement sans actions de l'utilisateur·rice

Architecture

Fichier / dossier Rôle
kioske/ Paquet Python : config.py (chemins + settings), sources.py, flux.py, twitch.py, apercus.py (Open Graph), images.py, historique.py (SQLite), rendu.py (accueil), rendu_statique.py (pages d'articles/catégories), themes.py, rss.py, construction.py, publication.py, etc. + feuilles de style (style.css, pluie.css).
sources/ RSS_feeds.txt, Twitch_feeds.txt, flux_corrige_main.txt — listes éditées à la main.
data/ immuable.json (empreinte du bloc immuable, suivi par git), historique.db (SQLite, tous les articles/vidéos récupérés), cache/ (images téléchargées), build.lock (verrou), tous locaux jamais publiés.
build/ Le site généré (hors git, jamais édité à la main) : index.html (accueil), articles/{id}-{slug}/index.html (~1028), categories/{slug}/index.html (7), rss.html (découverte), rss.xml + rss/{slug}.xml (feeds par catégories), img/veille/ (images téléchargées), copie de static/, robots.txt, sitemap.xml.
bin/ Points d'entrée : build_site.py, publier_public.py, garde_immuable.py. Quelques lignes chacun.
deploy/ Scripts serveur : kioske.sh (point d'entrée), installer_serveur.sh, deployer_nginx.sh, verifier_serveur.sh, lib_config.sh, systemd/ (timer + service), fail2ban/ (jails).
accueil/ bloc_immuable.html — source du bloc en haut de l'accueil, jamais modifié par le build.
static/ Assets publiés tels quels : favicon.svg, apple-touch-icon.png, preview.png, fonts/.
kioske.cfg Tous les réglages : domaine, nom, thèmes, veille (nombre articles par source, délai Twitch), serveur (chemin web, intervalle timer). Lu par Python et par les scripts bash.
requirements.txt Dépendances Python : feedparser (RSS), yt-dlp (Twitch), legacy-cgi (query strings).

Dépendances

Python : juste trois paquets essentiels (+ stdlib) :

feedparser      # Lecture des flux RSS
yt-dlp          # Récupération des infos Twitch
legacy-cgi      # Parsage des query strings

Aucun framework web, aucune base distante, aucun CDN.

Pour qui ?

Pour toi si tu veux :

  • Rester informé·e sur les luttes, l'indépendance numérique, les voix LGBTQIA+ qu'on oublie
  • Découvrir des médias qu'on ne voit pas à la télé ni dans les algorithmes des géants
  • Avoir une source fiable, sans passer par un agrégateur propriétaire ou un réseau social
  • Contrôler tes données : chaque clic sur kioske.fr reste chez toi, rien n'est enregistré
  • Installer une app sur ton téléphone ou ton ordi, et l'utiliser hors ligne

Réalisation technique

Le projet s'est construit progressivement :

  • Séparation de gauchiasses.fr (2026-11-11) : KiosKe devient autonome
  • Réorganisation (2026-11-11) : code + site + déploiement regroupés
  • Navbar sticky + panneaux JS (2026-11-13 nuit) : refonte complète de la navigation
  • Panneaux de catégories (2026-11-13 nuit) : afficher les articles de chaque catégorie
  • Favoris refondue (2026-11-13 nuit) : stockage des métadonnées complètes, export JSON
  • Pages statiques (2026-11-13 matin) : navigation hiérarchique entre articles et catégories
  • Corrections de liens (2026-11-13 nuit) : les slugs utilisent maintenant les titres des previews
  • PWA consolidée (v14, 2026-11-13) : service worker stable, installation native

Limites connues

  • Sources manuelles : les ajouter/retirer demande d'éditer des fichiers texte (pas de panneau admin pour l'instant)
  • Taille des flux : limité à N articles par source (configurable) pour tenir la page légère et la requête réseau rapide
  • Dépendance Twitch : si une chaîne disparaît, les vidéos ne sont plus trouvées ; yt-dlp peut être bloqué par les changements de l'API
  • Heures Paris : tous les timestamps sont affichés en CET/CEST ; pas de fuseau personnalisable (volontaire : c'est mon point de vue)

Pourquoi ces choix ?

  1. Donner de la visibilité à des voix qu'on n'entend pas assez, sans subvention ni pub
  2. Rester maître du code, de la structure, des données
  3. Zéro tracker : chaque lecteur·rice maîtrise ce qu'iel voit et ce qu'iel partage
  4. Une seule machine : pas de service tiers, pas de facture d'hébergement cloud, juste mon serveur Debian
  5. Que ce soit simple à maintenir et à modifier : c'est juste un script Python + des pages statiques

C'est mon petit geste pour les médias indépendants et la communauté LGBTQIA+, sans prétendre résoudre le problème de l'information. Ça reste une veille personnelle, pas un média en soi.

Commentaires

Aucun commentaire pour l’instant.

Laisser un commentaire