# Suivi d'implémentation — ProxmoxPanel CORE

Référence : `instruction.md` | Mis à jour : 2026-03-21

---

## Stack technique actuelle

| Composant | Choix | Statut |
|-----------|-------|--------|
| Backend | Go 1.23 + chi v5 + gorilla/websocket | ✅ Implémenté |
| Base de données | SQLite via modernc.org/sqlite (sans CGO) | ✅ Implémenté |
| Auth | PAM via SSH + JWT RS256 | ✅ Implémenté |
| Chiffrement | AES-256-GCM (master.key) | ✅ Implémenté |
| Frontend | Alpine.js v3 + HTMX v2 + Swup v4 | ✅ Branche `frontend/alpine` |
| Icônes | **LineIcons Duotone** | ⚠️ Non intégré (symboles Unicode utilisés) |
| Terminal | xterm.js v5 + addon-fit + WS PTY | ✅ Implémenté |
| Build frontend | esbuild (bundler Swup ESM → IIFE) | ✅ Implémenté |
| Serveur statique | Nginx 1.27 | ✅ Dockerfile simplifié |

---

## Fonctionnalités CORE — État d'avancement

### 1. Page d'installation ✅
- Wizard 4 étapes (Alpine.js)
- Pré-remplissage URL automatique depuis `window.location.origin`
- Test SSH (fetch POST /api/install/test-ssh)
- Configuration Proxmox API (token unique format `user@realm!tokenid=secret`)
- **Manque** : pré-remplissage du port depuis la requête entrante

### 2. Gestion des comptes utilisateurs ✅
- Création automatique au premier login (PAM SSH → upsert SQLite)
- JWT access (15min) + refresh cookie httpOnly (7j)
- Deux niveaux : Admin (groupe sudo/wheel) et Utilisateur
- **Manque** : page profil utilisateur, préférences per-user en DB

### 3. Détection LXC/VM ✅
- API Proxmox REST (client Go, InsecureSkipVerify)
- WS `/ws/proxmox` — polling 10s, type `resources_update`, payload `[...]`
- Affichage en temps réel dans les pages Dashboard et Proxmox
- **Fix appliqué** : données immédiates via HTTP + WS pour live updates

### 4. Dashboard ⚠️ Partiel
- Compteurs LXC running/stopped ✅
- Liste LXC avec CPU/RAM ✅
- WebSocket live ✅
- **Manque** : widgets configurables (add/remove/drag-drop) ← requis par instruction.md
- **Manque** : raccourcis vers services (Grafana, Proxmox, Traefik…)
- **Manque** : personnalisation per-user sauvegardée en DB

### 5. Thème Neumorphism ✅
- neu.css (dark/light mode via CSS custom properties) ✅
- Toggle dark/light dans la navbar ✅
- Sidebar repliable ✅
- Responsive (media queries) ✅
- **Manque** : sidebar gauche/droite per-user ← requis par instruction.md
- **Manque** : LineIcons Duotone (actuellement Unicode symbols) ← requis par instruction.md

### 6. Gestion des langues ✅
- fr.json / en.json via Alpine store i18n ✅
- Sélecteur dans la navbar ✅
- Sauvegarde dans localStorage ✅
- **Manque** : sauvegarde per-user en DB

### 7. Mises à jour paquets ✅
- Liste par cible (host + LXC) ✅
- `apt update + apt full-upgrade -y` via SSH ✅
- Streaming WS live (type `update_output` / `update_done` / `update_error`) ✅
- **Fix appliqué** : `msg.payload` (pas `msg.data`)
- **Manque** : historique des mises à jour

### 8. Système de paramètres ✅
- Onglets Général / SSH / Proxmox API ✅
- `PUT /api/settings/{key}` per-key ✅
- Secrets chiffrés AES-256-GCM en DB ✅
- **Manque** : onglet Apparence (sidebar position, thème par défaut)
- **Manque** : onglet Langues disponibles

### 9. Mises à jour CORE/modules ❌ Non implémenté
- Vérification nouvelles versions Forgejo
- Affichage changelog
- Détection migrations post-update

### 10. Store de modules ⚠️ Partiel
- Liste des modules (CORE + optionnels stubs) ✅
- Toggle enable/disable ✅
- **Manque** : installation/désinstallation de modules externes
- **Manque** : registre officiel + registres supplémentaires

### 11. Page post-installation/migration ❌ Non implémenté
- Blocage total de l'accès si migration en attente

---

## Bugs résolus dans cette session

| Bug | Fix |
|-----|-----|
| CSS cassé au changement de page via Swup | Extraction de tous les styles inline en `css/pages.css` global |
| Dashboard/Proxmox WS bloqué à "⌛ Connexion…" | Type WS était `proxmox_resources` → corrigé en `resources_update` |
| WS lit `msg.data` au lieu de `msg.payload` | Corrigé pour dashboard, proxmox, updates |
| Délai 10s avant 1er affichage données | Ajout fetch HTTP immédiat + WS pour updates live |
| `access_token` null au login | Corrigé en session précédente |
| CSS variables incorrectes (`--bg-primary`) | Corrigé en session précédente |

---

## Non-conformités instruction.md à corriger

| Règle | État | Priorité |
|-------|------|----------|
| Icônes LineIcons Duotone uniquement | ✅ Intégrés (css/ + toutes les pages) | Haute |
| Dashboard widgets add/remove/drag-drop | ✅ Widget system + DnD natif HTML5 | Haute |
| Sidebar gauche/droite per-user | ✅ `data-sidebar` CSS + profilePage | Moyenne |
| Page profil préférences (thème/sidebar/langue) | ✅ profile.html créée | Moyenne |
| Préférences utilisateur en DB | ❌ localStorage uniquement | Basse |
| Historique mises à jour | ❌ Non affiché | Basse |
| Mises à jour CORE/modules depuis interface | ❌ Non implémenté | Basse |
| Page blocage migration | ❌ Non implémenté | Basse |

---

## Architecture Docker

```
core/
├── backend/        (Go — port 3001 interne)
├── frontend/       (Alpine.js — build → Nginx)
│   ├── js/app.js   (stores + composants Alpine)
│   ├── css/neu.css (neumorphism + layout)
│   ├── css/pages.css (styles spécifiques pages)
│   └── *.html      (pages statiques)
└── docker-compose.yml
```

## Commandes utiles

```bash
# Build frontend (sur LXC ou machine dev)
cd core/frontend && npm run build

# Déploiement sur LXC 112
docker compose pull && docker compose up -d --build

# Logs
docker compose logs -f backend
docker compose logs -f frontend
```
