Début du projet
This commit is contained in:
commit
e7d4e607f6
23 files changed
+4855
No files matched your search
@@ -0,0 +1,98 @@
|
||||
# Cahier des charges - Agrégateur d'actualités informatiques
|
||||
|
||||
## 1. Objectif du projet
|
||||
|
||||
Créer un site web agrégateur d'actualités axé sur l'informatique. L'objectif est de centraliser une sélection d'articles pertinents, organisés par date et par thématique, afin d'offrir une lecture synthétique et structurée.
|
||||
|
||||
## 2. Fonctionnalités
|
||||
|
||||
### 2.1. Frontend (affichage public)
|
||||
|
||||
- **Liste d'articles** : Afficher les articles validés dans l'interface publique.
|
||||
- **Tri** : Possibilité de trier/filtrer par date de publication et par sujet/catégorie.
|
||||
- **Fiche article** : Chaque entrée doit afficher au minimum : titre, source (nom/site), date de publication, résumé/description, catégorie(s), lien vers l'article original.
|
||||
- **Navigation claire** : Interface épurée, responsive, facile à consulter.
|
||||
- **Pas de re-publiquation intégrale** : Renvoi systématique vers la source originale (lien externe).
|
||||
|
||||
### 2.2. Collecte automatisée des articles
|
||||
|
||||
- **Scraping ou IA** : Système permettant de récupérer automatiquement des actualités liées à l'informatique.
|
||||
- **Fréquence configurable** : Exécution à intervalles réguliers (cron/planificateur) paramétrable.
|
||||
- **Ciblage** : Sélectionner des sources fiables (blogs, médias tech, éditeurs, etc.) avec possibilité de les configurer.
|
||||
- **Enrichissement** : Normaliser les données (titre, lien, date, résumé, catégorie) avant enregistrement.
|
||||
- **Filtrage initial** : Éviter les doublons (même URL ou titre très proche) lors de l'import.
|
||||
|
||||
### 2.3. Administration
|
||||
|
||||
- **Accès protégé** : Interface d'administration sécurisée par authentification (identifiants/mot de passe).
|
||||
- **Gestion des articles** :
|
||||
- Lister tous les articles collectés (en attente / publiés / masqués / rejetés)
|
||||
- Rechercher manuellement de nouveaux articles (déclenchement à la demande)
|
||||
- Masquer/afficher un article jugé inutile, obsolète ou faux
|
||||
- Supprimer un article si nécessaire
|
||||
- Valider un article avant publication ou modifier ses métadonnées (catégorie, résumé)
|
||||
- **Gestion des sources** (facultatif mais recommandé) : Ajouter/modifier/désactiver les sources utilisées par le collecteur.
|
||||
- **Journal d'activité** : Tracer les actions (collecte, validation, masquage) pour faciliter le suivi.
|
||||
|
||||
### 2.4. Stockage des données
|
||||
|
||||
- **Solution autonome** : Utiliser SQLite.
|
||||
- **Schéma minimal** : Au minimum une table/structure `articles` contenant : `id`, `title`, `url` (unique), `source`, `published_at`, `summary`, `categories` (JSON ou relationnel), `status` (pending/published/hidden/rejected), `created_at`, `updated_at`, `collected_by` (scraper/ai).
|
||||
- **Persistance** : Les données doivent survivre au redémarrage du conteneur.
|
||||
|
||||
## 3. Contraintes techniques
|
||||
|
||||
### 3.1. Technologies
|
||||
|
||||
- **Frontend** : HTML5, CSS3, JavaScript vanilla (pas de framework lourd imposé). Doit rester simple et compréhensible.
|
||||
- **Backend** : À choisir de manière pragmatique (Node.js/Express, Python/Flask/FastAPI, ou équivalent). Priorité à la simplicité et à la facilité de reprise.
|
||||
- **Base de données** : SQLite par défaut (fichier dans un volume Docker).
|
||||
- **Conteneurisation** : L'ensemble doit tourner dans un conteneur Docker. Fournir un `Dockerfile` et idéalement `docker-compose.yml`.
|
||||
- **Volume persistant** : Monter un volume pour la base de données et/ou les fichiers de configuration.
|
||||
|
||||
### 3.2. Collecte avec IA (si utilisée)
|
||||
|
||||
- **Modèles gratuits** : Si un assistant/LLM est utilisé pour la collecte ou le filtrage, privilégier des modèles gratuits et accessibles (avec ou sans clé selon l'offre).
|
||||
- **Accès web** : Préférer des modèles capables de rechercher sur internet ou utiliser un outil de recherche gratuit en complément.
|
||||
- **Coûts nuls** : Éviter les APIs payantes obligatoires. Si une clé est nécessaire, la documenter clairement dans `.env.example`.
|
||||
- **Robustesse** : Avoir un fallback (scraping classique) au cas où l'IA est indisponible.
|
||||
|
||||
### 3.3. Qualité et maintenabilité
|
||||
|
||||
- **Code simple et commenté** : Code lisible, commentaires en français si souhaité, noms explicites.
|
||||
- **Documentation** : Fournir un `README.md` détaillant : installation, configuration (.env), lancement (Docker/local), utilisation admin, fonctionnement du collecteur.
|
||||
- **Sécurité** :
|
||||
- Authentification pour l'interface admin
|
||||
- Protection basique contre les actions non autorisées (CSRF/session)
|
||||
- Ne pas exposer de clés/secrets dans le dépôt
|
||||
- Valider les URLs et données entrantes
|
||||
- **Configurabilité** : Paramètres via variables d'environnement (fréquence de collecte, sources, identifiants admin, etc.).
|
||||
- **Extensibilité** : Architecture simple permettant d'ajouter facilement de nouvelles sources.
|
||||
|
||||
## 4. Livrables attendus
|
||||
|
||||
- **Code source complet** : Structure claire (frontend, backend, collecteur, config).
|
||||
- **Dockerisation** : `Dockerfile`, `docker-compose.yml`, `.dockerignore`.
|
||||
- **Configuration** : `.env.example` avec toutes les variables nécessaires.
|
||||
- **Base de données** : Schéma/migration automatique au premier démarrage.
|
||||
- **Documentation** : `README.md` (objectif, prérequis, installation, démarrage, utilisation, dépannage).
|
||||
- **Interface fonctionnelle** : Page d'accueil publique + interface d'administration.
|
||||
|
||||
## 5. Critères d'acceptation
|
||||
|
||||
- [ ] Le site s'affiche correctement avec HTML/CSS/JS vanilla.
|
||||
- [ ] La collecte automatique fonctionne à intervalle régulier et enregistre les articles dans la BDD.
|
||||
- [ ] Un accès admin permet de valider/masquer/rejeter des articles.
|
||||
- [ ] Le tri par date et par sujet est fonctionnel sur la page publique.
|
||||
- [ ] L'application tourne intégralement sous Docker avec un volume persistant.
|
||||
- [ ] Aucun secret n'est commité dans le dépôt.
|
||||
- [ ] Le code est commenté et compréhensible pour une reprise ultérieure.
|
||||
- [ ] Le système évite les doublons d'articles.
|
||||
- [ ] Si IA utilisée, seuls des modèles gratuits sont privilégiés et documentés.
|
||||
|
||||
## 6. Contraintes non-fonctionnelles
|
||||
|
||||
- **Simplicité avant complexité** : Privilégier des solutions claires plutôt qu'over-engineered.
|
||||
- **Léger** : Fonctionnement fluide sans dépendances inutiles.
|
||||
- **Indépendant** : Ne dépend pas obligatoirement d'un service tiers payant.
|
||||
- **Portable** : Doit pouvoir tourner sur un poste local ou un petit serveur via Docker.
|
||||