Mag.Style : Lecteur RSS autrement

MagStyle
MagStyle

Lecteur RSS web auto-hébergé avec newsletter intégrée

Script PHP 1.0 115.32 Ko 7

MagStyle est un lecteur de flux RSS auto-hébergé qui présente tes lectures comme un véritable magazine : couverture, articles longs, brèves, mise en page éditoriale variée. Pas d’algorithme, pas de fil infini, pas de cloud tiers — tu installes, tu héberges, tes données restent chez toi.

🟣 Auto-hébergé · PHP 8 + SQLite · Aucune dépendance externe


🔐 Sécurité

L’application a été conçue avec une attention particulière à la protection de tes données et à la limitation de la surface d’attaque. Voici les garanties techniques en place :

  • Mot de passe administrateur haché avec bcrypt (algorithme par défaut de PHP, coût standard). Jamais stocké en clair.
  • Sessions PHP durcies : nom de cookie personnalisé (MAGSTYLE_SID), HttpOnly, SameSite=Lax, durée de vie 7 jours, cookie Secure si HTTPS, régénération de l’ID à chaque connexion (anti-fixation).
  • Protection CSRF : jeton aléatoire par session, présent dans tous les formulaires et appels AJAX, vérifié côté serveur via hash_equals() en temps constant.
  • Sanitization stricte du HTML distant : tous les contenus d’articles téléchargés sont nettoyés via DOMDocument avec une whitelist de balises et d’attributs. Scripts, iframes, gestionnaires d’événements et styles arbitraires sont supprimés avant stockage.
  • Chiffrement des secrets : le mot de passe SMTP est chiffré en base avec AES-256-CBC, IV aléatoire, clé dérivée (SHA-256) du secret applicatif généré à l’installation.
  • Protection du système de fichiers : la base SQLite et les logs vivent dans un dossier data/ protégé par un .htaccess avec Deny from all. Création automatique au setup.
  • Anti-bruteforce : délai d’une seconde imposé après chaque tentative de connexion ratée.
  • Aucun tracking : pas d’analytics, pas de pixel, pas de télémétrie. Les seules connexions sortantes sont les téléchargements de tes flux RSS et les envois SMTP que tu déclenches.
  • Newsletter conforme RFC 8058 : en-têtes List-Unsubscribe et List-Unsubscribe-Post pour le désabonnement en un clic depuis Gmail/Outlook/Apple Mail. Jeton individuel par destinataire.
  • Code entièrement auditable : ~30 fichiers PHP, pas de Composer, pas de dépendance tierce. Surface d’attaque minimale, mises à jour de sécurité que tu maîtrises.

🟣 Fonctionnalités

Tout ce qu’il faut pour transformer ta veille RSS en magazine — et c’est gratuit, libre, sans compte distant.

📰 Mise en page magazine

  • Cinq tailles de cartes qui cohabitent dans la grille : Featured (couverture), Large (avec image), Medium (texte long), Standard, Brief (brèves).
  • Tri intelligent selon la longueur de l’article et la présence d’une image, pour éviter les espaces vides dans la grille.
  • Premier article de chaque catégorie automatiquement promu en couverture (image + titre seuls).
  • Typographie éditoriale : Playfair Display pour les titres, Lora pour les italiques, Inter pour l’interface.
  • Mode sombre et vue compacte commutables d’un clic ou d’une touche (D, C).

📚 Lecture

  • Modale de lecture interne : tu lis l’article sans quitter MagStyle, débarrassé des publicités, bandeaux de cookies et suggestions du site source.
  • Mode Readability : pour les flux qui ne diffusent que des extraits, MagStyle peut récupérer automatiquement le texte intégral et l’extraire (équivalent du mode lecture des navigateurs).
  • Bouton Readability à la demande (📄) dans la modale, utilisable même sur les flux complets pour nettoyer un article récalcitrant.
  • Marquer lu / Favori en un clic depuis la carte ou la modale.
  • Recherche full-text sur les titres, contenus et noms de sources (raccourci /).
  • Raccourcis clavier : J/K pour naviguer entre articles, D pour le mode sombre, C pour la vue compacte, / pour la recherche.
  • Impression d’article avec une feuille de style dédiée : seul l’article est imprimé, sans interface ni page blanche en fin.

