diff --git a/ROADMAP.es.md b/ROADMAP.es.md
new file mode 100644
index 00000000..833aa6c3
--- /dev/null
+++ b/ROADMAP.es.md
@@ -0,0 +1,266 @@
+#
ProxMenux — Roadmap
+
+> Última actualización: **2026-05-20** · Versión actual: **1.2.1.2-beta**
+> 🇬🇧 English version: [ROADMAP.md](ROADMAP.md)
+
+Este documento es nuestra hoja de ruta para llevar ProxMenux y
+ProxMenux Monitor a un estado **listo para producción**. Está basado
+en las dos infografías que un colaborador preparó y enriquecido con
+una auditoría real del código actual.
+
+## 🖼️ Infografías de origen
+
+Las dos infografías que sirvieron de punto de partida son obra de la
+comunidad y resumen visualmente las dos grandes áreas de trabajo:
+
+| ProxMenux Monitor (Dashboard) | ProxMenux (Scripts) |
+|---|---|
+|
|
|
+| *Mejoras recomendadas para hacerlo más seguro, útil y apto para producción* | *Mejoras recomendadas para hacerlo más seguro, auditable y apto para producción* |
+
+**Cómo lo usamos:**
+
+* La tabla **Estado actual** refleja lo que YA tenemos hoy.
+* El **Plan por versión** marca qué entra en cada release.
+* La sección **Cambios publicados** se va rellenando a medida que
+ cerramos items, con la versión en la que se entregó.
+
+Símbolos:
+
+* 🟢 — Hecho y en producción
+* 🟡 — Parcial (existe la base, falta UI o feature completa)
+* 🔴 — Pendiente
+
+---
+
+## 🎯 Visión
+
+> *"La prioridad no es añadir más métricas ni más scripts, sino mejorar
+> seguridad, alertas, permisos, auditabilidad e integración real con
+> Proxmox."*
+
+ProxMenux ya es una herramienta potente para administradores que
+gestionan su propio nodo. El siguiente salto es convertirlo en una
+herramienta **apta para entornos de producción y para clientes**:
+
+* El operador tiene que poder dar **acceso de solo lectura** a
+ terceros sin miedo a que toquen nada.
+* Tiene que existir un **historial auditable** de qué pasó y quién
+ lo hizo.
+* Los cambios destructivos tienen que poder **previsualizarse y
+ revertirse**.
+* La instalación tiene que poder operarse en **modo conservador**
+ cuando el nodo no es un laboratorio.
+
+---
+
+## 📊 Estado actual
+
+### ProxMenux Monitor (Dashboard)
+
+#### 1️⃣ Modo solo lectura
+| Item | Estado | Notas |
+|---|---|---|
+| Separar monitorizar de controlar | 🔴 | El dashboard mezcla ambos hoy |
+| Dashboard 100 % read-only | 🟡 | El scope `read_only` existe en los API tokens, falta exponerlo al usuario web |
+| Sin acciones de start/stop por defecto | 🔴 | Requiere lo anterior |
+| Ideal para clientes y producción | 🔴 | Llega cuando el modo solo lectura esté completo |
+
+#### 2️⃣ Permisos y tokens
+| Item | Estado | Notas |
+|---|---|---|
+| Roles viewer / operator / admin | 🔴 | Single-user hoy |
+| Tokens con scopes | 🟡 | 2 scopes (`read_only`, `full_admin`), no granulares |
+| Caducidad configurable | 🟡 | Hoy fija en 365 días |
+| Tokens de solo lectura para NA / homepage | 🟢 | Cubierto por `scope=read_only` |
+
+#### 3️⃣ Seguridad web
+| Item | Estado | Notas |
+|---|---|---|
+| Bind a localhost o LAN | 🔴 | El backend escucha en `0.0.0.0:8008` |
+| HTTPS y proxy inverso guiado | 🟢 | Documentado, ACME + self-signed CA trust |
+| Allowlist IP opcional | 🔴 | No existe |
+| Rate limits y bloqueo anti-fuerza bruta | 🟡 | Hay cooldown en login; no es un panel configurable. Fail2Ban es opcional |
+
+#### 4️⃣ Logs y auditoría
+| Item | Estado | Notas |
+|---|---|---|
+| Registrar login, logout e intentos fallidos | 🟡 | Se notifica `auth_fail`; no hay panel histórico |
+| Guardar IP, usuario y token usado | 🟡 | Llega a notificación, no se persiste para auditar |
+| Auditar accesos sobre VM/LXC | 🔴 | Las acciones de control no se registran |
+| Historial claro con resultado y error | 🔴 | No hay pestaña "Audit" |
+
+#### 5️⃣ Alertas útiles
+| Item | Estado | Notas |
+|---|---|---|
+| CPU, RAM, disco y temperatura altos | 🟢 | Health Monitor + thresholds configurables |
+| Snapshot / backup confirmado | 🟢 | Eventos `vzdump_complete` |
+| SMART warnings y predicción | 🟢 | `disk_failure_predicted` + tiers de `disk_io_error` (1.2.1.2) |
+| Telegram, Gotify, ntfy, email, webhook | 🟢 | 7 canales activos |
+
+#### 6️⃣ PBS y cluster
+| Item | Estado | Notas |
+|---|---|---|
+| Último backup por VM/LXC | 🟢 | Visible en el modal de cada VM/CT |
+| VMs sin backup y jobs fallidos | 🟡 | `vzdump_failed` se notifica; falta una vista agregada |
+| Quorum, nodos, estado global | 🟢 | Health tab + eventos de cluster |
+| Dashboard de salud del entorno | 🟢 | Health tab |
+
+---
+
+### ProxMenux (Scripts y Post-install)
+
+#### 1️⃣ Seguridad operativa
+| Item | Estado | Notas |
+|---|---|---|
+| Dry-run / previsualización antes de aplicar | 🔴 | No existe como flag general |
+| Avisos delante de cambios críticos | 🟡 | Algunos diálogos, no uniforme |
+| Verificación posterior de la acción | 🟡 | `update_component_status` registra el resultado |
+| Confirmación reforzada en tareas sensibles | 🟡 | Hay `whiptail --yesno` en algunos scripts; no es regla |
+
+#### 2️⃣ Rollback y recuperación
+| Item | Estado | Notas |
+|---|---|---|
+| Restaurar última configuración válida | 🟢 | Sistema `backup_restore/` completo (host backup + `apply_pending_restore`) |
+| Menú de recuperación antes de fallos | 🟡 | Existe el restore manual, falta un wizard preventivo |
+| Revertir red / postinstall / grupos | 🟡 | El backup snapshotea, no hay rollback granular por subsistema |
+| Empaquetado para diagnóstico (`bug-report`) | 🔴 | No existe el bundle |
+
+#### 3️⃣ Scripts externos
+| Item | Estado | Notas |
+|---|---|---|
+| Listas, hashes y firma | 🔴 | Se ejecutan sin verificación |
+| Fijar versión / commit / hash | 🔴 | Helper-scripts traídos en vivo del upstream |
+| Etiquetar nivel de riesgo | 🟡 | El menú nuevo añadió "richer context"; falta etiqueta formal |
+| Mostrar script antes de ejecutarlo | 🔴 | Sin paso de preview |
+
+#### 4️⃣ Logs y trazabilidad
+| Item | Estado | Notas |
+|---|---|---|
+| Registrar acción, usuario y fecha | 🟡 | Logs en `/var/log/proxmenux/`, no estructurados |
+| Guardar comandos y archivos modificados | 🔴 | No hay tracking de qué tocó cada script |
+| Errores claros con código de salida | 🟡 | Algunos scripts sí; no es regla |
+| Historial de cambios reciente | 🔴 | No hay UI "qué hizo ProxMenux en este host" |
+
+#### 5️⃣ Modo producción
+| Item | Estado | Notas |
+|---|---|---|
+| Perfil conservador para todo el nodo | 🔴 | El concepto no existe |
+| Bloquear acciones destructivas por defecto | 🔴 | Tampoco |
+| Limitar cambios de red sin confirmación | 🟡 | Algunos scripts piden confirmación |
+| Más validaciones y avisos | 🟡 | Mejoras incrementales, no como modo |
+
+#### 6️⃣ Entornos reales
+| Item | Estado | Notas |
+|---|---|---|
+| Salida tipo "esto pasó" clara y multilingüe | 🟡 | `translate()` + `msg_*` funcionan; falta resumen final |
+| Visibilidad de quorum / almacenamiento | 🟢 | En el Monitor |
+| Postinstall Proxmox Backup Server | 🟢 | Script PBS ya está |
+| Detector de fallos rápido para escenarios | 🟡 | Health Monitor; falta "preflight" antes de cada cambio |
+
+---
+
+## 🗺️ Plan por versión
+
+> Los items se agrupan por relación **valor / esfuerzo**, no por
+> orden estricto. El plan se puede reordenar según feedback de
+> testers del grupo.
+
+### v1.2.2-beta — *Lo barato y de alto impacto*
+
+Objetivo: cerrar los huecos que ya tienen base en el código y dan
+mejora visible de seguridad sin tocar arquitectura.
+
+* [ ] **Modo solo lectura del usuario web.** Bindeo del scope
+ `read_only` ya existente del JWT a la sesión interactiva. La
+ UI esconde los botones de acción (start/stop, ejecutar
+ scripts, terminal) cuando el scope no es `full_admin`.
+* [ ] **Tabla de audit log + pestaña en el dashboard.** Nueva tabla
+ SQLite `audit_log(ts, user, ip, action, target, result, error)`.
+ Hookear desde `flask_security_routes` y `flask_script_runner`.
+ Render simple en una pestaña "Audit".
+* [ ] **Allowlist IP.** Campo nuevo en `Settings → Security →
+ "Limitar acceso a estas IPs"`. Decorator `@require_allowed_ip`
+ aplicado a todas las blueprints.
+* [ ] **Caducidad configurable de tokens API.** Campo `expires_at`
+ en la metadata del token; honrarlo en `verify_token`.
+
+### v1.2.3-beta — *Lo medio*
+
+Objetivo: dar herramientas serias de operación antes de aplicar
+cambios.
+
+* [ ] **Tokens con scope granular.** Mínimo cuatro: `read_only`,
+ `vm_control`, `script_runner`, `full_admin`. El frontend
+ enseña qué scopes tiene el token actual.
+* [ ] **Dry-run en scripts post-install.** Flag `--dry-run`
+ compatible con todos los scripts de `scripts/post_install/`.
+ La salida muestra exactamente qué cambiaría sin tocar el host.
+* [ ] **Bundle de diagnóstico (`proxmenux bug-report`).** Comprime
+ `/var/log/proxmenux/`, `journalctl -u proxmenux-monitor`,
+ `dmesg --since=24h`, `dpkg -l | grep -i proxmenux`,
+ `managed_installs.json` y los `errors`/`disk_observations` de
+ la base de datos en un único `.tar.gz`. Output ofuscado de
+ tokens y secrets.
+* [ ] **Vista agregada "VMs sin backup".** Una nueva tarjeta en el
+ tab de Backups que liste todas las VM/CT sin job de backup
+ reciente, con accesos directos al PBS.
+
+### v1.3.0 — *Lo grande*
+
+Objetivo: el salto a producción. Requiere release mayor por cambios
+de modelo de datos y de UX.
+
+* [ ] **RBAC con roles viewer / operator / admin.** Multi-usuario,
+ contraseña por usuario, role por sesión. Migración de
+ `auth.json` a tabla `users(id, username, password_hash, role,
+ created_at, last_login)`. Revisión de todas las blueprints para
+ mapear endpoints → role mínimo.
+* [ ] **Modo producción.** Flag global en `/etc/proxmenux/profile`
+ que conmuta:
+ * Confirmaciones reforzadas
+ * Anti-cascade más agresivo
+ * Acciones destructivas ocultas o deshabilitadas
+ * Allowlist IP forzada a no-vacía
+ * Tokens `full_admin` deshabilitados en favor de `vm_control` + ack
+* [ ] **Rollback granular por subsistema.** Sobre la infraestructura
+ `backup_restore` existente, permitir revertir solo "Red", solo
+ "Post-install", solo "Grupos y permisos", etc.
+* [ ] **Historial de cambios visible en el Monitor.** Pestaña
+ "Changes" que liste cada modificación que ProxMenux hizo sobre
+ el host (archivo, antes / después, script responsable).
+
+### Probablemente fuera de scope
+
+* **Firma criptográfica de scripts upstream.** Depende del
+ comportamiento de community-scripts (no controlamos su pipeline).
+ Mantener un mirror firmado propio sería mucho trabajo para poco
+ beneficio. Cerrado salvo decisión externa.
+
+---
+
+## 📦 Cambios publicados
+
+> Esta sección se actualiza con cada release. Sin tocar el plan de
+> arriba: aquí se anota qué pasó de pendiente (🔴 / 🟡) a hecho (🟢)
+> y en qué versión.
+
+| Fecha | Versión | Item | Notas |
+|---|---|---|---|
+| — | — | — | Aún no hay items cerrados de este roadmap |
+
+---
+
+## 💬 Cómo aportar
+
+Cualquier persona del grupo puede:
+
+* Comentar en el item que considere prioritario o que falte.
+* Proponer un nuevo item con el formato de la tabla
+ (categoría + descripción + por qué importa).
+* Sugerir mover items entre versiones si el orden no encaja con
+ su uso real.
+
+El roadmap es vivo y se reordena. La única regla es: **los items
+solo cambian de estado 🔴/🟡 → 🟢 cuando hay código que los respalda
+en una release publicada**.
diff --git a/ROADMAP.md b/ROADMAP.md
new file mode 100644
index 00000000..f2fa4763
--- /dev/null
+++ b/ROADMAP.md
@@ -0,0 +1,263 @@
+#
ProxMenux — Roadmap
+
+> Last update: **2026-05-20** · Current version: **1.2.1.2-beta**
+> 🇪🇸 Versión en español: [ROADMAP.es.md](ROADMAP.es.md)
+
+This document is our roadmap to bring ProxMenux and ProxMenux Monitor
+to a **production-ready** state. It is based on the two infographics
+a community member prepared, enriched with a real audit of the
+current codebase.
+
+## 🖼️ Source infographics
+
+The two infographics that seeded this roadmap are a community
+contribution and summarise the two main areas of work visually:
+
+| ProxMenux Monitor (Dashboard) | ProxMenux (Scripts) |
+|---|---|
+|
|
|
+| *Recommended improvements to make it safer, more useful, and production-ready* | *Recommended improvements to make it safer, auditable, and production-ready* |
+
+**How we use this document:**
+
+* The **Current state** table reflects what we already have today.
+* The **Plan by version** marks what goes into each release.
+* The **Shipped changes** section gets filled in as we close items,
+ with the version they shipped in.
+
+Symbols:
+
+* 🟢 — Done and in production
+* 🟡 — Partial (foundation exists, UI or full feature missing)
+* 🔴 — Pending
+
+---
+
+## 🎯 Vision
+
+> *"The priority is not to add more metrics or more scripts, but to
+> improve security, alerting, permissions, auditability and real
+> integration with Proxmox."*
+
+ProxMenux is already a powerful tool for sysadmins running their own
+node. The next leap is making it a tool **fit for production
+environments and customers**:
+
+* The operator must be able to give **read-only access** to third
+ parties without worrying that they will touch anything.
+* There must be an **auditable history** of what happened and who
+ did it.
+* Destructive changes must be **previewable and revertible**.
+* The install must be operable in **conservative mode** when the
+ node is not a lab.
+
+---
+
+## 📊 Current state
+
+### ProxMenux Monitor (Dashboard)
+
+#### 1️⃣ Read-only mode
+| Item | Status | Notes |
+|---|---|---|
+| Separate monitoring from control | 🔴 | The dashboard mixes both today |
+| 100 % read-only dashboard | 🟡 | The `read_only` scope exists for API tokens, but isn't exposed to the web user |
+| No start/stop actions by default | 🔴 | Depends on the above |
+| Ideal for clients and production | 🔴 | Lands when read-only mode is complete |
+
+#### 2️⃣ Permissions and tokens
+| Item | Status | Notes |
+|---|---|---|
+| viewer / operator / admin roles | 🔴 | Single-user today |
+| Tokens with scopes | 🟡 | 2 scopes (`read_only`, `full_admin`), not granular |
+| Configurable expiry | 🟡 | Currently fixed at 365 days |
+| Read-only tokens for NA / homepage | 🟢 | Covered by `scope=read_only` |
+
+#### 3️⃣ Web security
+| Item | Status | Notes |
+|---|---|---|
+| Bind to localhost or LAN | 🔴 | Backend listens on `0.0.0.0:8008` |
+| HTTPS and guided reverse proxy | 🟢 | Documented, ACME + self-signed CA trust |
+| Optional IP allowlist | 🔴 | Does not exist |
+| Rate limits and brute-force blocking | 🟡 | Login cooldown exists; not a configurable panel. Fail2Ban is optional |
+
+#### 4️⃣ Logs and auditing
+| Item | Status | Notes |
+|---|---|---|
+| Log login, logout and failed attempts | 🟡 | `auth_fail` is notified; no historical panel |
+| Save IP, user and token used | 🟡 | Reaches the notification, not persisted for audit |
+| Audit access to VM/LXC | 🔴 | Control actions are not recorded |
+| Clear history with result and error | 🔴 | No "Audit" tab |
+
+#### 5️⃣ Useful alerts
+| Item | Status | Notes |
+|---|---|---|
+| High CPU, RAM, disk and temperature | 🟢 | Health Monitor + configurable thresholds |
+| Snapshot / backup confirmed | 🟢 | `vzdump_complete` events |
+| SMART warnings and prediction | 🟢 | `disk_failure_predicted` + `disk_io_error` tiers (1.2.1.2) |
+| Telegram, Gotify, ntfy, email, webhook | 🟢 | 7 active channels |
+
+#### 6️⃣ PBS and cluster
+| Item | Status | Notes |
+|---|---|---|
+| Last backup per VM/LXC | 🟢 | Visible in the VM/CT modal |
+| VMs with no backup and failed jobs | 🟡 | `vzdump_failed` is notified; aggregated view missing |
+| Quorum, nodes, global state | 🟢 | Health tab + cluster events |
+| Environment health dashboard | 🟢 | Health tab |
+
+---
+
+### ProxMenux (Scripts and post-install)
+
+#### 1️⃣ Operational safety
+| Item | Status | Notes |
+|---|---|---|
+| Dry-run / preview before applying | 🔴 | No general flag |
+| Warnings before critical changes | 🟡 | Some dialogs, not uniform |
+| Post-action verification | 🟡 | `update_component_status` records the result |
+| Reinforced confirmation on sensitive tasks | 🟡 | `whiptail --yesno` in some scripts; not a rule |
+
+#### 2️⃣ Rollback and recovery
+| Item | Status | Notes |
+|---|---|---|
+| Restore last valid configuration | 🟢 | Full `backup_restore/` system (host backup + `apply_pending_restore`) |
+| Recovery menu before failures | 🟡 | Manual restore exists, no preventive wizard |
+| Revert network / post-install / groups | 🟡 | Backup snapshots, no granular per-subsystem rollback |
+| Diagnostic bundle (`bug-report`) | 🔴 | No bundle |
+
+#### 3️⃣ External scripts
+| Item | Status | Notes |
+|---|---|---|
+| Lists, hashes and signature | 🔴 | Run without verification |
+| Pin version / commit / hash | 🔴 | Helper-scripts pulled live from upstream |
+| Risk-level label | 🟡 | New menu added "richer context"; no formal label |
+| Show script before running it | 🔴 | No preview step |
+
+#### 4️⃣ Logs and traceability
+| Item | Status | Notes |
+|---|---|---|
+| Log action, user and date | 🟡 | Logs in `/var/log/proxmenux/`, not structured |
+| Save commands and modified files | 🔴 | No tracking of what each script touched |
+| Clear errors with exit code | 🟡 | Some scripts do; not a rule |
+| Recent-changes history | 🔴 | No "what ProxMenux did on this host" UI |
+
+#### 5️⃣ Production mode
+| Item | Status | Notes |
+|---|---|---|
+| Conservative profile for the whole node | 🔴 | Concept does not exist |
+| Block destructive actions by default | 🔴 | Same |
+| Limit network changes without confirmation | 🟡 | Some scripts ask for confirmation |
+| More validations and warnings | 🟡 | Incremental improvements, not as a mode |
+
+#### 6️⃣ Real environments
+| Item | Status | Notes |
+|---|---|---|
+| Clear, multilingual "this happened" output | 🟡 | `translate()` + `msg_*` work; final summary missing |
+| Quorum / storage visibility | 🟢 | In the Monitor |
+| Proxmox Backup Server post-install | 🟢 | PBS script already in place |
+| Fast failure detector for scenarios | 🟡 | Health Monitor; no "preflight" before each change |
+
+---
+
+## 🗺️ Plan by version
+
+> Items are grouped by **value / effort** ratio, not strict order.
+> The plan can be reordered based on feedback from the group's
+> testers.
+
+### v1.2.2-beta — *Cheap and high-impact*
+
+Goal: close the gaps that already have a foundation in code and
+deliver visible security gains without touching architecture.
+
+* [ ] **Read-only mode for the web user.** Bind the existing JWT
+ `read_only` scope to the interactive session. The UI hides
+ action buttons (start/stop, run scripts, terminal) when the
+ scope is not `full_admin`.
+* [ ] **Audit log table + dashboard tab.** New SQLite table
+ `audit_log(ts, user, ip, action, target, result, error)`.
+ Hook into `flask_security_routes` and `flask_script_runner`.
+ Render as a simple "Audit" tab.
+* [ ] **IP allowlist.** New field in `Settings → Security →
+ "Limit access to these IPs"`. `@require_allowed_ip` decorator
+ applied to all blueprints.
+* [ ] **Configurable API-token expiry.** `expires_at` field on the
+ token metadata; honour it in `verify_token`.
+
+### v1.2.3-beta — *Medium effort*
+
+Goal: provide serious operational tools before applying changes.
+
+* [ ] **Granular token scopes.** Minimum four: `read_only`,
+ `vm_control`, `script_runner`, `full_admin`. The frontend
+ shows which scopes the current token has.
+* [ ] **Dry-run for post-install scripts.** `--dry-run` flag
+ supported across all `scripts/post_install/` scripts. Output
+ shows exactly what would change without touching the host.
+* [ ] **Diagnostic bundle (`proxmenux bug-report`).** Tar.gz of
+ `/var/log/proxmenux/`, `journalctl -u proxmenux-monitor`,
+ `dmesg --since=24h`, `dpkg -l | grep -i proxmenux`,
+ `managed_installs.json` and the `errors` / `disk_observations`
+ tables. Tokens and secrets obfuscated in the output.
+* [ ] **Aggregated "VMs with no backup" view.** New card in the
+ Backups tab listing every VM/CT without a recent backup job,
+ with direct shortcuts to PBS.
+
+### v1.3.0 — *Major scope*
+
+Goal: the leap to production. Requires a major release due to data
+model and UX changes.
+
+* [ ] **RBAC with viewer / operator / admin roles.** Multi-user,
+ per-user password, per-session role. Migration from
+ `auth.json` to a `users(id, username, password_hash, role,
+ created_at, last_login)` table. Review every blueprint to map
+ endpoints → minimum role.
+* [ ] **Production mode.** Global flag in `/etc/proxmenux/profile`
+ that toggles:
+ * Reinforced confirmations
+ * More aggressive anti-cascade
+ * Destructive actions hidden or disabled
+ * IP allowlist forced non-empty
+ * `full_admin` tokens disabled in favour of `vm_control` + ack
+* [ ] **Granular rollback per subsystem.** Building on the existing
+ `backup_restore` infra, allow reverting only "Network", only
+ "Post-install", only "Groups and permissions", etc.
+* [ ] **Change history visible in the Monitor.** "Changes" tab
+ listing every modification ProxMenux made on the host
+ (file, before / after, responsible script).
+
+### Probably out of scope
+
+* **Cryptographic signing of upstream scripts.** Depends on the
+ community-scripts pipeline (we don't control it). Maintaining our
+ own signed mirror would be high effort for limited benefit.
+ Closed unless an external decision changes it.
+
+---
+
+## 📦 Shipped changes
+
+> This section is updated with every release. Without touching the
+> plan above: here we note which items moved from pending (🔴 / 🟡)
+> to done (🟢) and in which version.
+
+| Date | Version | Item | Notes |
+|---|---|---|---|
+| — | — | — | No items closed yet from this roadmap |
+
+---
+
+## 💬 How to contribute
+
+Anyone in the group can:
+
+* Comment on the item they consider a priority or notice missing.
+* Propose a new item using the table format
+ (category + description + why it matters).
+* Suggest moving items between versions if the ordering doesn't
+ match their real use.
+
+The roadmap is alive and gets reordered. The only rule is:
+**items only change state 🔴/🟡 → 🟢 when there is code backing them
+in a published release**.