# IliaCloud — Roadmap

> Liste des fonctionnalites a implementer, classees par priorite.
> Chaque feature est cochee une fois implementee et testee.

---

## Phase 1 — Haute priorite (quotidien)

- [x] **Notifications push**
  - Web Push via VAPID keys + service worker PWA
  - Tables push_subscriptions, alert_rules, alert_history
  - Seuils configurables par metrique (CPU, RAM, disque, load) avec slider
  - Anti-spam : cooldown 15 min entre alertes identiques
  - Onglet Alertes dans Settings (toggle push, seuils, historique)
  - Nettoyage auto des subscriptions expirees

- [x] **Historique des metriques**
  - Table `metrics_history` (CPU, RAM, disk, load avec timestamps)
  - Collecteur automatique toutes les 5 min + nettoyage > 30 jours
  - API history avec range 1h/6h/24h/7d/30d
  - Chart.js + react-chartjs-2 : graphiques CPU+RAM et Load
  - Selecteur de plage temps dans le dashboard

- [x] **Multi-serveurs dans l'UI**
  - Dashboard comparatif de tous les serveurs en un coup d'oeil
  - Indicateur vert/orange/rouge par serveur dans le selecteur
  - Vue "tous les serveurs" avec resume CPU/RAM/Disque/status de chacun