🗂️ Organisation

  • Catégories créables, renommables, réordonnables par glisser-déposer.
  • Affectation simple d’un flux à une catégorie depuis l’admin.
  • Filtre par source : clic sur le nom du flux dans une carte pour ne voir que ses articles.
  • Bibliothèque personnelle rassemblant tous tes favoris en mise en page magazine.
  • « Tout marquer comme lu » à l’échelle d’une catégorie pour repartir à zéro sans surcharge.
  • Pagination interne par catégorie au-delà du nombre d’articles configuré.

🌅 Rituels éditoriaux

  • Édition du jour figée : à l’heure de ton choix (par défaut 7 h), MagStyle « publie » l’édition de la veille. Tu lis ce qui était là le matin, pas un fil mouvant. Sentiment de finitude restauré.
  • Refresh automatique incrémental : un seul flux téléchargé par visite, en arrière-plan. Le site n’est jamais lent, même avec cinquante flux. Compatible avec tous les hébergeurs (pas besoin de PHP-FPM ni de cron).
  • Refresh manuel à la demande (bouton ↻) pour forcer un fetch complet.
  • Rétention configurable : purge automatique des articles lus de plus de N jours (90 par défaut), favoris épargnés.

✉️ Newsletter intégrée

  • Curation depuis la bibliothèque : tu marques tes favoris pour la newsletter en cours via un bouton ✉ dédié.
  • Gestion des destinataires : ajout simple ou import en bloc (format Nom <email> toléré). Désabonnement individuel suivi.
  • Composition : titre du numéro, introduction éditoriale, retrait d’articles à la dernière minute.
  • Test d’envoi à soi-même avant l’envoi réel.
  • Envoi synchrone avec retour détaillé : succès / erreurs par destinataire.
  • Désabonnement RFC 8058 : bouton intégré aux clients mail modernes + lien personnalisé dans chaque envoi.
  • Historique des envois avec statistiques (nombre de destinataires, succès, erreurs).
  • Log technique consultable depuis l’admin pour debug rapide.

🔌 Connexions et formats

  • SMTP authentifié : client natif (sockets PHP) supportant STARTTLS (587), SSL/TLS (465), AUTH LOGIN. Compatible Gmail, O2switch, OVH, Mailgun, Brevo, etc. Mot de passe chiffré en base.
  • Bouton « Tester la connexion SMTP » qui affiche le dialogue serveur complet — debug immédiat en cas d’erreur.
  • Découverte automatique de flux : colle l’URL d’un site, MagStyle cherche le RSS via les balises <link rel="alternate"> puis essaie les chemins courants (/feed, /rss.xml, /atom.xml, /feed.json).
  • Formats de flux supportés : RSS 2.0, Atom 1.0, JSON Feed 1.0/1.1.
  • Conditional GET (ETag, If-Modified-Since) : économie de bande passante côté flux source, politesse réseau intégrée.
  • Rate limiting par hôte : délai configurable entre deux requêtes vers le même domaine.
  • OPML import / export : migration depuis Feedly, Inoreader, ttRSS, FreshRSS, Miniflux, Pulse, etc. Sauvegarde de ta liste de flux dans un standard ouvert.

🌍 Lecture publique

  • Toggle d’un clic dans les paramètres : ton magazine devient consultable sans connexion.
  • Administration toujours protégée par mot de passe, même en mode public.
  • Boutons d’action masqués pour les visiteurs (favoris, marquer lu, refresh) — interface épurée pour la lecture seule.
  • Idéal pour : veille thématique partagée, magazine personnel public, démo de l’outil.

