Manuel d’utilisation Mag.Style

Lire le web sans algorithme, par bouquets choisis, dans une mise en page de magazine.
Ce manuel explique comment installer, configurer et utiliser MagStyle.

Manuel publié le 11/05/2026, version 1.0. Ce document évoluera avec le logiciel.

Sommaire

  1. Manifeste
  2. Sécurité et garanties techniques
  3. Installation
  4. Premier contact
  5. L’art de lire
  6. Organiser ses lectures
  7. Rituels
  8. Lecture publique
  9. La newsletter
  10. Configuration SMTP
  11. Administration
  12. Maintenance et sauvegarde
  13. Questions fréquentes

1. Manifeste

À 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. Voilà MagStyle.

L’idée

MagStyle est un lecteur RSS. Tu y déposes des flux — des blogs, des journaux en ligne, des newsletters convertibles, des bulletins associatifs — et l’application va chercher pour toi les nouveaux articles, à intervalle régulier. Jusqu’ici, rien de nouveau : c’est le principe même du RSS depuis vingt ans.

Ce qui change, c’est la mise en scène.

Au lieu d’une liste verticale uniforme — toujours la même carte, toujours la même hiérarchie — MagStyle compose chaque catégorie comme une page de magazine. Un article en couverture, deux en demi-page, plusieurs en brèves, des images là où il y en a, des titres calibrés sur l’importance qu’on leur donne. La lecture redevient un objet visuel, pas un défilement.

À qui s’adresse MagStyle

À toi, si tu reconnais l’une de ces situations :

  • Tu suis une douzaine de blogs ou plus, et tu en as assez de visiter chaque site individuellement.
  • Tu as un compte sur un agrégateur cloud (Feedly, Inoreader, Pulse), mais 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.
  • Tu disposes d’un hébergement web (mutualisé ou autre) et tu as déjà installé un logiciel PHP toi-même — ou tu es prêt à essayer.

Ce que MagStyle n’est pas

  • Pas un agrégateur cloud. Tu installes, tu héberges. Tes données sont chez toi.
  • Pas un réseau social. Aucun « j’aime », aucun commentaire, aucun partage public natif. (Tu peux composer une newsletter à envoyer à tes contacts — c’est l’unique geste social.)
  • Pas un algorithme. L’ordre des articles dépend de leur date de publication et de la catégorie qu’on leur a attribuée. Pas de score, pas de personnalisation cachée.
  • Pas un outil multi-utilisateurs. MagStyle est un magazine personnel. Un seul compte administrateur. Tu peux activer la lecture publique pour que d’autres lisent, mais ils ne peuvent rien éditer.

Pourquoi le papier

L’esthétique de MagStyle emprunte à la presse imprimée : typographie sérif (Playfair Display pour les titres, Lora pour les italiques), couleurs sobres (crème, encre noire, accent rouge), filets de séparation, capitales étroites pour les rubriques. Ce n’est pas de la nostalgie : c’est un choix fonctionnel. Le papier oblige à hiérarchiser. Sur un écran sans ce vocabulaire, tout finit par avoir le même poids — donc plus rien n’a de poids du tout.

Local-first : tes données restent chez toi

Tout est stocké localement sur ton hébergement, dans une base SQLite contenue dans un seul fichier. Aucun appel à un service externe pour fonctionner — sauf, évidemment, les requêtes HTTP que MagStyle fait pour télécharger les flux que tu as ajoutés. Aucun tracking, aucun analytics, aucune télémétrie. Les détails techniques sont dans la section suivante.

↑ Retour au sommaire


2. Sécurité et garanties techniques

Tu vas installer ce logiciel sur ton serveur. Lui confier tes flux, peut-être tes destinataires de newsletter, ton mot de passe SMTP. Tu mérites de savoir précisément comment tout cela est protégé.

Architecture

MagStyle est écrit en PHP 8.0+ et s’appuie sur SQLite pour la persistance. Pas de Composer, pas de dépendances externes. Le code est entièrement auditable : une trentaine de fichiers, lisibles d’une traite. Tu peux savoir exactement ce qui se passe sous le capot, sans avoir à fouiller dans des bibliothèques tierces.

Cette sobriété a aussi un effet de bord positif : la surface d’attaque est minuscule. Pas de failles importées via une dépendance vulnérable, pas de chaîne de mise à jour à surveiller en permanence.

Authentification et sessions

Le mot de passe administrateur est haché avec bcrypt (algorithme par défaut de PHP, coût standard). Le hash est stocké en base, jamais le mot de passe en clair. Une vérification réussie déclenche une régénération de l’identifiant de session — ce qui empêche les attaques par session fixation.

Les sessions PHP sont configurées comme suit :

  • Nom de cookie personnalisé : MAGSTYLE_SID. Cela évite que ton cookie de session se confonde avec ceux d’autres applications PHP installées sur le même domaine.
  • HttpOnly : le cookie ne peut pas être lu en JavaScript depuis aucune page. Protection contre l’exfiltration de session via XSS.
  • SameSite=Lax : le cookie n’est pas envoyé sur les requêtes cross-site. Protection contre le CSRF de base.
  • Durée de vie : 7 jours. Suffisant pour ne pas avoir à se reconnecter en permanence, court pour limiter la fenêtre d’exploitation d’un cookie volé.
  • Cookie sécurisé : si tu accèdes à MagStyle en HTTPS, le cookie n’est envoyé qu’en HTTPS. (Configuré automatiquement à l’installation selon ce que ton serveur expose.)

Sur l’écran de connexion, un délai d’une seconde est imposé après chaque tentative ratée. C’est de l’anti-bruteforce basique — pas une défense parfaite, mais suffisante pour décourager les scripts opportunistes qui scannent les hébergements à la recherche de logins faibles.

Protection contre le CSRF

Toutes les actions modifiantes (ajout, édition ou suppression de flux, envoi de newsletter, modification des paramètres) sont protégées par un jeton CSRF aléatoire généré pour chaque session. Le jeton est inséré dans tous les formulaires admin, et envoyé via une balise meta pour les appels AJAX. Côté serveur, la vérification utilise hash_equals() — comparaison en temps constant, immunisée contre les attaques par mesure de temps.

Sanitization des contenus distants