- [x] **Terminal web SSH**
  - Terminal interactif dans le navigateur via xterm.js
  - Connexion WebSocket bidirectionnelle (stdin/stdout)
  - Support des couleurs ANSI et du redimensionnement
  - Historique des commandes dans le terminal
  - Accessible depuis chaque page via un bouton flottant
  - Drawer redimensionnable (40% / 80% de l'ecran)
  - Menu hamburger pour toute la navigation

---

## Phase 2 — Moyenne priorite (confort)

- [x] **Editeur de fichiers**
  - Navigateur de fichiers (arborescence) sur le serveur distant
  - Lecture et edition avec coloration syntaxique (CodeMirror)
  - Sauvegarde avec confirmation
  - Support des fichiers volumineux (limite 2 MB)
  - Breadcrumb de navigation + detection auto du langage

- [x] **Docker Compose / Stack deploy**
  - Bouton "redeployer ce stack" sur chaque groupe de services
  - Voir la config docker-compose.yml d'un stack
  - Visualiser l'historique des deployments
  - Rollback en un clic

- [x] **Cron manager**
  - Lister toutes les crontabs (root + users)
  - Ajouter / modifier / supprimer des taches cron
  - Activer / desactiver une tache sans la supprimer
  - Voir les logs des derniere executions
  - Presets de schedule courants

- [x] **Backup manager**
  - Configurer des backups automatiques (PostgreSQL, MySQL)
  - Lancer un backup manuel en un clic
  - Lister les backups existants avec taille et date
  - Restaurer un backup avec confirmation
  - Upload/download de backups
  - Auto-scan des containers DB (PostgreSQL, MySQL, MariaDB)
  - Notification webhook en cas d'echec ET de succes

- [x] **Uptime monitoring**
  - Configurer des URLs a surveiller (HTTP/HTTPS)
  - Ping toutes les 1-5 minutes depuis le backend
  - Historique de disponibilite (uptime %)
  - Alerte quand un site est down + recovery quand il remonte
  - Page dediee avec graphique de latence par URL
  - Auto-scan des URLs depuis les labels Traefik

---

## Phase 3 — Polish (qualite)

- [x] **Theme clair / sombre**
  - Toggle dark/light mode
  - Respecter la preference systeme par defaut
  - Persister le choix dans localStorage

- [x] **Monetisation — Plans + Stripe** (PRIORITAIRE)
  - Middleware planLimits : checkQuota, requireFeature, checkDailyQuota
  - Fichier config/plans.js avec toutes les limites Free/Pro/Business/Enterprise
  - Appliquer les limites sur chaque route existante (20+ routes protegees)
  - Integration Stripe Checkout + portail client + webhooks
  - Table subscriptions (stripe_customer_id, plan, status, period)
  - Section billing dans Settings (plan actuel, gerer, changer)
  - Composant UpgradeBanner + hook usePlan() cote frontend
  - Composants PlanButton, PlanLimitModal, PlanQuotaInfo
  - Free: 0€ | Pro: 12€/mois (99€/an) | Business: 35€/mois (299€/an) | Enterprise: 99€/mois (899€/an)
  - Page /pricing publique (dans iliacloud-site)

- [ ] **Uptime multi-localisation**
  - Cloudflare Workers (3 regions, free tier 100k req/jour)
  - Worker qui ping les URLs et POST le resultat a l'API IliaCloud
  - Comparaison des resultats entre VPS principal + Workers
  - Afficher la region du check dans l'historique

- [x] **Historique metriques 1 an**
  - Changer la retention SQL de 90j a 365j pour le plan Business
  - Mettre a jour metricsCollector, uptimeChecker, sslChecker
  - Argument marketing sur la page pricing

- [x] **Partage d'acces (multi-user)**
  - Groupes de projets avec selection de containers Docker (docker_targets)
  - Invitation par email (SHA-256, 72h, max 5 renvois) + ajout direct si membre connu
  - Permissions granulaires par zone (17 zones x niveaux none/read/write adaptes)
  - Filtrage automatique partout : Docker, Logs, Backups, Uptime, SSL, Alerts, Audit
  - Terminal Docker securise pour les membres (docker exec, pas d'acces serveur)
  - Actions rapides Docker (execution dans le container via stdin pipe)
  - Plan du owner herite par les membres
  - Menu, routes et boutons filtres par permissions
  - 3830 tests backend + 1471 tests frontend
  - Detail : [ROADMAP_PARTAGE_ACCES.md](ROADMAP_PARTAGE_ACCES.md)

- [x] **Backup infrastructure IliaCloud**
  - Backup automatique de la BDD PostgreSQL d'IliaCloud (pg_dump quotidien via cron)
  - Rotation des backups (retention configurable, ex: 7 jours)
  - Rapatriement local via rsync (backup_application/)
  - Procedure de disaster recovery (script backup-restore.sh)
  - Alerte Discord configurable si backup echoue (DISCORD_WEBHOOK_URL dans le script)

- [ ] **CI/CD triggers**
  - Declencher un redeploiement depuis l'UI (GitHub Actions, GitLab CI, webhook custom)
  - Voir le statut du dernier build/deploy
  - Historique des deployments avec rollback
  - Integration GitHub (webhooks push → auto-deploy)

- [x] **Notifications webhook (Slack/Discord/Telegram)**
  - 10 types d'evenements : alertes serveur, recovery, uptime down/up, SSL expiring/expired/recovery, backup error/success, HTTP 5xx
  - Support Discord (embeds), Slack (emojis), Telegram (Markdown), Custom (JSON)
  - Tous les events selectionnables individuellement dans l'UI
  - Modification des webhooks existants (ajout/retrait d'events)
  - Boutons "Tout / Aucun" pour la selection rapide
  - Bouton de test pour verifier la connexion

- [x] **Alertes serveur avec recovery**
  - Alertes CPU, RAM, Disque, Load quand seuil depasse
  - Recovery automatique quand la metrique revient sous le seuil
  - Double notification : Web Push + Webhook
  - Cooldown anti-spam 15 min entre alertes identiques

- [x] **Support multi-provider IA**
  - 6 providers : Anthropic, OpenAI, Google Gemini, DeepSeek, Mistral, xAI Grok
  - Selecteur provider + modele dans le chat
  - 15 modeles disponibles (Sonnet, Opus, GPT-4o, Gemini 2.5, DeepSeek R1, etc.)

- [x] **SSL / Certificats monitoring**
  - Connexion TLS directe pour verifier l'expiration des certificats
  - Check automatique toutes les heures
  - Alerte X jours avant expiration (seuil configurable 7-90j)
  - Recovery quand le certificat est renouvele
  - Scan automatique depuis les monitors uptime
  - Historique des verifications

- [x] **Docker logs streaming**
  - Voir les logs d'un container en temps reel via WebSocket
  - Detection auto des fichiers de logs internes (Apache, Nginx, PHP, etc.)
  - Utilise les log_paths configures en base, sinon auto-scan universel
  - Filtrage par mot-cle, auto-scroll, limite 5000 lignes
  - Integre dans la page Docker (4eme vue)

- [x] **Espace disque dans l'overview**
  - Barre de progression disque dans la vue multi-serveurs (used/total)
  - Statut serveur prend en compte le disque (warning 85%, critical 95%)
  - Alertes disque via le systeme d'alertes existant

- [x] **Dashboard de statut public**
  - Page publique accessible sans login via /status/:slug
  - Personnalisable : titre, description, logo, couleurs (accent, fond, texte)
  - Affichage uptime % et latence par service (configurable)
  - Statut global (operationnel / degrade)
  - Auto-refresh toutes les 60 secondes
  - Gestion des pages et monitors depuis l'admin

- [x] **Surveillance HTTP 5xx**
  - Scan automatique des access logs toutes les 60 secondes
  - Detection des erreurs 500, 502, 503, 504
  - Alerte webhook avec details (URL, code, IP, container)
  - Cooldown 5 min par URL/code pour eviter le spam

- [x] **Audit log**
  - Middleware automatique sur toutes les actions mutantes (POST/PATCH/DELETE)
  - Table `audit_logs` avec action, categorie, cible, details, IP, timestamp
  - 16 categories (auth, server, docker, ssh, chat, backup, ssl, etc.)
  - Filtrage des donnees sensibles (mots de passe, cles, tokens → [REDACTED])
  - Page dediee avec pagination, filtres par categorie, recherche, plage de temps
  - Export CSV
  - Purge des anciens logs

- [x] **Import / export config**
  - Export chiffre AES-256-GCM avec mot de passe utilisateur (PBKDF2 100k iterations)
  - Apercu avant export (nombre de serveurs, cles, monitors, etc.)
  - Validation et preview a l'import (sans appliquer)
  - Fichier JSON telechargeable
  - Support de tous les elements : serveurs, cles SSH/IA, monitors, webhooks, alertes, status pages, backups, SSL

---

## Phase 4 — Tests et qualite

- [x] **Tests unitaires backend** (2672 tests, 76 fichiers)
  - Framework : Vitest, mocking DB via vi.spyOn(pool.query), mocking SSH via patch module
  - Couverture : routes (auth, servers, docker, backups, billing, cron, files, logs, uptime, ssl, alerts, webhooks, chat, contact, configExport, userApiKeys, audit, annotations, digest, report, quickActions, statusPage, metrics, sshKeys, apiKeys, twofa), middleware (auth, csrf, errorHandler, planLimits, audit, apiAuth, apiRateLimit), services (email, ssh, crypto, totp, claude, openai, tools, sslChecker, uptimeChecker, metricsCollector, httpErrorWatcher, pushNotifier, backupScheduler, webhookNotifier, reportScheduler, digestScheduler, commandAnalyzer), API v1 (index, servers, monitors, webhooks, alerts, ssl, statusPages, me), utils (parsers, pathValidator, networkValidator, shell), websocket, autoMigrate

- [x] **Tests frontend** (475 tests, 50 fichiers)
  - Framework : Vitest + React Testing Library
  - Couverture : tous les composants, pages, contexts, hooks et lib

- [x] **Integration SonarQube**
  - sonar-project.properties configure
  - Quality gate : 0 bugs, 0 vulnerabilites, couverture 77.3%

- [x] **Tests E2E**
  - Framework : Playwright + Chromium headless
  - Scenarios : authentification, navigation protegee, page de statut publique

---

## Features supplementaires ajoutees

> Fonctionnalites implementees et en production, non listees dans les phases precedentes.

- [x] **Mot de passe oublie**
  - Page /forgot-password + /reset-password
  - Token usage unique avec expiration 1h
  - Email envoye via le service email (Nodemailer/SMTP)

- [x] **Email transactionnel**
  - Service email via Nodemailer (SMTP OVH)
  - Confirmation d'inscription (token 24h)
  - Reset de mot de passe (token 1h)
  - Verification de changement d'email

- [x] **Verification d'email**
  - Token de verification envoye a l'inscription
  - Page /verify-email pour confirmer
  - Renvoi de lien de verification possible

- [x] **Changement d'email avec re-verification**
  - POST /auth/change-email declenche un email au nouveau mail
  - Page /verify-new-email pour confirmer le changement
  - L'ancien email reste actif tant que le nouveau n'est pas verifie

- [x] **Gestion des sessions actives**
  - Liste de toutes les sessions (navigateur, device, IP)
  - Revocation individuelle d'une session
  - Detection automatique du type de navigateur/appareil
  - Accessible dans Settings > Compte

- [x] **Suppression de compte**
  - Confirmation par mot de passe obligatoire
  - Suppression en cascade de toutes les donnees utilisateur

- [x] **Account lockout**
  - Blocage automatique apres 5 tentatives echouees en 15 min
  - Protection contre le brute-force

- [x] **Onboarding guide**
  - Wizard 3 etapes pour les nouveaux utilisateurs (Cle SSH → Serveur → Cles IA)
  - Affiche automatiquement quand aucun serveur n'est configure
  - Test de connexion SSH visible a chaque etape

- [x] **Actions rapides (Quick Actions)**
  - CRUD de commandes bash personnalisees
  - Option d'execution sur tous les serveurs
  - Confirmation requise pour les actions dangereuses
  - Reordonnancement par drag & drop
  - Presets de commandes courantes

- [x] **Monitoring de logs systeme**
  - Gestion de log paths (fichiers systeme + Docker)
  - Tail en temps reel avec limite de lignes
  - Auto-scan des logs standards (Apache, Nginx, PHP, etc.)
  - Page dediee /logs

- [x] **Docker health checks et stats**
  - Health check HTTP par container
  - Stats CPU/RAM en temps reel par container
  - Integre dans la page Docker

- [x] **Aide contextuelle (PageHelp)**
  - Icone ? avec popover explicatif sur chaque page
  - Aide adaptee au contexte de la page courante

- [x] **PWA install**
  - Detection automatique de la disponibilite PWA
  - Proposition d'installation sur mobile et desktop

- [x] **Backup scheduler automatique**
  - Verification toutes les 15 minutes des backups planifies
  - Frequences : horaire, quotidien, hebdomadaire
  - Nettoyage automatique selon la politique de retention
  - Notification webhook en cas d'echec

---

## A implementer — Prochaines priorites

> Fonctionnalites identifiees comme manquantes et a developper.

### Priorite haute

- [x] **2FA / TOTP (Authentification a deux facteurs)** ✅ (v1 — avril 2026)
  - Support Google Authenticator / Authy (protocole TOTP)
  - QR code de configuration + codes de secours (8 codes)
  - Activation/desactivation dans Parametres > Compte
  - Ecran de verification 2FA au login
  - Chiffrement AES-256-CBC du secret TOTP en base
  - 29 tests (15 backend + 14 frontend)

### Priorite moyenne

- [x] **Resume quotidien / hebdomadaire par email** *(implemente)*
  - Scheduler dans `backend/src/services/digestScheduler.js` : verification chaque minute, envoi a l'heure configuree
  - Routes `GET/PATCH /digest` dans `backend/src/routes/digest.js` avec validation + feature gating `email_digest`
  - Colonnes `digest_enabled`, `digest_frequency`, `digest_hour`, `digest_last_sent` dans la table users
  - Contenu du digest : etat serveurs (CPU/RAM/disque/load), uptime monitors, backups, alertes
  - Template HTML complet avec tableau serveurs et stats par section
  - Protection anti-doublon : cooldown 20h (daily) et 144h (weekly), envoi hebdo le lundi uniquement
  - Plan Pro/Business requis (`email_digest: true` dans config/plans)
  - Onglet "Email" dans SettingsPage : toggle, choix frequence, heure d'envoi (UTC)
  - Reutilise le service email existant (`sendEmail`)
  - Tests : 12 routes + 28 service (backend), 9 DigestTab + 1 SettingsPage (frontend)

- [ ] **Recherche dans les logs**
  - Grep depuis l'UI sur les logs des 7 derniers jours
  - Recherche par mot-cle, regex, plage de temps
  - Highlight des resultats dans le viewer
  - Actuellement : tail uniquement, pas de recherche historique

- [x] **Annotations / incidents sur la timeline** *(implemente)*
  - CRUD complet (GET/POST/PATCH/DELETE) dans `backend/src/routes/annotations.js`
  - Table `annotations` avec categories (deployment, incident, maintenance, config, other)
  - Composant `AnnotationsTimeline.jsx` : formulaire creation/edition, liste avec badges categorie
  - Plugin Chart.js : lignes verticales colorees par categorie sur les graphiques de metriques
  - Integration dans `MetricsChart.jsx` avec chargement parallele des annotations
  - 22 tests backend + 17 tests frontend

### Priorite basse

- [ ] **Commandes favorites / snippets**
  - Bibliotheque de commandes reutilisables dans le terminal SSH
  - Organisation par categorie / tags
  - Partage entre serveurs
  - Complement aux Quick Actions (qui sont des scripts, pas des snippets terminal)

- [x] **Rapport mensuel PDF**
  - Uptime du mois, incidents, metriques moyennes par serveur
  - Generation PDF via Gotenberg (HTML→PDF), envoi en piece jointe par email
  - Scheduler automatique le 1er de chaque mois a l'heure configuree (UTC)
  - Generation manuelle depuis les parametres
  - Onglet Rapport dans les parametres (toggle, heure, dernier envoi, bouton generer)
  - Feature gate plan Pro/Business (`monthly_report`)
  - Backend : `reportScheduler.js` (service) + `report.js` (routes GET/PATCH/POST)
  - Frontend : ReportTab dans SettingsPage
  - Tests : 53 tests backend (routes + scheduler) + 10 tests frontend

- [ ] **Integration GitHub / GitLab webhooks**
  - Reception de webhooks push depuis GitHub/GitLab
  - Affichage du statut de deploy en temps reel
  - Historique des deployments avec lien vers le commit
  - Chainon manquant entre l'app et le workflow dev complet

---

## Phase 5 — Monitoring avance + Plan Enterprise

> Fonctionnalites pour renforcer le monitoring et justifier un plan Enterprise a prix premium.

### Monitoring avance

- [ ] **Monitoring DNS**
  - Verification de la resolution DNS (A, AAAA, CNAME, MX, TXT)
  - Alerte si un enregistrement change ou ne resout plus
  - Historique des changements DNS

- [ ] **Monitoring port TCP/UDP**
  - Verification que des ports specifiques sont ouverts et repondent
  - Support TCP (ex: MySQL 3306, Redis 6379, SMTP 25) et UDP
  - Alerte si un port devient injoignable

- [ ] **Keyword monitoring**
  - Verification qu'un mot-cle est present (ou absent) dans la reponse HTTP
  - Detection de pages d'erreur, contenu deface, maintenance non planifiee
  - Alerte si le keyword disparait ou apparait

- [ ] **Alertes temps de reponse**
  - Alerte si le temps de reponse depasse un seuil configurable (ex: > 2s)
  - Historique des latences avec graphique
  - Detection des degradations progressives

- [ ] **Fenetres de maintenance**
  - Planifier des periodes ou les alertes sont desactivees
  - Evite les faux positifs pendant les deployments ou mises a jour
  - Affichage sur la page de statut publique ("Maintenance planifiee")

- [ ] **Retention donnees 24 mois**
  - Nouveau palier de retention pour le plan Enterprise
  - Compression/aggregation des anciennes donnees (moyennes horaires au-dela de 90j)

### Integrations natives

- [ ] **Integrations alertes natives**
  - PagerDuty (incidents automatiques)
  - OpsGenie (escalation)
  - Microsoft Teams (webhook format adapte)
  - Integration directe sans passer par un webhook custom

- [ ] **Alertes SMS / appels vocaux**
  - Envoi de SMS via Twilio ou OVH SMS
  - Appel vocal automatique pour les alertes critiques
  - Credits SMS configurables par utilisateur

### API et acces programmatique

- [x] **API publique REST** *(implemente)*
  - 30+ endpoints (serveurs, monitors, SSL, alertes, backups, annotations, webhooks, status pages, compte)
  - Authentification par API key (`iliacloud_xxx`, hash SHA-256, scopes read/write/admin)
  - Rate limiting par plan (Pro 1000/h, Business 5000/h, Enterprise 20000/h)
  - Documentation OpenAPI 3.0 interactive sur `/api/docs` (Swagger UI)
  - Gestion des cles dans Parametres > API (generation, revocation, scopes)
  - Plan Free bloque (api_access: false), argument de conversion Pro

### Plan Enterprise

- [x] **Plan Enterprise — 99 EUR/mois (899 EUR/an)**
  - Tout le plan Business +
  - Serveurs, monitors, webhooks, alertes, backups illimites
  - Utilisateurs illimites
  - Status pages marque blanche (sans branding IliaCloud)
  - API 20 000 req/heure
  - Retention donnees 1 an (metriques, audit, uptime, SSL)
  - Support dedie
  - SLA 99.9% garanti
  - Stripe self-service (checkout + migration prorata)

---

## Ameliorations recentes (avril 2026)

> Fonctionnalites implementees hors roadmap initial.

- [x] **Plan Enterprise + refonte limites Business**
  - 4 plans : Free / Pro (12EUR) / Business (35EUR) / Enterprise (99EUR)
  - Business plafonne (30 serveurs, 150 monitors, 3 users, 180j retention)
  - Enterprise illimite (serveurs, users, marque blanche, SLA 99.9%)
  - Nouveaux prix annuels : Pro 99EUR, Business 299EUR, Enterprise 899EUR
  - Stripe live avec 3 produits, 6 price IDs, webhook prod

- [x] **API publique REST v1**
  - 30+ endpoints read + write (serveurs, monitors, SSL, alertes, backups, annotations, webhooks, status pages, compte)
  - Auth par API key (SHA-256, scopes read/write/admin, expiration)
  - Rate limiting dynamique par plan (Pro 1000/h, Business 5000/h, Enterprise 20000/h)
  - Documentation Swagger UI dark theme sur /api/docs
  - Gestion des cles dans Parametres > API (generation, copie, revocation)
  - Compteur requetes API en temps reel (barre de progression)
  - Feature gate api_access (Free bloque)

- [x] **Redesign page statut publique**
  - Badges "En ligne" / "Hors ligne" avec bordure coloree
  - Dots lumineux, uptime 24h + latence sous chaque service
  - "Derniere verification il y a X" dans le bandeau
  - Support banniere (image full-width en haut)
  - Logo agrandi (64px)
  - 6 themes predefinis (default, minimal, glass, corporate, neon, rounded)
  - CSS custom injectable (classes .sp-page, .sp-banner, .sp-service, etc.)
  - Bouton previsualiser dans l'editeur

- [x] **Migration automatique DB au demarrage**
  - schema.sql execute automatiquement avant listen()
  - Plus besoin de step CI/CD separe
  - Non bloquant (log erreur mais ne crashe pas)

- [x] **Formulaire de contact**
  - Route POST /contact (validation, anti-spam honeypot, rate limit 3/h, escapeHtml)
  - Page /contact dans l'app (React, sans auth requise)
  - Page /contact sur le site vitrine (Astro, JS vanilla)
  - Envoi email via service SMTP existant (Nodemailer/OVH)
  - CORS ouvert pour le site vitrine, lien dans header + footer
  - 26 + 7 tests (backend + frontend)

- [x] **Status page Cloudflare Pages (standby)**
  - Page HTML statique hebergee sur Cloudflare Workers
  - Cache localStorage si le backend est down
  - Prete pour un futur 2eme serveur

### Idees a explorer

- [ ] **Themes marketplace** — Permettre aux clients de partager leurs themes CSS
- [ ] **Templates HTML custom (Enterprise)** — Controle total du rendu avec variables Mustache
- [ ] **Status page sur domaine custom** — Le client pointe son propre CNAME vers IliaCloud
- [ ] **Incidents manuels sur status page** — Creer/resoudre des incidents avec timeline
- [ ] **Uptime multi-localisation** — Cloudflare Workers pour ping depuis 3+ regions
- [ ] **Notifications SMS/appels** — Twilio pour les alertes critiques Enterprise
- [ ] **Webhooks d'events API** — Notifier les clients quand un monitor change de statut

*Derniere mise a jour : 9 avril 2026 — 3991 tests backend (88 fichiers) + 475 tests frontend (50 fichiers) — websocket.js a 100% lignes, groups.js 98.82%, backups.js 98.97%*
