Lecteur RSS/Atom auto-hébergé et multi-utilisateur, développé en PHP, SQLite et JavaScript natif. Il propose une interface responsive installable comme PWA et une API JSON.
- Comptes isolés, sans inscription publique (premier compte créé à l'installation, autres comptes via CLI)
- Abonnements RSS/Atom : ajout direct ou découverte sur site web, catégories optionnelles, favicon et images des articles stockées localement
- Actualisation automatique (cron) et manuelle, un flux ou tous, détection de doublons
- Articles : vues Tous / Non lus / Lus / Favoris / par catégorie / par flux, recherche plein texte (FTS5)
- Tags d'articles importés des flux, affichés en lecture seule dans le lecteur
- « Recommandé pour vous » : suggestions locales de non-lus proches de vos favoris (aucune IA, aucun service externe)
- Import/export OPML des abonnements et catégories
- Paramètres : mot de passe, chargement de 25 articles, thème clair/sombre
- Interface accessible (clavier, focus visible, contraste) et mode PWA installable avec shell hors ligne
PHP 8.2 ou plus récent avec les extensions suivantes : PDO SQLite, SQLite
(avec FTS5, activé par défaut sur les distributions courantes), ctype, curl,
dom, GD, json, mbstring, session. Les comptes PHP-FPM et cron doivent disposer
d’un accès ACL partagé sur var/media et ses sous-dossiers. Composer
est requis pour l'installation et la
qualité. La production nécessite HTTPS et une racine web configurée sur
public/.
Quand PHP-FPM et le cron utilisent des comptes distincts, accordez-leur un ACL partagé sur les médias existants et futurs avec le script d’administration :
bin/fix-media-aclLe compte courant est utilisé par défaut pour le cron et www-data pour
PHP-FPM. Pour employer d’autres comptes, passez-les dans cet ordre :
bin/fix-media-acl CRON_USER PHP_FPM_USER. Le script utilise
APP_MEDIA_PATH quand cette variable est définie et demande les droits
sudo nécessaires.
composer install
php bin/console app:install <utilisateur>L'installation crée la base, applique les migrations (schéma initial,
recherche plein texte, thème, tags d'articles), prépare le stockage et crée
le premier utilisateur. Le mot de passe est demandé dans le terminal. Pour
une installation automatisée, ajoutez --password-stdin et fournissez le
mot de passe sur l'entrée standard.
Configurez ensuite le serveur web pour servir le répertoire public/ et
planifiez la synchronisation :
# toutes les heures, selon votre crontab
php bin/console feeds:refreshPour activer les recommandations par email, configurez également
APP_MAILER_DSN, APP_MAIL_FROM, APP_BASE_URL et, facultativement,
APP_MAIL_FROM_NAME. Exemple :
APP_MAILER_DSN='smtp://user:password@smtp.example.org:587'
APP_MAIL_FROM='rss@example.org'
APP_MAIL_FROM_NAME='RSS Reader'
APP_BASE_URL='https://rss.example.org'Avec un relais local compatible sendmail, par exemple msmtp :
APP_MAILER_DSN='sendmail://default?command=/usr/sbin/sendmail+-t+-i'Les identifiants inclus dans le DSN doivent être encodés comme une URL et ne doivent jamais être versionnés.
Le secret applicatif est généré dans var/app.secret à l'installation ; la
variable d'environnement APP_SECRET le remplace le cas échéant. La liste
des commandes CLI disponibles et les exigences de production figurent dans
docs/ARCHITECTURE.md et
docs/PROJECT.md.
composer check # lint + analyse statique + tests (la barre de fin de tâche)
composer audit # vulnérabilités (accès réseau requis)
npm ci && node tests/Frontend/check.mjs && node tests/Frontend/run.mjsLe frontend exige Node 18+. Détails et structure des tests dans
docs/TESTING.md.
- Spécification générale (scope V1, exclusions)
- Fonctionnalités
- Architecture, CLI et cron
- API JSON
- Base de données et migrations
- RSS/Atom : parsing et synchronisation
- Sécurité
- Frontend et accessibilité
- PWA
- Tests et qualité
Les règles de contribution destinées aux agents de développement figurent
dans AGENTS.md.
Code source distribué sous licence MIT. Dépendances tierces
gérées par Composer (composer show --license pour la liste des licences
incluses).