⚙️ Administration

  • Wizard d’installation en 4 étapes (prérequis, compte admin, paramètres, confirmation).
  • 7 onglets admin : Flux RSS, Catégories, Paramètres, OPML, Journal, Statistiques, Newsletter.
  • Journal des fetchs détaillé : date, flux, code HTTP, durée, articles ajoutés, erreurs. Conservé 30 jours.
  • Statistiques : aperçu chiffré du contenu et de l’activité.
  • Tableau de bord des flux avec statut visuel (OK, erreur, jamais fetché) et action rapide (modifier, désactiver, supprimer).

🎨 Frontend

  • Page de connexion éditoriale : couverture magazine à gauche (avec stats live), formulaire papier à droite. Responsive.
  • Mode papier (clair) et mode sombre, préférence mémorisée localement.
  • Vue compacte pour densifier l’affichage quand le magazine est dense.
  • Mise en page responsive jusqu’au mobile (les cartes s’empilent proprement).
  • Aucune image externe chargée côté interface : les seules requêtes externes sont vers les Google Fonts (Inter, Lora, Playfair Display) — facilement remplaçables par des fontes locales si tu veux le full self-hosted.

📋 Spécifications techniques

Langage PHP 8.0 ou plus récent
Base de données SQLite (via PDO, mode WAL activé)
Extensions PHP requises PDO, PDO_SQLite, cURL, mbstring, dom, libxml, openssl
Serveur web Apache (idéal, .htaccess), nginx (avec configuration manuelle pour bloquer data/)
Hébergement Mutualisé OK — testé sur O2switch, OVH, Infomaniak. Pas besoin de PHP-FPM, pas besoin de cron, pas besoin d’accès SSH.
Espace disque Quelques mégaoctets pour le code, ~10 Mo pour 1000 articles en base
Dépendances Aucune. Pas de Composer, pas de npm, pas de bibliothèque externe.
Internationalisation Français (interface et documentation). Pas de système i18n actif pour l’instant.
Licence [À PRÉCISER — MIT, GPL, AGPL…]
Version courante 1.0

📥 Téléchargement et installation

L’installation prend cinq minutes :

  1. Télécharge l’archive de MagStyle
  2. Décompresse, transfère le contenu de app/ sur ton hébergement par FTP
  3. Ouvre https://tonsite.fr/setup.php dans ton navigateur
  4. Suis les 4 étapes du wizard (vérification, compte admin, paramètres, confirmation)
  5. Renomme ou supprime setup.php après installation, c’est tout

 


📖 Documentation

Le manuel d’utilisation complet couvre en détail tous les aspects de MagStyle : installation pas à pas, premier contact, art de lire, organisation, rituels, lecture publique, newsletter, configuration SMTP, administration, maintenance et FAQ. Treize sections, environ 7 500 mots, avec captures d’écran annotées.


📜 Pourquoi MagStyle

À l’heure du fil infini, du tri par engagement, du « pour vous » qui ne te connaît pas vraiment — il restait à écrire un lecteur de flux qui assume l’inverse.

MagStyle s’adresse à toi si :

  • Tu suis une douzaine de blogs ou plus, et tu veux les agréger en un seul endroit.
  • Tu as quitté (ou tu envisages de quitter) un agrégateur cloud type Feedly ou Inoreader, parce que l’idée que ta liste de lectures vive sur un serveur tiers commence à te peser.
  • Tu trouves les lecteurs RSS classiques utilitaires mais sans âme. Tu voudrais que tes lectures aient une forme, une présence visuelle.
  • Tu as un hébergement web et tu sais (ou tu es prêt à apprendre) comment y déposer un dossier PHP.

MagStyle n’est pas un agrégateur cloud, ni un réseau social, ni un outil multi-utilisateurs, ni un algorithme. C’est un magazine personnel, lent, hiérarchisé, qui te ressemble.


MagStyle est un logiciel libre, écrit en PHP par et pour son auteur, partagé sans garantie ni support officiel.