Début du projet

This commit is contained in:
TopScritch committed 2026-10-25 20:05:12 +01:00
commit e7d4e607f6
23 files changed
+4855

No files matched your search

+98
View File
@@ -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.
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.