diff --git a/features/utxo-list-progressive-loading.md b/features/utxo-list-progressive-loading.md
new file mode 100644
index 0000000..7bbd3f5
--- /dev/null
+++ b/features/utxo-list-progressive-loading.md
@@ -0,0 +1,60 @@
+# Chargement progressif de la liste UTXO depuis le fichier
+
+**Auteur** : Équipe 4NK
+**Date** : 2026-01-26
+**Version** : 1.0
+
+## Objectif
+
+Raccourcir le chargement de la page [Liste des UTXO](https://dashboard.certificator.4nkweb.com/utxo-list) en utilisant directement le fichier `utxo_list.txt` au lieu de `/api/utxo/list`, et afficher une barre de progression pendant le chargement.
+
+## Problème initial
+
+- La page UTXO-list est très longue à charger.
+- Elle appelait `/api/utxo/list`, qui utilise `getUtxoList()` (RPC + fichier) et peut être lent ou bloquer le serveur.
+- Le fichier `utxo_list.txt` peut être en retard par rapport au nœud, mais il est servi rapidement.
+- Aucun retour visuel pendant le chargement.
+
+## Impacts
+
+- **Page UTXO-list** : Charge désormais depuis `/api/utxo/list.txt` (fichier uniquement).
+- **Serveur** : `/api/utxo/list.txt` envoie `Content-Length` et `Last-Modified` pour la progression et l’affichage de la date de mise à jour.
+- **Utilisateurs** : Barre de progression pendant le chargement ; indication que la source est le fichier (potentiellement pas à jour).
+
+## Modifications
+
+### Serveur (`signet-dashboard/src/server.js`)
+
+- Route `/api/utxo/list.txt` : ajout de `Content-Length` et `Last-Modified` (via `statSync`).
+
+### Page UTXO-list (`signet-dashboard/public/utxo-list.html`)
+
+- **Source des données** : `loadUtxoList()` lit `/api/utxo/list.txt` au lieu de `/api/utxo/list`.
+- **Streaming** : utilisation de `response.body.getReader()` + `TextDecoder` pour traiter le flux par morceaux.
+- **Parsing** : `parseUtxoLine()` parse le format fichier (`category;txid;vout;amount;confirmations;isAnchorChange;blockTime`) et produit des objets UTXO compatibles avec `renderTable` / `renderFeesTable`.
+- **Barre de progression** :
+ - Section dédiée avec barre (pourcentage) et texte « X ligne(s) parsée(s) ».
+ - Progression = `bytes reçus / Content-Length` ; si pas de `Content-Length`, 0 % puis 100 % à la fin.
+- **Source fichier** : mention « Source : fichier utxo_list.txt (peut ne pas être à jour) » et, si disponible, « Dernière modif. : … » (depuis `Last-Modified`).
+- **Statut** : pour les UTXO chargés depuis le fichier (`fromFile: true`), la colonne Statut affiche « — » (pas d’info dépensé/verrouillé disponible).
+
+### Compatibilité
+
+- Format 7 champs (nouveau) et 6 champs (ancien avec `address`) gérés par `parseUtxoLine`.
+- `actualiser` recharge depuis le fichier (même flux que le chargement initial).
+
+## Modalités de déploiement
+
+1. Redémarrer le dashboard : `sudo systemctl restart signet-dashboard.service`.
+2. Vider le cache navigateur si nécessaire puis recharger `/utxo-list`.
+
+## Modalités d’analyse
+
+- Ouvrir les DevTools (Network) : vérifier que la requête va vers `/api/utxo/list.txt` et que les headers `Content-Length` et `Last-Modified` sont présents.
+- Vérifier que la barre de progression s’affiche puis disparaît une fois le chargement terminé.
+- Vérifier que les quatre tableaux (Bloc Rewards, Ancrages, Changes, Frais) et la pagination s’affichent correctement.
+
+## Pages affectées
+
+- `signet-dashboard/src/server.js` : route `/api/utxo/list.txt`
+- `signet-dashboard/public/utxo-list.html` : `loadUtxoList`, `parseUtxoLine`, rendu progression, statut `fromFile`
diff --git a/signet-dashboard/public/utxo-list.html b/signet-dashboard/public/utxo-list.html
index 148ee1d..1180c6d 100644
--- a/signet-dashboard/public/utxo-list.html
+++ b/signet-dashboard/public/utxo-list.html
@@ -123,6 +123,42 @@
font-size: 1.2em;
color: #666;
}
+ .progress-section {
+ padding: 30px;
+ text-align: center;
+ background: #f8f9fa;
+ border-radius: 8px;
+ margin: 20px 0;
+ }
+ .progress-section p {
+ margin: 10px 0;
+ color: #333;
+ }
+ .progress-bar-container {
+ width: 100%;
+ max-width: 400px;
+ height: 24px;
+ background: #e9ecef;
+ border-radius: 12px;
+ overflow: hidden;
+ margin: 15px auto;
+ }
+ .progress-bar-fill {
+ height: 100%;
+ background: linear-gradient(90deg, #28a745, #20c997);
+ transition: width 0.15s ease;
+ }
+ .progress-stats {
+ font-size: 0.9em;
+ color: #666;
+ margin-top: 10px;
+ }
+ .source-note {
+ font-size: 0.9em;
+ color: #666;
+ margin-top: 10px;
+ font-style: italic;
+ }
.error {
background: #f8d7da;
color: #721c24;
@@ -263,7 +299,7 @@