diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..f8f1367
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,65 @@
+---
+name: Bug report
+about: Something is broken or behaving unexpectedly
+title: '[BUG] '
+labels: bug
+assignees: ''
+---
+
+## What happened?
+
+
+
+## Steps to reproduce
+
+1.
+2.
+3.
+
+## Expected behavior
+
+
+
+## Actual behavior
+
+
+
+## Screenshots / videos
+
+
+
+## Environment
+
+- **ContainerFlow version**:
+- **OS**:
+- **Docker version**:
+- **Docker Compose version**:
+- **Browser**:
+- **Mode**:
+
+## Container logs
+
+
+ContainerFlow logs (click to expand)
+
+```
+
+
+```
+
+
+
+## Browser console (if it's a UI bug)
+
+
+Errors from DevTools → Console
+
+```
+
+```
+
+
+
+## Additional context
+
+
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..408d96a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Security vulnerability
+ url: https://github.com/RGJorge/containerflow/blob/main/SECURITY.md
+ about: Report security issues privately, NOT as a public issue
+ - name: Commercial / partnership inquiries
+ url: mailto:alteonx.servicios@gmail.com
+ about: Commercial support, custom features, or AGPL-3.0 alternatives
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..dda1aee
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,43 @@
+---
+name: Feature request
+about: Suggest a new feature or improvement
+title: '[FEATURE] '
+labels: enhancement
+assignees: ''
+---
+
+## Problem you're trying to solve
+
+
+
+## Proposed solution
+
+
+
+## Why existing features don't cover this
+
+
+
+## Mockup / example
+
+
+
+## Alternatives considered
+
+
+
+## Priority / urgency for you
+
+- [ ] Critical — blocking my workflow
+- [ ] High — would significantly improve my workflow
+- [ ] Medium — nice to have
+- [ ] Low — just an idea
+
+## Are you willing to wait?
+
+ContainerFlow is currently maintainer-driven (no external PRs accepted yet). Features will land based on roadmap priority. See [monitoreo.md](../../monitoreo.md) for what's planned.
+
+- [ ] Yes, I'll wait — I just want to flag this
+- [ ] I'd contribute a PR if/when PRs open
+- [ ] I need this fast — happy to discuss sponsorship/commercial support
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..767233f
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,67 @@
+# Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and maintainers pledge to make participation in the ContainerFlow project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by mistakes
+- Focusing on what is best for the overall community
+
+Examples of unacceptable behavior:
+
+- Sexualized language or imagery, sexual attention or advances of any kind
+- Trolling, insulting, or derogatory comments and personal/political attacks
+- Public or private harassment
+- Publishing others' private information (physical or email address) without permission
+- Other conduct which could reasonably be considered inappropriate
+
+## Enforcement Responsibilities
+
+Project maintainers are responsible for clarifying and enforcing these standards. They will take appropriate and fair corrective action in response to any behavior they deem inappropriate, threatening, offensive, or harmful.
+
+Maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, issues, and other contributions that are not aligned with this Code of Conduct, and will communicate reasons when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces (issues, discussions, comments, pull requests, social media when representing the project) and also when an individual is officially representing the community in public spaces.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project team at:
+
+📧 **alteonx.servicios@gmail.com**
+
+All complaints will be reviewed and investigated promptly and fairly. The project team is obligated to respect the privacy and security of the reporter of any incident.
+
+## Enforcement Guidelines
+
+Maintainers will follow these Community Impact Guidelines:
+
+### 1. Correction
+**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome.
+**Consequence**: Private warning from maintainers, with clarification of the violation and why it was inappropriate. A public apology may be requested.
+
+### 2. Warning
+**Community Impact**: A violation through a single incident or series of actions.
+**Consequence**: Warning with consequences for continued behavior. No interaction with people involved for a specified period.
+
+### 3. Temporary Ban
+**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
+**Consequence**: Temporary ban from any sort of interaction or public communication with the community for a specified period.
+
+### 4. Permanent Ban
+**Community Impact**: Demonstrating a pattern of violation, harassment of an individual, or aggression toward or disparagement of classes of individuals.
+**Consequence**: Permanent ban from any sort of public interaction within the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..8db54ad
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,78 @@
+# Contributing to ContainerFlow
+
+Thanks for your interest in ContainerFlow! This document explains how to participate **right now**.
+
+## Current status: Issues only
+
+ContainerFlow is in early development (`v0.x`). Until the architecture stabilizes and there's an active community, **we're not accepting pull requests yet**.
+
+### What you can do today
+
+✅ **Open issues** — bug reports, feature requests, questions, ideas
+✅ **Star the repo** — helps visibility and motivates updates
+✅ **Share feedback** — what works, what doesn't, what's missing
+✅ **Try it in your setup** — and tell us what you broke
+
+### What's coming
+
+Once the project has a stable foundation, we'll open pull requests with:
+- A `CODE_OF_CONDUCT.md` to set community expectations (already in repo)
+- Coding standards / linting rules
+- A "good first issue" label for easy entry points
+- Review SLAs
+
+Estimated timeline: when version reaches `v0.1.0` or earlier if there's clear demand.
+
+## Reporting bugs
+
+Use the [bug report template](.github/ISSUE_TEMPLATE/bug_report.md). Please include:
+
+- ContainerFlow version (the `v0.0.X` tag you're on)
+- OS + Docker version
+- Reproduction steps
+- Expected vs actual behavior
+- Logs if relevant: `docker logs alteonx-dockerflow-containerflow-1`
+
+## Requesting features
+
+Use the [feature request template](.github/ISSUE_TEMPLATE/feature_request.md). Tell us:
+
+- The problem you're trying to solve (not just the solution)
+- Why existing functionality doesn't work
+- A rough sketch of how you'd want it to work in the UI
+
+We prioritize features that align with the [roadmap](monitoreo.md).
+
+## Reporting security vulnerabilities
+
+**Do not open public issues for security problems.** See [SECURITY.md](SECURITY.md) for the private reporting process.
+
+## Asking questions
+
+Open an issue with the label `question`. No silly questions.
+
+## Local development
+
+If you want to read the code, debug, or experiment locally:
+
+```bash
+git clone https://github.com/RGJorge/containerflow.git
+cd containerflow
+bun install
+bun run dev # frontend + backend with hot reload
+bun run typecheck # TypeScript check
+bun run test # unit tests
+bun run build # production build
+```
+
+Read the [README](README.md) for full setup details and architecture.
+
+## Code of Conduct
+
+By participating in any way (issues, comments, future PRs), you agree to follow our [Code of Conduct](CODE_OF_CONDUCT.md). TL;DR: be kind, be patient, no harassment.
+
+## Commercial use / partnerships
+
+ContainerFlow is licensed under AGPL-3.0. For commercial use with closed source, partnerships, or sponsored features, contact:
+
+📧 **alteonx.servicios@gmail.com**
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..e90de3b
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,53 @@
+# Security Policy
+
+## Supported Versions
+
+Only the latest tagged release receives security updates. ContainerFlow is in early development (`v0.x`), so always pin a specific version in production.
+
+| Version | Supported |
+| ------- | --------- |
+| latest | ✅ |
+| older | ❌ |
+
+## Reporting a Vulnerability
+
+**Please do not open public GitHub issues for security vulnerabilities.**
+
+Instead, report them privately by email:
+
+📧 **alteonx.servicios@gmail.com**
+
+Include in your report:
+
+- A description of the vulnerability
+- Steps to reproduce (or a proof-of-concept)
+- Affected version(s)
+- Suggested fix if you have one
+
+You can expect:
+
+- **Acknowledgement** within 72 hours
+- **Status update** within 7 days
+- **Patch + public disclosure** coordinated with you
+
+## Scope
+
+ContainerFlow has access to the Docker socket and host filesystem (read-only). Issues we consider in-scope:
+
+- Privilege escalation beyond what the Docker socket already grants
+- Unauthorized access bypassing `AUTH_TOKEN`
+- Command injection via container names, env vars, or labels
+- Path traversal in compose file resolution
+- XSS / CSRF in the web UI
+- Denial of service in the backend (memory leaks, infinite loops)
+
+Out of scope:
+
+- Vulnerabilities in dependencies — please report upstream
+- Issues requiring physical access to the host
+- Social engineering of operators
+- Anything you can already do as the Docker daemon user (since you have `docker.sock`)
+
+## Responsible Disclosure
+
+We follow [CVD principles](https://www.first.org/global/sigs/vulnerability-coordination/multiparty/guidelines-v1.1). Public disclosure happens after a fix is released, with credit to the reporter (unless you prefer to remain anonymous).
diff --git a/mejoras.md b/mejoras.md
deleted file mode 100644
index 579a902..0000000
--- a/mejoras.md
+++ /dev/null
@@ -1,146 +0,0 @@
-# Mejoras Frontend - ContainerFlow
-
-## Documentacion @xyflow/react 12
-
-| Recurso | URL |
-|---------|-----|
-| **Docs principal** | https://reactflow.dev/learn |
-| **API Reference** | https://reactflow.dev/api-reference |
-| **Ejemplos** | https://reactflow.dev/examples |
-| **UI Components** | https://reactflow.dev/ui |
-| **Playground** | https://xyflow.com/labs/react-flow-playground |
-| **GitHub** | https://github.com/xyflow/xyflow |
-| **Migracion a v12** | https://reactflow.dev/learn/troubleshooting/migrate-to-v12 |
-| **npm** | https://www.npmjs.com/package/@xyflow/react |
-
-### Secciones clave de la documentacion
-
-- **Learn > Core Concepts** — terms, building flows, interactivity, viewport, components
-- **Learn > Customization** — custom nodes, handles, edges, labels, theming
-- **Learn > Layouting** — overview, sub-flows
-- **Learn > Advanced** — hooks, accessibility, testing, TypeScript, performance, state management
-- **Reference > Hooks** — useNodes, useEdges, useReactFlow, etc.
-- **Reference > Components** — Background, Controls, Handles, MiniMap, etc.
-- **Reference > Utilities** — addEdge, applyNodeChanges, path functions
-
----
-
-## Ejemplos relevantes para ContainerFlow
-
-### Nodos
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Custom Nodes | https://reactflow.dev/examples/nodes/custom-node | Ya usamos ServiceNode y GroupNode custom |
-| Node Toolbar | https://reactflow.dev/examples/nodes/node-toolbar | Agregar toolbar con acciones (restart, stop, logs) al seleccionar un container |
-| Node Resizer | https://reactflow.dev/examples/nodes/node-resizer | Permitir redimensionar grupos manualmente |
-| Updating Nodes | https://reactflow.dev/examples/nodes/update-node | Referencia para actualizar stats en tiempo real |
-| Stress Test | https://reactflow.dev/examples/nodes/stress | Benchmark con muchos containers |
-| Intersections | https://reactflow.dev/examples/nodes/intersections | Detectar overlaps entre nodos |
-
-### Edges
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Animating Edges | https://reactflow.dev/examples/edges/animating-edges | Animaciones en edges para indicar actividad |
-| Custom Edges | https://reactflow.dev/examples/edges/custom-edges | Ya usamos OffsetEdge custom |
-| Edge Label Renderer | https://reactflow.dev/examples/edges/edge-label-renderer | Mostrar tipo de conexion (db, cache, proxy) como label en el edge |
-| Floating Edges | https://reactflow.dev/examples/edges/floating-edges | Handles que se mueven con el edge en vez de posicion fija |
-| Simple Floating Edges | https://reactflow.dev/examples/edges/simple-floating-edges | Alternativa mas simple — edges al handle mas cercano |
-| Edge Markers | https://reactflow.dev/examples/edges/markers | Agregar flechas direccionales a las conexiones |
-| Edge Toolbar | https://reactflow.dev/examples/edges/edge-toolbar | Mostrar info de conexion al hacer hover/click en un edge |
-
-### Interaccion
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Context Menu | https://reactflow.dev/examples/interaction/context-menu | Click derecho en container → restart, stop, logs, inspect |
-| Contextual Zoom | https://reactflow.dev/examples/interaction/contextual-zoom | Mostrar mas detalle (ports, stats) solo cuando hay zoom suficiente |
-| Save and Restore | https://reactflow.dev/examples/interaction/save-and-restore | Ya tenemos posiciones persistidas, pero podriamos guardar/cargar layouts completos |
-| Validation | https://reactflow.dev/examples/interaction/validation | Validar conexiones manuales si agregamos esa funcionalidad |
-| Touch Device | https://reactflow.dev/examples/interaction/touch-device | Soporte para tablets/touch |
-
-### Layout
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Dagre Tree | https://reactflow.dev/examples/layout/dagre | Ya tenemos dagre en package.json pero no lo usamos — alternativa a nuestro layout manual |
-| Elkjs Tree | https://reactflow.dev/examples/layout/elkjs | Layout mas potente que dagre, reduce cruces de edges |
-| Horizontal Flow | https://reactflow.dev/examples/layout/horizontal | Layout horizontal (izquierda a derecha) como alternativa |
-| Node Collisions | https://reactflow.dev/examples/layout/node-collisions | Resolver overlaps automaticamente al mover nodos |
-
-### Subflows y Agrupacion
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Sub Flows | https://reactflow.dev/examples/grouping/sub-flows | Referencia para nuestros GroupNode — grafos anidados |
-
-### Estilos
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Dark Mode | https://reactflow.dev/examples/styling/dark-mode | Toggle dark/light mode |
-| Tailwind | https://reactflow.dev/examples/styling/tailwind | Ya usamos Tailwind — referencia de estilos |
-| Turbo Flow | https://reactflow.dev/examples/styling/turbo-flow | Nodos con bordes gradient animados — inspiracion visual |
-
-### Misc
-
-| Ejemplo | URL | Aplicacion en ContainerFlow |
-|---------|-----|------------------------|
-| Download Image | https://reactflow.dev/examples/misc/download-image | Exportar el diagrama como PNG para documentacion |
-
----
-
-## Mejoras identificadas
-
-### Criticas
-
-- [ ] **Error boundaries** — Un crash en un nodo tumba toda la app. Agregar React error boundary alrededor de ReactFlow
-- [ ] **Empty state** — Si no hay containers, mostrar mensaje "No containers found" en vez de canvas vacio
-- [ ] **Reconnection feedback** — Mostrar "Reconnecting..." visible cuando se pierde el WebSocket
-
-### UX
-
-- [ ] **Context menu** — Click derecho en container: restart, stop, view logs, copy ID
-- [ ] **Node toolbar** — Al seleccionar un nodo, mostrar acciones rapidas arriba del nodo
-- [ ] **Contextual zoom** — Mostrar ports y stats detallados solo con zoom > 0.8, ocultar en zoom out
-- [ ] **Edge labels** — Mostrar tipo de conexion (Database, Cache, Proxy) como label en cada edge
-- [ ] **Edge markers** — Flechas direccionales para indicar flujo de datos
-- [ ] **Download image** — Boton para exportar diagrama como PNG
-- [ ] **Search/filter** — Buscar containers por nombre dentro del canvas
-
-### Performance
-
-- [ ] **Virtualizacion de logs** — LogPanel renderiza 2000 lineas de golpe. Usar virtualizacion (react-window o similar)
-- [ ] **Reconnexion exponencial** — Backoff exponencial en vez de intervalo fijo 3s
-- [ ] **Validacion de mensajes WS** — Validar estructura de mensajes con Zod antes de procesar
-
-### Layout
-
-- [ ] **Auto-layout con dagre/elkjs** — Usar la dependencia dagre que ya tenemos o migrar a elkjs para layout automatico
-- [ ] **Collision detection** — Resolver overlaps automaticamente al mover nodos
-- [ ] **Layout horizontal** — Opcion de layout izquierda-derecha ademas del actual
-
-### Visual
-
-- [ ] **Transiciones de layout** — Animar nodos cuando aparecen/desaparecen
-- [ ] **Turbo-style glow** — Bordes con gradient animado para containers running
-- [ ] **Dark/light mode** — Toggle de tema (actualmente solo dark)
-
-### Accesibilidad
-
-- [ ] **ARIA labels** — Agregar labels a botones de solo icono
-- [ ] **Keyboard navigation** — Navegar entre nodos con teclado
-- [ ] **Touch support** — Handles mas grandes para dispositivos tactiles
-
----
-
-## Componentes UI de React Flow
-
-React Flow lanzo "React Flow UI" (antes "React Flow Components") — componentes pre-hechos instalables via shadcn CLI:
-
-- **Database Schema Node** — Visualizar tablas y relaciones
-- **Zoom Slider** — Control de zoom mas visual que los botones default
-- **Debug Components** — Inspeccionar propiedades de nodos y estado del flow
-
-Docs: https://reactflow.dev/ui
diff --git a/monitoreo.md b/monitoreo.md
index 53fcfef..d099d5f 100644
--- a/monitoreo.md
+++ b/monitoreo.md
@@ -1,7 +1,8 @@
# ContainerFlow — Roadmap de Monitoreo
> Actualizado tras integración de eventos persistentes, notificaciones in-app,
-> control de acceso por path y corrección de cálculo de memoria real.
+> control de acceso por path, cálculo de memoria real, volúmenes/mounts en
+> DetailPanel y recomendaciones de configuración Docker.
## Fase 1: Acciones básicas ✅ COMPLETA
- [x] Stop / Start / Restart desde el DetailPanel
@@ -10,15 +11,16 @@
- [x] Rebuild (docker compose up --build) por servicio
- [x] **Bonus**: Recreate (docker compose up --force-recreate) para aplicar cambios de compose sin rebuild
-## Fase 2: Notificaciones ✅ MAYORMENTE COMPLETA
+## Fase 2: Notificaciones ✅ COMPLETA
- [x] Webhooks configurables — **Discord implementado**, Slack pendiente (mismo patrón aplicaría)
-- [ ] PWA — Service Worker + manifest (no implementado, depende de habilitar PWA web notifications)
- [x] Push notifications cuando un contenedor cae o health check falla — vía Discord + in-app
- [x] Panel de configuración de notificaciones en la UI (SettingsPage → Discord section)
- [x] **Bonus**: Notificaciones in-app (SQLite persistente, bell del header con read/unread, tab dedicado en Monitoring)
- [x] **Bonus**: Debounce de 15s para detectar restart vs stop+start
- [x] **Bonus**: Cooldown configurable + "Still Down" reminder
+> **Descartado**: PWA + Service Worker para web push notifications — requiere HTTPS y agrega complejidad de deploy. Las notificaciones in-app + Discord cubren los casos de uso.
+
## Fase 3: Historial y métricas ✅ COMPLETA
- [x] SQLite para persistir stats — CPU/RAM (network I/O pendiente)
- [x] Gráficas temporales de CPU/RAM por servicio (1h, 6h, 24h, 7d) con buckets agregados
@@ -37,9 +39,9 @@
- [x] **Bonus**: Color amber en progress bars cuando supera threshold (dashboard ServiceNode + DetailPanel)
## Fase 5: Info avanzada
-- [ ] Volumes/Mounts por contenedor en DetailPanel (no implementado)
+- [x] Volumes/Mounts por contenedor en DetailPanel — tipo, source, destination, rw/ro, name del volumen
- [x] Terminal interactiva (docker exec) desde la UI — botón Exec en DetailPanel
-- [ ] Network inspector (tráfico entre servicios) — parcial: conexiones visualizadas en grafo, no hay info de tráfico
+- [ ] Network inspector (tráfico entre servicios) — parcial: conexiones visualizadas en grafo, no hay info de tráfico (rx/tx bytes)
- [ ] Image layers y tamaño (no implementado)
## Fase 6: Deployment (futuro)
@@ -52,6 +54,39 @@
---
+## Fase nueva: Recomendaciones de configuración Docker
+
+ContainerFlow no solo monitorea — detecta configuración sub-óptima y la marca con un banner ámbar en el DetailPanel. La idea es ayudar al usuario a adoptar buenas prácticas sin tener que recordarlas.
+
+### Recomendaciones activas (✅ implementadas)
+- [x] **Sin `memory_limit`** → banner "Sin límite de memoria configurado en Docker"
+- [x] **Sin `cpu_quota`** → banner "Sin límite de CPU configurado en Docker"
+- [x] **`restart: no` o vacío** → banner "Restart policy: none — el contenedor no se reiniciará automáticamente si se detiene"
+
+### Recomendaciones planeadas
+- [ ] **Sin `HEALTHCHECK`** → detectar `service.health_status === ""` y sugerir healthcheck contextual:
+ - postgres → `pg_isready -U $POSTGRES_USER`
+ - redis → `redis-cli ping`
+ - mysql/mariadb → `mysqladmin ping -h localhost`
+ - mongo → `mongosh --eval "db.adminCommand('ping')"`
+ - http app → `curl -f http://localhost:PORT/health`
+ - Banner copiable con el snippet del compose
+- [ ] **`image:latest`** → warning "Imagen sin tag específico — no reproducible. Considera fijar versión."
+- [ ] **DBs sin named volume** → warning "Container de DB (postgres/mysql/mongo/redis) sin named volume para datos persistentes. `docker-compose down` puede borrar datos."
+- [ ] **Containers sin labels de compose** → info "Container manual (docker run). Acciones de rebuild no disponibles."
+
+### Resumen del enfoque
+
+```
+docker stats: solo muestra números
+otros dashboards: muestran números + gráficas
+ContainerFlow: muestra + grafica + DETECTA config rota y enseña a arreglarla
+```
+
+Este eje diferenciador agrega valor educativo, no solo observabilidad.
+
+---
+
## Features adicionales no contempladas en el roadmap original
### Seguridad / Multi-usuario
@@ -69,32 +104,32 @@
- [x] Tabs en Monitoring (Historial / Eventos / Notificaciones)
- [x] Click en notificación/evento → abre DetailPanel del container en tab Stats
- [x] DATA_DIR auto-creado en `./data/` (en vez de raíz del proyecto)
+- [x] Bell del header con read/unread persistente (localStorage)
+- [x] Card totales en Monitoring con color verde diferenciado
### Documentación
- [x] `docker-containerflow.md` — guía Docker explicada para usuarios
- [x] `.env.example` con secciones documentadas
-- [x] README con sección Monitoreo e historial + Seguridad expandida
+- [x] README con sección Monitoreo e historial + Seguridad + Mejores prácticas
---
-## Pendientes prioritarios (próxima iteración sugerida)
+## Pendientes prioritarios (próxima iteración)
1. **Alertas con duración** ("CPU > 80% por 5 min") — Fase 4 pendiente
- Requiere ventana deslizante de samples + state machine por threshold
-2. ~~Volumes/Mounts en DetailPanel~~ — ✅ HECHO
-3. **Recomendaciones de healthcheck** — Nueva fase, "value add" para usuarios
- - Detecta containers sin healthcheck (`service.health_status === ""`)
- - Sugiere healthcheck contextual según la imagen (postgres → pg_isready, redis → redis-cli ping, etc.)
- - Banner/widget en dashboard: "N containers sin healthcheck"
- - Tooltip en DetailPanel con ejemplo copiable
- - Opción de notificación diaria de resumen ("Tienes X containers sin healthcheck")
-4. **Network I/O en stats history** — extiende `pollStats` con `networks.eth0.rx_bytes/tx_bytes`
-5. **PWA + Service Worker** — para web push notifications cuando la pestaña no está abierta
-6. **Image layers y tamaño** — vía `docker image inspect` + UI en DetailPanel
+ - Resuelve falsos positivos por spikes momentáneos
+2. **Recomendaciones de healthcheck** — Fase nueva
+ - Detectar containers sin healthcheck y sugerir uno contextual según la imagen
+ - Banner/widget en dashboard, tooltip con ejemplo copiable
+3. **Network I/O en stats history** — extiende `pollStats` con `networks.eth0.rx_bytes/tx_bytes`
+4. **Image layers y tamaño** — vía `docker image inspect` + UI en DetailPanel
+5. **Slack webhook** — clonar el patrón de Discord para Slack
## Cosas que cambiaron sustancialmente desde el roadmap original
-- **"Notificaciones"** evolucionó de "solo Discord" a "Discord + in-app + persistente + read/unread"
-- **"Historial"** evolucionó de "CPU/RAM por servicio" a "+ totales agregados + per-service override + reset filtros"
+- **"Notificaciones"** evolucionó de "solo Discord" a "Discord + in-app persistente + bell con read/unread + tab dedicado"
+- **"Historial"** evolucionó de "CPU/RAM por servicio" a "+ totales agregados + per-service override + reset filtros + memoria real"
- **Acciones** evolucionó de "stop/start/restart/rebuild" a "+ recreate + exec + remove con confirmación"
- **Seguridad** se volvió un eje propio (ALLOWED_PATHS) que no estaba en el roadmap
+- **Recomendaciones de config Docker** es un eje nuevo que no estaba contemplado — diferenciador del producto vs "solo otro dashboard"