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

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.htaccessavecDeny 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-UnsubscribeetList-Unsubscribe-Postpour 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 :
- Télécharge l’archive de MagStyle
- Décompresse, transfère le contenu de
app/sur ton hébergement par FTP - Ouvre
https://tonsite.fr/setup.phpdans ton navigateur - Suis les 4 étapes du wizard (vérification, compte admin, paramètres, confirmation)
- Renomme ou supprime
setup.phpaprè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.