Les articles téléchargés depuis les flux RSS contiennent du HTML arbitraire, écrit par des tiers. Avant tout stockage en base, MagStyle nettoie ce HTML via une analyse DOMDocument avec une liste blanche de balises et d’attributs autorisés. Tout ce qui ne correspond pas à cette liste — scripts, iframes, gestionnaires d’événements, attributs style arbitraires — est purement supprimé.

Concrètement : même si un flux malveillant tentait d’injecter du JavaScript dans le contenu d’un article, ce code n’arriverait jamais jusqu’à ton navigateur. La protection est appliquée à l’enregistrement, pas seulement à l’affichage — donc même un changement de moteur de rendu futur ne pourrait pas réintroduire la faille.

Chiffrement des secrets stockés

Si tu configures un serveur SMTP pour envoyer des newsletters, le mot de passe SMTP est chiffré en base avant d’être enregistré. Algorithme : AES-256-CBC, vecteur d’initialisation aléatoire pour chaque opération. La clé de chiffrement est dérivée (via SHA-256) du secret applicatif généré à l’installation et stocké dans config.php — fichier qui doit lui-même être protégé en lecture HTTP par le serveur web (cas par défaut sur tous les hébergeurs sérieux).

Conséquence pratique : si un attaquant obtenait une copie de la base SQLite mais pas du fichier config.php, il ne pourrait pas déchiffrer ton mot de passe SMTP.

Protection du système de fichiers

La base SQLite (data/magstyle.db), les fichiers de logs et tout ce qui ne doit pas être servi publiquement vit dans un dossier data/ protégé par un fichier .htaccess contenant Deny from all. Ce fichier est créé automatiquement à l’installation. Sur les serveurs Apache (cas le plus courant en mutualisé), cela rend impossible le téléchargement direct du fichier de base via le navigateur.

Si ton serveur n’est pas Apache mais nginx ou autre, il faut configurer la même protection à la main. L’installation te le rappelle.

Données et conformité

MagStyle ne collecte aucune donnée d’usage. Pas de Google Analytics, pas de pixel de tracking, pas de télémétrie envoyée à un serveur distant. Les seules connexions sortantes sont :

  • Les téléchargements des flux RSS que tu as enregistrés (vers leurs serveurs respectifs)
  • Les téléchargements éventuels d’articles complets (mode Readability) si tu actives cette option flux par flux
  • L’envoi des emails de newsletter via le serveur SMTP que tu as configuré

Pour les destinataires de ta newsletter, l’application stocke leur email et leur nom (que tu as renseignés). Chaque envoi inclut :

  • Un lien de désabonnement individuel, signé par un jeton aléatoire propre à chaque destinataire
  • Les en-têtes List-Unsubscribe et List-Unsubscribe-Post: List-Unsubscribe=One-Click, conformes à la norme RFC 8058. Cela permet aux clients mail modernes (Gmail, Outlook, Apple Mail) de proposer un bouton de désabonnement intégré, sans que le destinataire ait à cliquer dans le mail puis sur une page web

Auditabilité

L’application maintient deux journaux internes :

  • La table fetch_logs enregistre chaque téléchargement de flux : date, code HTTP, durée, nombre d’articles ajoutés, erreur éventuelle. Conservée 30 jours puis purgée automatiquement.
  • Le fichier data/newsletter.log enregistre chaque envoi unitaire de newsletter, succès et échecs détaillés. Lisible depuis l’admin.

Synthèse

Domaine Mesure
Mot de passe admin bcrypt, jamais en clair
Sessions HttpOnly, SameSite=Lax, nom custom, 7 jours, régénérées à la connexion
Anti-bruteforce Délai de 1 seconde sur tentative ratée
CSRF Jeton aléatoire par session, vérifié sur toute action POST en temps constant
HTML distant Sanitization DOMDocument, whitelist stricte
Mot de passe SMTP AES-256-CBC, clé dérivée du secret applicatif
Base SQLite Hors webroot accessible (.htaccess Deny from all)
Tracking Aucun
Newsletter Désabonnement RFC 8058, jeton individuel par destinataire
Logs Téléchargements de flux (30 jours), journal d’envoi newsletter

↑ Retour au sommaire


3. Installation

L’installation prend cinq minutes. Le seul moment où tu as besoin d’un peu de méthode, c’est pour la sécurisation post-install — trois gestes à ne pas oublier.

Prérequis hébergeur

MagStyle tourne sur n’importe quel hébergement mutualisé moderne. Vérifie cette courte liste avant de te lancer :

PHP Version 8.0 ou plus récente
Extensions PDO, PDO_SQLite, cURL, mbstring, dom, libxml, openssl
Espace disque Quelques mégaoctets — la base SQLite reste petite, même avec mille articles
Écriture Le dossier dans lequel tu installes doit être accessible en écriture (pour que MagStyle crée data/magstyle.db et config.php)
HTTPS Pas obligatoire mais fortement recommandé si tu actives la lecture publique. La plupart des hébergeurs proposent Let’s Encrypt en un clic

La quasi-totalité des extensions listées sont activées par défaut sur les hébergements grand public (O2switch, OVH, Infomaniak, Hostinger, etc.). Si l’une manque, le wizard d’installation te le signale en première étape.

Téléchargement et upload des fichiers

