diff --git a/README.md b/README.md
index cf05cc2..c4acec8 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,7 @@
- ⏳ **Vieillissement + limites WIP** — badge d'ancienneté par colonne et limites souples configurables
- 🎯 **Vue Focus** — tout ce qui est En cours / en QA / En révision, tous projets confondus (`/focus`)
- 🖥️ **Wallboard** — mode TV plein écran (`/wall`) : rotation automatique entre les projets actifs, cartes en vol et compteurs en très grands caractères, rafraîchi en direct ; `?repo=Proprietaire/depot` fige un seul projet
+- ⚡ **Capture éclair** — page `/capture` (formulaire), endpoint `POST /api/capture` protégé par un jeton dédié, et écoute ntfy : un message publié sur le topic de capture devient une issue dans le dépôt par défaut
- 🔀 **Réconciliation par étiquettes** — si l'étiquette `kanban:*` d'une issue change hors de Kanbante (dans Gitea, par un autre outil), le board adopte la colonne de l'étiquette au chargement et le journalise (source `gitea`). Une seule étiquette `kanban:*` fait foi ; aucune ou plusieurs = l'état local gagne
- 🔍 **Recherche globale + Mes issues** — chercher dans toutes les issues de tous les projets (`/search`), et voir ce qui vous est assigné (`/my`)
- 📊 **Briefing quotidien** — encours, vieillissement, milestones proches : page `/briefing` et envoi **ntfy** planifié
@@ -112,6 +113,9 @@ sudo systemctl enable --now docker
| `KANBANTE_NTFY_TOPIC` | *(vide)* | Topic ntfy du briefing (URL + topic requis pour activer l'envoi) |
| `KANBANTE_NTFY_TOKEN` | *(vide)* | Jeton Bearer optionnel pour un topic protégé |
| `KANBANTE_BRIEFING_TIME` | *(vide)* | Heure d'envoi quotidien du briefing, `HH:MM` heure du serveur ; vide = pas d'envoi automatique |
+| `KANBANTE_CAPTURE_REPO` | *(vide)* | Dépôt par défaut de la capture éclair (`Proprietaire/depot`) |
+| `KANBANTE_CAPTURE_TOKEN` | *(vide)* | Jeton dédié de `POST /api/capture` ; vide = endpoint désactivé (503) |
+| `KANBANTE_CAPTURE_NTFY_TOPIC` | *(vide)* | Topic ntfy écouté : chaque message devient une issue dans `KANBANTE_CAPTURE_REPO` |
## Sécurité
@@ -155,6 +159,8 @@ kanbante/
| GET | `/board/{owner}/{repo}` | Kanban board |
| GET | `/focus` | En cours + QA + En révision, tous projets actifs |
| GET | `/wall` | Wallboard plein écran (rotation des projets actifs ; `?repo=` pour un seul projet) |
+| GET | `/capture` | Page de capture éclair (formulaire + statut + instructions) |
+| POST | `/api/capture` | Capture machine-à-machine (jeton `X-Capture-Token`, JSON ou texte : 1re ligne = titre) |
| GET | `/activity` | Fil d'activité (journal d'événements, tous projets) |
| POST | `/api/move` | Déplacer une issue (ordre persisté, synchro Gitea) |
| POST | `/api/issues` | Créer une issue Gitea depuis le board |
diff --git a/app/templates/activity.html b/app/templates/activity.html
index 09337b9..c212e68 100644
--- a/app/templates/activity.html
+++ b/app/templates/activity.html
@@ -20,6 +20,7 @@
📰 Activité
📊 Briefing
🔍 Recherche
+ ⚡ Capture
🖥️ Wallboard
diff --git a/app/templates/board.html b/app/templates/board.html
index 1a20cbc..9836b7b 100644
--- a/app/templates/board.html
+++ b/app/templates/board.html
@@ -23,6 +23,7 @@
👤 Mes issues
📰 Activité
🔍 Recherche
+ ⚡ Capture
🖥️ Wallboard
{% if repo_info.html_url %}
🔗 Gitea ↗
diff --git a/app/templates/briefing.html b/app/templates/briefing.html
index f290eb3..fcb491b 100644
--- a/app/templates/briefing.html
+++ b/app/templates/briefing.html
@@ -20,6 +20,7 @@
👤 Mes issues
📰 Activité
🔍 Recherche
+ ⚡ Capture
🖥️ Wallboard
diff --git a/app/templates/capture.html b/app/templates/capture.html
new file mode 100644
index 0000000..621eb14
--- /dev/null
+++ b/app/templates/capture.html
@@ -0,0 +1,100 @@
+
+
+
+
+
+ ⚡ Capture éclair
+ Une idée, un bogue, une pensée — capturés en deux secondes, ils deviennent une issue dans le bon backlog.
+
+
+ {% if created %}
+
+
✅ Capturé !
+
Issue #{{ created.number }} créée dans
+ {{ created.repo_full_name }} (colonne {{ created.column }}) :
+ {% if created.html_url %}{{ created.title }}{% else %}{{ created.title }}{% endif %}
+ · ouvrir le board
+
+ {% endif %}
+ {% if error %}
+
+
❌ Capture impossible
+
{{ error }}
+
+ {% endif %}
+
+
+
✍️ Saisie rapide
+
+
+
+
+
🔌 Depuis un script ou un raccourci
+ {% if api_enabled %}
+
L'endpoint POST /api/capture est actif (jeton de capture configuré). Exemples :
+
curl -X POST https://votre-kanbante/api/capture \
+ -H "X-Capture-Token: VOTRE_JETON" \
+ -H "Content-Type: application/json" \
+ -d '{"text": "Idée : trier les cartes par échéance\n\nDétails ici…"}'
+
Texte libre accepté aussi (Content-Type: text/plain) : la première ligne devient le titre. Le dépôt vient de KANBANTE_CAPTURE_REPO ou du champ repo.
+ {% else %}
+
L'endpoint POST /api/capture est inactif : définis KANBANTE_CAPTURE_TOKEN (un jeton dédié, distinct de celui de Gitea) puis redémarre Kanbante.
+ {% endif %}
+
+
+
+
📱 Depuis le téléphone (ntfy)
+ {% if ntfy_topic %}
+
Écoute active sur le topic {{ ntfy_topic }} : chaque message publié devient une issue dans {{ capture_repo or "— (KANBANTE_CAPTURE_REPO manquant)" }}. La première ligne fait le titre. Publie depuis l'application ntfy ou :
+
curl -d "Idée : relire le rapport\n\nDétails…" {{ ntfy_url }}/{{ ntfy_topic }}
+
Les messages portant le tag kanbante sont ignorés (jamais d'auto-ingestion).
+ {% else %}
+
Inactif : définis KANBANTE_CAPTURE_NTFY_TOPIC (et KANBANTE_CAPTURE_REPO) puis redémarre Kanbante. Chaque message publié sur ce topic deviendra une issue — capture depuis l'application ntfy en deux touchers.
+ {% endif %}
+
+
+