Récupère l’archive de MagStyle, décompresse-la localement, puis transfère le contenu du dossier app/ vers ton serveur via FTP, SFTP ou le gestionnaire de fichiers de ton panel d’hébergement. Tu peux installer dans la racine de ton domaine (par exemple https://exemple.fr/) ou dans un sous-dossier dédié (par exemple https://exemple.fr/magstyle/) — c’est plus propre si tu héberges déjà autre chose à la racine.

Le wizard d’installation

Ouvre dans ton navigateur l’URL https://tonsite.fr/setup.php (ajuste le chemin selon où tu as installé). Le wizard se présente en quatre étapes successives.

Étape 1 — Vérification des prérequis

MagStyle vérifie automatiquement que toutes les extensions PHP nécessaires sont présentes et que le dossier data/ est accessible en écriture. Tout doit être au vert. Si ce n’est pas le cas, contacte ton hébergeur ou modifie les permissions du dossier (chmod 755 ou chmod 775 sur data/ selon ton serveur).

Étape 2 — Compte administrateur

Crée ton identifiant et ton mot de passe administrateur. Choisis un mot de passe long et unique : c’est l’unique défense entre internet et le contrôle complet de ton MagStyle. Le mot de passe est immédiatement haché avec bcrypt avant stockage — il n’est jamais conservé en clair, pas même temporairement.

C’est aussi à cette étape que la base SQLite est créée pour la première fois. Si tu vois cette page, ça veut dire que l’écriture sur data/ fonctionne.

Étape 3 — Paramètres et catégories

Quatre réglages te sont proposés (intervalle de rafraîchissement, articles par page, seuil court/long, rétention) et quatre catégories par défaut sont pré-cochées (Tech, Blogs perso, Veille, Long form). Décoche celles dont tu n’as pas besoin, valide. Tu pourras tout modifier plus tard depuis l’admin.

Étape 4 — Confirmation

L’installation est terminée. Le fichier config.php a été généré, contenant ton secret applicatif (utilisé pour le chiffrement et les sessions). MagStyle est prêt à fonctionner.

Sécurisation post-installation

Trois gestes à enchaîner immédiatement après le wizard :

  1. Renomme ou supprime setup.php. Le fichier refuse de se relancer une fois l’installation terminée, mais c’est plus prudent de le retirer (ou de le renommer en setup.php.disabled) pour ne pas l’exposer du tout.
  2. Vérifie que data/.htaccess existe. Le wizard l’a créé automatiquement avec Deny from all. Pour vérifier, tente d’ouvrir https://tonsite.fr/data/magstyle.db dans ton navigateur — tu dois recevoir une erreur 403 Forbidden. Si ce n’est pas le cas (cas rare en mutualisé non-Apache), demande à ton hébergeur comment bloquer l’accès direct à un dossier.
  3. Active HTTPS si ce n’est pas déjà fait. Indispensable si tu envisages d’activer la lecture publique. La plupart des panels d’hébergement (cPanel, Plesk) proposent un certificat Let’s Encrypt gratuit en quelques clics.

Tu peux maintenant te connecter via https://tonsite.fr/login.php.

↑ Retour au sommaire


4. Premier contact

MagStyle est installé mais vide. Comme un magazine sans rédacteurs. Il te faut maintenant des flux à lire — et c’est l’étape la plus engageante du processus, parce qu’elle dessine ce que sera ton magazine.

Se connecter et arriver sur l’accueil

Ton navigateur t’amène sur la page de connexion (la couverture éditoriale à gauche, le formulaire à droite). Saisis tes identifiants. Tu arrives sur la page d’accueil — qui est, à ce stade, un message t’invitant à ajouter un premier flux.

Trouver l’URL d’un flux RSS

La majorité des sites éditoriaux exposent un flux RSS, mais pas toujours visiblement. Quelques pistes selon le type de site :

  • Blogs WordPress. Ajoute simplement /feed à la fin de l’URL du blog. Exemple : https://exemple.com/feed. Pour une catégorie : https://exemple.com/category/tech/feed.
  • Substack. Ajoute /feed à la fin de l’URL. Exemple : https://nomdublog.substack.com/feed.
  • Medium. Format https://medium.com/feed/@nomdelauteur pour un auteur, https://medium.com/feed/nomdelapublication pour une publication.
  • YouTube. Format https://www.youtube.com/feeds/videos.xml?channel_id=ID. L’ID est visible dans l’URL de la chaîne.
  • Sites de presse. Cherche un lien « RSS » ou « Flux » en pied de page, ou une icône orange. Le Monde, Libération, Mediapart, Reporterre, etc. exposent tous leurs flux par catégorie.
  • Cas désespéré. Affiche le code source de la page (clic droit → Afficher la source) et cherche type="application/rss+xml". L’URL du flux est dans l’attribut href juste à côté.

Dans tous les cas, en mettant l’url de base du site, l’application cherchera des fichiers RSS, ATOM ou XML.

Ajouter ton premier flux

Va dans Administration → Flux RSS. Dans la zone « Ajouter un flux », colle l’URL et clique sur Tester. Deux comportements possibles :

  • Tu as collé une URL de flux direct (terminant par /feed, /rss.xml, etc.). MagStyle le télécharge, te confirme qu’il est valide, te montre quelques articles d’aperçu et te propose un titre.
  • Tu as collé l’URL d’un site (par exemple juste https://exemple.com). MagStyle scanne le HTML à la recherche d’une balise <link rel="alternate" type="application/rss+xml">, puis essaie automatiquement les chemins courants (/feed, /rss.xml, /atom.xml, /feed.json…). S’il trouve, il te le propose.

Si MagStyle a trouvé le flux, choisis une catégorie d’affectation, ajuste éventuellement le titre, et valide. Le flux est ajouté en base. Le téléchargement initial des articles se fera lors de ta prochaine visite — pour ne pas bloquer la page maintenant. Si tu veux les voir tout de suite, clique sur ↻ Refresh en haut de l’admin.

L’option « Récupérer le texte intégral »

Certains éditeurs ne diffusent dans leur flux qu’un extrait de chaque article, t’obligeant à cliquer pour lire la suite sur leur site. Si MagStyle détecte que le flux semble fonctionner ainsi, il te propose une case à cocher : « Récupérer automatiquement le texte intégral ». Si tu la coches, MagStyle ira télécharger chaque article complet et en extraira le texte (technologie Readability, identique à celle des modes lecture des navigateurs).

Active-la avec parcimonie : c’est une charge réseau supplémentaire pour le site source. À réserver aux flux dont tu lis vraiment chaque article.

Importer une liste depuis un autre lecteur (OPML)

Si tu utilisais déjà Feedly, Inoreader, Pulse, ttRSS, Miniflux ou tout autre lecteur RSS, tu peux exporter ta liste de flux au format OPML (un fichier XML standardisé) puis l’importer en bloc dans MagStyle.

Procédure : Administration → Import / Export OPML. Sélectionne ton fichier OPML, choisis une catégorie d’affectation par défaut (tu pourras réorganiser ensuite), valide. MagStyle importe tous les flux d’un coup. Les téléchargements se feront progressivement, un flux à chaque visite, sur les jours qui suivent.

↑ Retour au sommaire


5. L’art de lire

Tout le travail éditorial du logiciel se concentre dans la page principale. Comprendre comment elle est construite, c’est comprendre l’esprit de MagStyle.

La grille magazine

Chaque catégorie est composée comme une page de magazine, avec des cartes de tailles variables. L’algorithme de mise en page choisit ces tailles en fonction de deux critères :

  • La longueur de l’article (court, moyen, long)
  • La présence d’une image dans l’article

Cinq tailles cohabitent dans la grille :

Taille Quand Affichage
Featured Premier article de chaque catégorie Image + titre seuls, pleine largeur, format couverture
Large Articles longs avec image 2 colonnes sur 3, image grande, extrait visible
Medium Articles longs sans image 1 colonne, titre proéminent, extrait
Standard Articles de longueur moyenne 1 colonne, titre + extrait court
Brief Articles courts (notes, brèves) 1 colonne compacte, titre + 2 lignes

Cette variété empêche l’effet « mur uniforme » des lecteurs RSS classiques. À l’œil, on distingue immédiatement ce qui mérite attention de ce qui passe en survol.

Cliquer sur Lire la suite ou sur une flèche

Deux gestes différents pour deux intentions :

  • Cliquer sur « Lire la suite » ouvre une modale de lecture interne à MagStyle. Tu lis sans quitter ton magazine, dans une mise en page papier propre, débarrassée des publicités, des bandeaux de cookies et des suggestions d’articles.
  • Cliquer sur la flèche ↗ en bas de la carte ouvre l’article sur le site d’origine, dans un nouvel onglet. Utile pour commenter, relayer, vérifier la mise en page complète.

La modale de lecture

Quand tu ouvres un article, la modale couvre la page principale et présente le contenu intégral. Une barre d’outils est dupliquée en haut et en bas pour ne pas avoir à scroller pour agir :

Ouvre l’article sur le site d’origine
🖨 Imprime l’article (mise en page sans le reste de l’interface)
📄 Récupère le texte intégral si le flux ne fournit qu’un extrait (équivalent du mode lecture des navigateurs)
Marque l’article comme lu
☆ / ★ Ajoute / retire des favoris
Ferme la modale

Le bouton 📄 mérite un mot d’explication. Quand un flux ne diffuse que des extraits, MagStyle peut aller chercher l’article complet sur le site d’origine, en extraire uniquement le texte (en éliminant menus, pubs, recommandations) et te l’afficher dans la modale. Si l’article est déjà complet, le bouton fait quand même son travail — souvent sans rien changer, parfois en éliminant un encart parasite passé entre les mailles du sanitizer.

Lorsque la récupération a déjà été effectuée, l’icône reste un 📄 mais devient légèrement transparente, pour t’indiquer que le travail a été fait.

Mode sombre, vue compacte, raccourcis

Trois préférences de lecture sont accessibles d’un clic ou d’une touche :

Action Bouton Raccourci
Mode sombre D
Vue compacte (cartes plus serrées) C
Article suivant / précédent J / K
Recherche champ en haut /

Les préférences (mode sombre, vue compacte) sont mémorisées localement dans ton navigateur. Tu n’as pas besoin de te reconnecter pour les retrouver.

Imprimer un article

Le bouton 🖨 ouvre la fenêtre d’impression du navigateur avec une feuille de style dédiée : seul l’article est imprimé, sans la barre d’outils, sans la pagination, sans la modale qui l’entoure. Tu obtiens un objet papier net, lisible, archivable.

↑ Retour au sommaire


6. Organiser ses lectures

Dix flux : on s’en sort de tête. Cinquante : il faut un peu de structure. MagStyle propose les outils classiques (catégories, recherche, favoris) mais sans étiquettes ni dossiers imbriqués — la simplicité au-dessus de tout.

Catégories

Les catégories sont l’unique mécanisme de classement. Un flux appartient à une catégorie (ou à aucune, auquel cas il est rangé dans « Non classé »). Une catégorie correspond à un onglet dans la navigation principale du magazine.

Pour les gérer, va dans Administration → Catégories :

  • Créer. Champ « Nom » + bouton « Ajouter ».
  • Renommer. Clic sur l’icône modifier.
  • Réordonner. Glisse-dépose des catégories pour changer leur ordre dans la barre de navigation.
  • Supprimer. Les flux de cette catégorie ne sont pas supprimés ; ils deviennent « Non classés ».

Pour affecter un flux à une catégorie, va dans Administration → Flux RSS, clique sur Modifier à côté du flux, choisis la catégorie dans le sélecteur, valide.

Filtrer par source

Dans la vue magazine, le nom du flux apparaît en haut de chaque carte. Cliquer sur ce nom filtre la vue : tu ne vois plus que les articles de ce flux. Pratique pour relire d’affilée tout ce qu’a publié un blog que tu apprécies particulièrement, ou pour explorer ce qu’un nouveau flux a déjà donné.

Pour quitter le filtre, clique sur la croix qui apparaît à côté du nom de la source filtrée, ou navigue vers une autre catégorie.

La recherche

Tape / n’importe où dans le magazine pour focaliser le champ de recherche en haut. La recherche couvre les titres, le contenu et les noms de sources, qu’ils soient lus ou non. Les résultats s’affichent dans la même mise en page que le magazine principal — tu peux donc lire, marquer, mettre en favori depuis les résultats.

Marquer comme lu

Trois façons de marquer un article :

  • Le bouton ✓ Lu en bas de chaque carte (visible si tu es connecté et si l’article n’est pas déjà marqué).
  • Le bouton dans la barre d’outils de la modale.
  • Automatiquement à l’ouverture de la modale (selon ton réglage — voir Administration).

Les articles lus sont visuellement atténués (opacité réduite, étiquette « lu » visible). Ils restent visibles, mais en arrière-plan visuel — tu peux toujours y revenir.

Pour marquer toute une catégorie comme lue d’un coup, le bouton « Tout marquer comme lu » apparaît en haut de la catégorie quand des articles non lus sont présents. Geste utile en cas de surcharge : tu fais table rase et tu repars frais.

Favoris et bibliothèque

Le bouton sur chaque carte (et dans la modale) ajoute l’article à tes favoris. Il devient rempli pour signaler son nouveau statut.

Les favoris ont leur propre vue : Bibliothèque dans la barre de navigation principale. Ils y sont affichés en mise en page magazine, comme dans le flux principal, mais dans l’ordre d’ajout (les plus récents en haut). Tes favoris ne sont jamais purgés — la rétention automatique les épargne, même au-delà de la durée configurée.

La bibliothèque est aussi le point de départ de la composition d’une newsletter (voir section 9).

↑ Retour au sommaire


7. Rituels

MagStyle propose deux rituels pour donner du rythme à tes lectures, à rebours du flux continu. Tu peux les ignorer ou les adopter — ils changent surtout la sensation, plus que le fonctionnement.

L’édition du jour figée

Activable dans Administration → Paramètres → Édition du jour figée. Le principe : à une heure donnée chaque jour (par défaut 7 h du matin), MagStyle « publie » l’édition de la veille. À partir de ce moment-là, tu lis les articles arrivés depuis l’édition précédente, et seulement ceux-là. Les nouveaux articles téléchargés en cours de journée n’apparaissent pas immédiatement — ils attendent l’édition du lendemain.

Cette mécanique imite le rythme de la presse imprimée. Elle crée un sentiment de finitude : « j’ai bouclé l’édition d’aujourd’hui ». Tu retrouves ce sentiment qu’on n’a plus depuis longtemps en ligne, où le flux est par construction infini.

L’heure de figeage est configurable (de 0 à 23 h). 7 h convient à la plupart : tu te lèves, tu prends ton café, ton magazine est là, complet, fini, à lire.

Le refresh automatique

MagStyle vérifie tes flux toutes les N minutes (30 par défaut). Mais le téléchargement n’est pas fait en bloc : à chaque visite que tu fais sur le site, un seul flux — celui dont la dernière vérification est la plus ancienne — est rafraîchi en arrière-plan. C’est imperceptible (deux à trois secondes après que la page t’a été servie), et sur quelques visites, tous tes flux sont à jour.

Cette stratégie a un avantage : tu n’as jamais de page lente, même avec cinquante flux. Elle a un inconvénient : si tu n’ouvres pas MagStyle pendant une semaine, à ta première visite il y aura un léger décalage entre les flux fraîchement téléchargés et les autres. Le bouton ↻ Refresh dans l’admin résout ça.

Le refresh manuel

Le bouton ↻ Refresh sur la TopBar force un fetch synchrone de tous les flux activés, en série. La page reste en chargement le temps que tout se termine (selon le nombre de flux et leurs temps de réponse, ça peut prendre une à trois minutes). Pendant ce temps, tu peux ouvrir d’autres onglets MagStyle sans qu’ils soient bloqués (le verrou de session est libéré).

Usage typique : juste après avoir importé un OPML, ou après une longue absence.

La rétention automatique

Pour ne pas laisser la base SQLite enfler indéfiniment, MagStyle purge automatiquement les articles lus de plus de N jours (90 par défaut). Les favoris sont épargnés systématiquement, même très anciens. Les articles non lus le sont aussi : ils restent jusqu’à ce que tu les lises ou que tu les marques manuellement comme lus.

La purge tourne occasionnellement, en arrière-plan, en même temps qu’un fetch. Tu n’as rien à faire. Si tu veux ajuster la durée de rétention, va dans Administration → Paramètres → Rétention articles lus.

↑ Retour au sommaire


8. Lecture publique

Par défaut, MagStyle est privé : seul l’administrateur connecté voit le magazine. Mais on peut renverser ce choix d’un clic.

Cas d’usage

La lecture publique transforme MagStyle en magazine partagé. Tu sélectionnes des flux qui t’intéressent (et qui pourraient intéresser d’autres lecteurs), tu les organises par catégorie, et n’importe qui qui visite ton URL voit ton magazine — sans avoir besoin de compte.

Quelques scénarios où ça a du sens :

  • Veille thématique partagée. Tu agrèges les meilleures sources sur un sujet (sécurité, design, climat, BD indépendante…) et tu en fais un point d’entrée pour ta communauté.
  • Magazine perso public. Tu cures tes lectures, tu les exposes comme une recommandation continue. Un peu comme un blog, mais sans avoir à écrire — juste à choisir.
  • Démo de l’outil. Tu veux montrer MagStyle à quelqu’un sans lui donner ton mot de passe.

Activation

Va dans Administration → Paramètres → Accès public, coche « Lecture publique », valide. À partir de cet instant, l’URL d’accueil de MagStyle ne demande plus de mot de passe.

Ce qui change pour les visiteurs non connectés

L’interface est presque identique, mais avec quelques différences calculées :

  • Visible sans connexion : le magazine principal, la bibliothèque, les modales d’article, la recherche, l’impression.
  • Masqué pour les visiteurs : les boutons d’action personnels (✓ marquer lu, ☆ favoris), le bouton ↻ Refresh, le lien Administration. Les compteurs « X non lus » ne s’affichent pas non plus — ils n’auraient pas de sens.
  • L’administration reste protégée par mot de passe, comme avant. Lecture publique ≠ administration publique.

Conseils

  • HTTPS obligatoire. Si ton MagStyle est exposé publiquement, le HTTPS n’est plus optionnel — c’est le minimum vital pour la confiance des visiteurs et le respect de leurs navigateurs.
  • robots.txt si tu ne veux pas être indexé. Si tu préfères que ton magazine ne sorte pas dans les résultats Google, ajoute un fichier robots.txt à la racine de ton hébergement avec le contenu suivant :
    User-agent: *
    Disallow: /
  • Choix éditorial assumé. Tu deviens responsable de ce qui s’affiche. Vérifie occasionnellement qu’aucun flux ne s’est mis à diffuser des contenus que tu ne souhaites pas relayer.

↑ Retour au sommaire


9. La newsletter

MagStyle peut composer un magazine sélectionné à la main et l’envoyer par email à une liste de destinataires. C’est une fonctionnalité éditoriale à part entière — pas un sous-produit.

Le parcours en cinq temps

  1. Tu mets en favori les articles qui t’intéressent (au fil de tes lectures, sur plusieurs jours).
  2. Depuis ta bibliothèque, tu marques certains favoris pour la newsletter en cours (bouton ✉).
  3. Tu gères ta liste de destinataires (une fois pour toutes, ou au fil du temps).
  4. Tu composes : titre du numéro, intro éditoriale, vérification du sommaire.
  5. Tu envoies — d’abord en test à toi, puis à tous.

Sélectionner les articles à inclure

Va dans la Bibliothèque. Sur chaque carte, en plus des actions habituelles, tu vois un bouton . Clique-le pour ajouter l’article au brouillon de la prochaine newsletter. Le bouton se remplit pour signaler son inclusion. Re-clique pour le retirer.

Tu peux composer la sélection sur plusieurs jours. Les articles ajoutés s’accumulent dans le brouillon jusqu’à l’envoi (ou jusqu’à un vidage manuel).

Gérer les destinataires

Va dans Administration → Newsletter → Destinataires. Trois actions :

  • Ajouter un destinataire. Email + nom (facultatif). Validation immédiate de la syntaxe email.
  • Ajouter en bloc. Colle plusieurs adresses, une par ligne. Format toléré : email@exemple.fr ou Nom Prénom <email@exemple.fr>. Les doublons sont ignorés.
  • Supprimer un destinataire. Lien à droite de chaque ligne.

Chaque destinataire reçoit automatiquement un jeton de désabonnement aléatoire à sa création. Ce jeton est utilisé dans le lien personnalisé de désabonnement de chaque mail qu’il recevra.

Composer la newsletter

Va dans Administration → Newsletter → Composer. Le brouillon en cours t’est présenté avec :

  • Un champ Titre (obligatoire) — apparaîtra dans le sujet du mail et en gros titre de la newsletter.
  • Un champ Introduction (facultatif) — texte court en italique qui ouvre la newsletter, après le titre.
  • La liste des articles sélectionnés, avec une croix pour en retirer un (sans avoir à retourner dans la bibliothèque).

Test d’envoi

Avant l’envoi réel, fais-toi un test : champ « Email de test » en haut, ton adresse, bouton « Envoyer un test ». Tu reçois la newsletter telle qu’elle sera envoyée aux destinataires (avec en plus la mention [TEST] dans le sujet et l’intro).

Vérifie : le titre s’affiche correctement, les images chargent, le lien de désabonnement est bien présent (mais inopérant — c’est un jeton bidon en mode test).

Envoi réel

Une fois satisfait, clique sur « Envoyer la newsletter ». Tu auras une confirmation, puis l’envoi démarre. C’est synchrone : la page reste en chargement le temps que tous les mails partent (compte 1 à 3 secondes par destinataire). Pour 100 destinataires, prévois 2 à 5 minutes selon la configuration de ton serveur SMTP.

À la fin, tu vois un récapitulatif : X envois réussis, Y erreurs sur Z destinataires. Le brouillon est automatiquement vidé après envoi réussi.

Désabonnement côté destinataire

Chaque mail contient :

  • Un lien « Se désabonner » dans le pied de mail, qui mène à une page MagStyle confirmant la désinscription.
  • L’en-tête mail List-Unsubscribe, conforme à la RFC 8058. Concrètement : Gmail, Outlook et Apple Mail affichent automatiquement un bouton « Se désabonner » dans l’interface du mail. Le destinataire n’a même pas besoin de cliquer dans le mail.

Une fois désinscrit, le destinataire reste en base mais avec un drapeau « unsubscribed » — il ne reçoit plus rien, et tu vois son statut dans la liste.

Historique

Administration → Newsletter → Historique liste tous tes envois passés avec leur date, leur titre, le nombre de destinataires et le décompte succès/erreurs. Pratique pour vérifier qu’un envoi est bien parti, ou pour faire le bilan.

 

Exemple de mail reçu

↑ Retour au sommaire


10. Configuration SMTP

PHP a une fonction native, mail(), qui envoie des mails. Elle marche presque toujours. Et finit presque toujours en spam. La solution : configurer un vrai serveur SMTP authentifié.

Pourquoi SMTP plutôt que mail()

Quand PHP utilise mail(), il appelle le service d’envoi local de ton hébergeur (souvent sendmail). Ce service :

  • N’est pas authentifié auprès du domaine de l’expéditeur. Les serveurs de messagerie destinataires (Gmail, Outlook, etc.) ne peuvent pas vérifier l’identité de l’expéditeur via SPF/DKIM, et marquent souvent le mail comme spam ou le rejettent.
  • N’a souvent pas de bonne réputation IP. L’IP de ton serveur mutualisé est partagée avec plein d’autres clients dont certains envoient peut-être du spam — ta réputation s’en ressent.
  • Ne t’informe pas des erreurs en détail. Si l’envoi échoue, tu n’as qu’un false en retour, sans explication.

Configurer un serveur SMTP authentifié résout ces trois problèmes : SPF/DKIM sont gérés par le fournisseur SMTP, la réputation IP est dédiée, et tu vois précisément le dialogue serveur en cas d’échec.

Configurer SMTP

Va dans Administration → Paramètres → Serveur SMTP. Six champs :

Champ Explication
Utiliser un serveur SMTP Coche pour activer. Décoche pour revenir au fallback mail().
Hôte Adresse du serveur SMTP de ton fournisseur (voir tableau plus bas).
Port 587 pour STARTTLS, 465 pour SSL/TLS implicite. Très rarement 25.
Chiffrement STARTTLS (587) ou SSL/TLS (465). Évite « Aucun » sauf cas particulier.
Username Souvent l’adresse email complète. Selon ton fournisseur.
Mot de passe Mot de passe du compte mail. Stocké chiffré (AES-256-CBC) en base.
Vérifier le certificat TLS Coché par défaut. À décocher uniquement si ton serveur utilise un certificat auto-signé (rare en mutualisé pro).

Le bouton « Tester la connexion » n’envoie pas de mail : il ouvre une session SMTP, tente l’authentification, puis se déconnecte proprement. Le dialogue serveur complet est affiché — pratique pour debug.

Réglages courants par fournisseur

Fournisseur Hôte Port Chiffrement Username
O2switch mail.tondomaine.fr 465 SSL/TLS email complet
OVH ssl0.ovh.net 465 SSL/TLS email complet
Infomaniak mail.infomaniak.com 465 SSL/TLS email complet
Gmail smtp.gmail.com 587 STARTTLS email Gmail (avec un mot de passe d’application, pas le mot de passe de compte)
Mailgun smtp.mailgun.org 587 STARTTLS postmaster@ton-domaine.mailgun.org
Brevo (Sendinblue) smtp-relay.brevo.com 587 STARTTLS email Brevo + clé SMTP

Attention pour Gmail

Si tu utilises Gmail comme SMTP, tu ne peux pas mettre ton mot de passe Gmail habituel — il faut générer un mot de passe d’application dans les paramètres de sécurité de ton compte Google. Cela suppose que tu as activé la double authentification sur ton compte. C’est une étape de cinq minutes une bonne fois pour toutes.

Lire le dialogue serveur en cas d’erreur

Si le test échoue, MagStyle affiche les dernières lignes du dialogue SMTP. Voici les erreurs typiques :

  • Connexion refusée ou timeout : mauvais hôte ou port, ou pare-feu de ton hébergeur qui bloque le port. Demande à ton hébergeur si les connexions sortantes vers ce port sont autorisées.
  • 535 Authentication failed : mauvais identifiant ou mauvais mot de passe. Vérifie soigneusement (notamment pour Gmail, vérifie que tu utilises bien un mot de passe d’application).
  • Échec TLS : ton serveur a un certificat auto-signé ou expiré. Décoche temporairement « Vérifier le certificat TLS » et signale le problème à ton fournisseur SMTP.
  • Connexion fermée pendant la lecture : le serveur a coupé prématurément. Souvent un problème côté fournisseur — réessaye, ou contacte-le.

↑ Retour au sommaire


11. Administration

L’administration tient en sept onglets. Tu y reviens régulièrement les premiers jours, puis de plus en plus rarement à mesure que ton magazine se stabilise.

Panorama

Onglet À quoi ça sert
Flux RSS Ajouter, modifier, désactiver, supprimer tes flux. Voir l’état de chacun (OK, erreur, jamais).
Catégories Créer, renommer, réordonner les rubriques de ton magazine.
Paramètres Tous les réglages de comportement (intervalles, pagination, rétention, lecture publique, édition du jour, expéditeur newsletter, SMTP).
Import / Export OPML Importer une liste de flux depuis un autre lecteur, ou exporter ta liste pour la sauvegarder ou la partager.
Journal Historique des téléchargements de flux : code HTTP, durée, articles ajoutés, erreurs. Conservé 30 jours.
Statistiques Aperçu chiffré de ton magazine : nombre d’articles par catégorie, par flux, etc.
Newsletter Composer, gérer les destinataires, voir l’historique des envois, lire le log technique.

Détail des paramètres

L’onglet Paramètres regroupe huit sections. Voici les principaux réglages, par section :

  • Lecture et affichage. Articles par page (défaut 15), seuil court/long en mots (défaut 500). Le seuil détermine à partir de combien de mots un article est considéré comme « long » et tronqué dans la vue magazine.
  • Téléchargement des flux. Intervalle entre deux fetchs d’un même flux (défaut 30 min), timeout par flux (défaut 15 s), délai entre requêtes vers un même hôte (défaut 2 s — politesse), rétention des articles lus (défaut 90 jours).
  • Accès public. Toggle de la lecture publique (voir section 8).
  • Édition du jour. Toggle de l’édition figée + heure de figeage (voir section 7).
  • Newsletter. Nom et email de l’expéditeur (visibles par tes destinataires).
  • Serveur SMTP. Toute la configuration SMTP (voir section 10).

Le journal des fetchs

L’onglet Journal est un outil de debug essentiel quand un flux semble ne plus se mettre à jour. Pour chaque téléchargement, tu vois :

  • La date et l’heure
  • Le flux concerné
  • Le code HTTP retourné par le serveur (200 = OK, 304 = pas de changement, 404 = URL morte, 500 = serveur en erreur, etc.)
  • La durée du téléchargement
  • Le nombre d’articles ajoutés
  • L’erreur éventuelle

Si un flux affiche systématiquement 404, c’est que son URL a changé : modifie-la dans Flux RSS. Si un flux affiche systématiquement timeout, c’est que le serveur source est lent ou en panne — patience, ou si ça dure, désactive-le.

↑ Retour au sommaire


12. Maintenance et sauvegarde

MagStyle est petit et stable. Mais comme tout système qui contient ta data, ça vaut le coup de connaître les gestes de base pour ne rien perdre — et pour pouvoir évoluer sereinement.

Que sauvegarder

Deux fichiers contiennent tout ce qui a de la valeur dans ton install :

  • app/data/magstyle.db — la base SQLite. Elle contient : tes flux, tes catégories, tous les articles téléchargés, tes favoris, tes destinataires de newsletter, tes brouillons, ton historique d’envois, tes paramètres.
  • app/config.php — le secret applicatif. Sans lui, ton mot de passe SMTP chiffré en base devient illisible.

Tout le reste (les fichiers PHP de l’application) est rejouable depuis l’archive de MagStyle. Pas besoin de les sauvegarder.

Comment sauvegarder

Méthode la plus simple : connexion FTP à ton hébergement, télécharge ces deux fichiers sur ton ordinateur, range-les dans un dossier daté. Une fois par mois c’est largement suffisant pour un usage personnel.

Méthode plus sérieuse : si tu as un accès SSH, mets en place un script cron qui copie ces deux fichiers dans un dossier hors-webroot, et synchronise vers un service distant (rclone vers Backblaze B2, par exemple). Pas indispensable pour un usage perso.

Restaurer

Sur une nouvelle install (ou sur un serveur replanté) : tu reposes les fichiers PHP, tu remets data/magstyle.db et config.php à leur place. C’est tout. Pas besoin de relancer setup.php — la base et la config sont déjà là, l’application les utilise telles quelles.

Mettre à jour MagStyle

Quand une nouvelle version sort :

  1. Sauvegarde d’abord (les deux fichiers ci-dessus).
  2. Télécharge la nouvelle archive, décompresse-la localement.
  3. Upload tous les fichiers sauf config.php et le dossier data/. En FTP, sélectionne tout, exclus ces deux entrées, transfère en mode « écraser les existants ».
  4. Si une migration de base est nécessaire, MagStyle l’applique automatiquement à ta prochaine visite (les nouvelles tables sont créées si absentes).

Tu n’as jamais besoin de toucher à data/ ni à config.php lors d’une mise à jour. Si tu les écrases par accident, tu perds tes données — d’où l’importance de la sauvegarde préalable.

Déplacer l’install (changement d’hébergeur)

Procédure :

  1. Télécharge l’intégralité du dossier MagStyle depuis l’ancien hébergeur (PHP + data/ + config.php).
  2. Upload sur le nouvel hébergeur.
  3. Vérifie que les permissions sur data/ permettent l’écriture.
  4. Ouvre l’URL : ça doit fonctionner immédiatement, avec tes données et ton compte.

Le secret applicatif est portable : tant que config.php voyage avec toi, ton mot de passe SMTP reste déchiffrable. Pas besoin de le ressaisir.

Changer le secret applicatif

Si tu as une raison de régénérer le secret (compromission supposée, par exemple), édite config.php et remplace la valeur de 'secret' par une nouvelle chaîne hexadécimale de 64 caractères. Conséquence : ton mot de passe SMTP en base, chiffré avec l’ancien secret, devient illisible. Va dans Paramètres → Serveur SMTP, ressaisis le mot de passe SMTP, sauvegarde. C’est la seule action à faire.

Pour générer un nouveau secret aléatoire depuis ton terminal local :

php -r "echo bin2hex(random_bytes(32));"

↑ Retour au sommaire


13. Questions fréquentes

La plupart des cas de figure que tu rencontreras sont déjà traités. Cette dernière section regroupe les questions qui reviennent souvent.

L’application affiche une erreur 500 après installation

L’erreur 500 est un message générique du serveur web. La cause exacte est dans le log d’erreur PHP de ton hébergement (cherche dans le panel un onglet « Logs », « Erreurs » ou similaire). Causes les plus fréquentes :

  • .htaccess incompatible. Certains hébergeurs utilisent une configuration restrictive qui rejette une directive du .htaccess de MagStyle. Lis l’erreur dans le log et adapte le .htaccess.
  • Permissions sur data/. Si MagStyle ne peut pas écrire la base, il plante. Vérifie que data/ est en 755 ou 775 selon ton serveur.
  • Extension PHP manquante. Le wizard vérifie ça, mais si tu as installé sans passer par le wizard, vérifie en ligne de commande : php -m | grep -E 'pdo_sqlite|curl|mbstring|dom'.

Le site est lent ou bloqué quand j’ajoute un flux

Avec la version actuelle de MagStyle, ce ne devrait plus être le cas : l’ajout d’un flux est instantané (le téléchargement initial est différé à la prochaine visite). Si tu observes encore une lenteur, c’est probablement le fetch automatique d’un flux particulièrement lent à répondre. Augmente le timeout par flux dans Paramètres, ou désactive temporairement le flux fautif.

Mes mails de newsletter partent en spam

Cause la plus probable : tu utilises mail() sans serveur SMTP authentifié, ou ton domaine d’expéditeur n’a pas de SPF/DKIM/DMARC configurés. Solutions, par ordre d’efficacité :

  1. Configure un serveur SMTP authentifié (voir section 10). Solution numéro un.
  2. Configure SPF, DKIM et DMARC dans la zone DNS de ton domaine. SPF déclare quels serveurs ont le droit d’envoyer pour ton domaine. DKIM signe cryptographiquement chaque mail. DMARC indique aux serveurs destinataires quoi faire en cas d’échec SPF/DKIM. Ton hébergeur ou ton fournisseur SMTP a généralement une documentation pas-à-pas.
  3. Utilise un fournisseur SMTP spécialisé (Mailgun, Brevo, SendGrid…) plutôt que le SMTP de ton mutualisé. Leur réputation IP est meilleure, leur SPF/DKIM sont déjà configurés.
  4. Demande à tes destinataires d’ajouter ton expéditeur à leurs contacts. C’est le signal le plus fort que les filtres anti-spam respectent.

Un flux ne se met plus à jour

Va dans Administration → Journal et cherche les dernières lignes concernant le flux en question. Quelques cas :

  • Code HTTP 404. L’URL du flux a changé. Va sur le site source, cherche la nouvelle URL, modifie le flux dans MagStyle.
  • Code HTTP 410. Le flux a été supprimé définitivement par le site source. Désactive ou supprime le flux.
  • Code HTTP 301/302. Le flux a été déplacé. MagStyle ne suit pas automatiquement les redirections — adapte l’URL manuellement.
  • Code HTTP 304. C’est normal : ça signifie « pas de changement depuis la dernière fois ». Le flux fonctionne, il n’y a juste rien de nouveau.
  • Erreur de parsing. Le contenu téléchargé n’est pas du RSS/Atom valide. Le site source a peut-être un bug temporaire — réessaye plus tard.
  • Timeout systématique. Le serveur source est trop lent. Augmente le timeout dans Paramètres, ou résigne-toi à perdre ce flux.

J’ai oublié mon mot de passe administrateur

Il n’y a pas de récupération automatique par email — MagStyle n’a pas connaissance de ton email personnel. La procédure manuelle :

  1. Connecte-toi en SSH ou FTP à ton hébergement.
  2. Télécharge app/data/magstyle.db sur ton ordinateur.
  3. Ouvre la base avec un outil SQLite (par exemple DB Browser for SQLite, gratuit).
  4. Dans la table users, supprime ta ligne (ou modifie le champ password_hash avec un nouveau hash bcrypt généré ailleurs).
  5. Si tu as supprimé : remets la base en place, puis lance setup.php qui te proposera de créer un nouveau compte. Si tu as modifié : remets la base et reconnecte-toi avec le nouveau mot de passe.

Procédure rustique mais fiable. Garde ton mot de passe dans un gestionnaire à l’avenir.

Comment migrer depuis Feedly, Inoreader ou un autre lecteur

Tous ces lecteurs proposent un export OPML de ta liste de flux. Cherche cette option dans leurs paramètres (souvent caché dans « Paramètres → Importer / Exporter », ou « Backup »). Tu obtiens un fichier .opml. Importe-le dans MagStyle via Administration → Import / Export OPML.

Note : seule la liste des flux est transférée par OPML. Les articles non lus, les favoris, les tags spécifiques au lecteur d’origine restent dans l’ancien outil. Si tu veux conserver des articles particuliers, copie leurs URL avant de migrer, et remets-les en favoris dans MagStyle quand ils réapparaîtront via les flux.

Comment partager mon magazine avec d’autres

Active Lecture publique dans Paramètres (voir section 8), partage l’URL de ton MagStyle. Les visiteurs peuvent lire sans compte, sans mot de passe, sans rien installer. Ils ne peuvent ni marquer ni mettre en favori, mais ils peuvent lire, chercher, imprimer.

Puis-je avoir plusieurs comptes utilisateurs ?

Non. MagStyle est conçu comme un magazine personnel, géré par une seule personne. Un seul compte administrateur, point. Si tu as besoin de multi-utilisateurs avec des bibliothèques séparées, regarde du côté de FreshRSS ou de TinyTinyRSS — ce sont d’autres philosophies.

L’application va-t-elle continuer d’évoluer ?

MagStyle est un projet personnel, écrit par et pour son auteur. Les évolutions sont régulières mais sans calendrier garanti. Si tu trouves un bug ou si tu as une suggestion, le meilleur réflexe est d’ouvrir une issue (si le projet est sur un dépôt public) ou de contacter l’auteur directement.

↑ Retour au sommaire


Fin du manuel. Bonne lecture, et bons bouquets.