Ideas y Mejoras

Anota ideas, sugerencias y mejoras para el monitor
PDF Markdown
Todas Pendientes En progreso Completadas Descartadas
Todos Usuario Claude
Bot TG: /trending con tendencias por hora Completada

Mostrar que categorias estan subiendo en las ultimas 3 horas vs promedio, detectar spikes de noticias

claude · 19-02-2026 21:04hs · Resuelta: 20-02-2026 00:21hs
Bot TG: /resumen_dia a las 21hs Completada

Resumen automatico diario a las 21hs con top 5 noticias del dia, stats y comparacion con dia anterior

claude · 19-02-2026 21:04hs · Resuelta: 20-02-2026 00:21hs
Bot TG: Notificacion automatica de noticias score >= 8 Completada

Enviar automaticamente al chat personal cuando una noticia supere score 8, con boton para ver detalle completo

claude · 19-02-2026 21:04hs · Resuelta: 20-02-2026 00:21hs
Imagen RRSS: programar envio automatico diario Completada

Agregar scheduler que envie la imagen resumen por Telegram automaticamente a las 23:00hs cada dia, sin necesidad de llamar al endpoint manualmente

Claude · 19-02-2026 17:15hs · Resuelta: 19-02-2026 14:21hs
Imagen RRSS: modo story vertical 1080x1920 Pendiente

Agregar parametro ?formato=story que genere la imagen en formato vertical Instagram Stories (1080x1920) con layout adaptado y mas espacio para contenido

Claude · 19-02-2026 17:15hs
Imagen RRSS: top 3 noticias con thumbnails Pendiente

Descargar y redimensionar thumbnails de las 3 noticias mas importantes para incluirlas como imagenes pequenas dentro de la card de resumen

Claude · 19-02-2026 17:15hs
Imagen RRSS: grafico de barras inline por categoria Pendiente

Agregar micro-barras horizontales en la seccion de categorias mostrando proporcion relativa de cada una, tipo sparkline visual

Claude · 19-02-2026 17:15hs
Imagen RRSS: comparativa con dia anterior Pendiente

Mostrar variacion porcentual respecto al dia anterior (mas/menos noticias, nuevas categorias, etc) como indicadores delta junto al hero stat

Claude · 19-02-2026 17:15hs
Heatmap temporal animado Pendiente

Agregar un slider temporal al heatmap que muestre la evolución de la densidad de noticias hora por hora. Permitiría ver patrones temporales de eventos noticiosos en el mapa.

Claude · 19-02-2026 15:48hs
Geo-alertas por zona Pendiente

Permitir configurar alertas cuando se detecten N+ noticias en una zona específica del mapa en un período corto (ej: 3+ noticias policiales en Centro en 2 horas). Posible cluster detection.

Claude · 19-02-2026 15:48hs
API de noticias geolocalizadas Pendiente

Endpoint /api/geo-noticias que retorne noticias con coordenadas en GeoJSON para integración con otros sistemas o mapas externos.

Claude · 19-02-2026 15:48hs
Mapa de barrios con estadísticas Pendiente

Overlay de polígonos de barrios de MdP con estadísticas agregadas: total noticias, categoría predominante, tendencia (más/menos noticias que semana anterior).

Claude · 19-02-2026 15:48hs
Clustering automático de markers Completada

Implementar MarkerCluster de Leaflet para agrupar markers cercanos en clusters con número. Mejoraría la visualización cuando hay muchos markers en la misma zona.

Claude · 19-02-2026 15:48hs · Resuelta: 20-02-2026 00:21hs
Content Tracker: screenshot antes del borrado Completada

Cuando se detecta que una nota esta por ser borrada (primer 404), tomar screenshot con Playwright y guardarlo como evidencia antes de que desaparezca del cache de Google.

Claude · 19-02-2026 13:41hs · Resuelta: 20-02-2026 00:22hs
Content Tracker: reporte semanal de integridad Completada

Generar un reporte semanal con estadisticas: cuantas notas fueron editadas/borradas, que fuentes borran mas contenido, patrones temporales de edicion.

Claude · 19-02-2026 13:41hs · Resuelta: 20-02-2026 00:22hs
Content Tracker: alertas configurables por fuente Completada

Permitir configurar que fuentes monitorear mas intensamente (cada 2h en vez de 6h) y cuales ignorar. Ej: monitorear La Capital mas seguido que Google News.

Claude · 19-02-2026 13:41hs · Resuelta: 20-02-2026 00:22hs
Content Tracker: diff de contenido editado Completada

Cuando se detecta una edicion, guardar tambien el texto anterior y el nuevo para mostrar un diff visual en el dashboard (que cambio exactamente en la nota).

Claude · 19-02-2026 13:41hs · Resuelta: 20-02-2026 00:22hs
Content Tracker: panel visual en dashboard Completada

Agregar seccion en el dashboard web con tabla de noticias editadas/borradas, graficos de integridad, y filtros por fuente/estado. Endpoint /content-tracking ya tiene la API obtener_stats_tracking().

Claude · 19-02-2026 13:41hs · Resuelta: 19-02-2026 14:21hs
Estado scraper: historial de rendimiento Completada

Guardar metricas historicas del scraper (noticias/hora, errores/dia) para poder ver tendencias a lo largo del tiempo en un grafico.

Claude · 19-02-2026 11:44hs · Resuelta: 20-02-2026 00:21hs
PDF ideas: incluir graficos de progreso Pendiente

Agregar un mini-grafico circular o barra mostrando el porcentaje de ideas completadas vs pendientes en el PDF exportado.

Claude · 19-02-2026 11:44hs
Estado scraper: alertas por Telegram cuando hay fuentes caidas Completada

Si una fuente tiene 5+ errores consecutivos, enviar alerta al chat personal de Telegram automaticamente.

Claude · 19-02-2026 11:44hs
Imagen RRSS: programar publicacion automatica Completada

Generar y enviar automaticamente la imagen resumen a las 22:00hs por Telegram, lista para compartir en Instagram Stories.

Claude · 19-02-2026 11:44hs · Resuelta: 20-02-2026 00:21hs
Imagen RRSS: agregar logo del proyecto Completada

Incluir un logo o icono personalizado en la imagen generada para RRSS en lugar de solo texto. Podria ser un PNG transparente superpuesto.

Claude · 19-02-2026 11:44hs
Georef: backfill con pipeline híbrido Pendiente

Actualizar backfill_geo.py para usar geolocalizar_noticia_hibrido() en vez de solo regex. Aumentaría cobertura del 17.8% actual al ~25-30%.

Claude · 19-02-2026 23:07hs
Georef: validación post-asignación por bounding box Pendiente

Después de asignar coordenadas, verificar que estén dentro del bbox de MdP (-38.35 a -37.85 lat, -57.95 a -57.45 lon). Descartar si están fuera.

Claude · 19-02-2026 23:07hs
Georef: dashboard de precisión con mapa de calor de errores Pendiente

Widget en /admin que muestre tasa de georef por categoría, distribución de certeza, y mapa de calor de ubicaciones más asignadas. Incluir botón para auditar noticias con certeza < 50.

Claude · 19-02-2026 23:07hs
Correlacion siniestros-noticias Pendiente

Cuando se detecta un siniestro vial en DataHub, buscar automaticamente si hay noticia en el monitor sobre el mismo evento. Mostrar badge de cruce DataHub en la noticia y viceversa en el panel de siniestros.

Claude · 19-02-2026 20:16hs
Alerta transporte en noticias Pendiente

Si un servicio de transporte esta cancelado/demorado significativamente, generar alerta automatica en el dashboard y buscar si algun medio local ya reporto la demora.

Claude · 19-02-2026 20:16hs
Mini-mapa siniestros viales Pendiente

Agregar un pequeno mapa Leaflet en el panel de siniestros mostrando la ubicacion de los siniestros recientes cuando hay coordenadas disponibles.

Claude · 19-02-2026 20:16hs
Widget dolar historico sparkline Pendiente

Agregar un mini grafico sparkline al lado de las cotizaciones del dolar mostrando la variacion de los ultimos 7 dias usando un endpoint de DataHub de historico.

Claude · 19-02-2026 20:16hs
Publicaciones institucionales como fuente RSS Pendiente

Importar automaticamente las publicaciones institucionales de DataHub como noticias del monitor, clasificandolas por categoria (ciencia, gobierno, educacion) para ampliar la cobertura.

Claude · 19-02-2026 20:16hs
Content Tracker: diff visual lado a lado del contenido editado Pendiente
Claude · 19-02-2026 14:25hs
Imagen RRSS: modo story vertical 1080x1920 para Instagram Stories Descartada
Claude · 19-02-2026 14:25hs
Dashboard: mini-widget integridad en barra superior (editadas/borradas hoy) Completada
Claude · 19-02-2026 14:25hs
Exportar resumen diario como imagen para RRSS Completada

Generar una imagen PNG/JPG estilizada con el resumen del dia (top 5 noticias, estadisticas) lista para compartir en Instagram Stories o Twitter. Usar Pillow o html2image.

Claude · 18-02-2026 14:49hs · Resuelta: 19-02-2026 hs
Comparador de sentimiento por medio Completada

Grafico que compare el sentimiento promedio (positivo/negativo/neutro) de cada medio de comunicacion en los ultimos 7 dias. Util para detectar sesgos editoriales.

Claude · 18-02-2026 14:49hs · Resuelta: 26--2-19-0 11:35hs
Mapa interactivo de noticias geolocalizadas Completada

Usando Leaflet.js, mostrar un mapa de MdP con markers en la ubicacion aproximada de cada noticia. Geolocalizar automaticamente con IA analizando el texto de la noticia.

Claude · 18-02-2026 14:49hs · Resuelta: 26--2-19-0 11:35hs
Notificaciones push en el navegador (Web Push) Pendiente

Implementar Web Push Notifications para alertas keyword y noticias de alto impacto, usando Service Workers. Permitiria recibir alertas sin Telegram.

Claude · 18-02-2026 14:49hs
Dashboard de archivos recibidos por Telegram Completada

Crear una pagina /archivos en el dashboard web que muestre todos los archivos recibidos por Telegram, con preview de imagenes, filtro por tipo y fecha, y opcion de descargar.

Claude · 18-02-2026 14:49hs · Resuelta: 18-02-2026 18:40hs
Plan SaaS: NewsRadar - Monitor de noticias como servicio Pendiente

## Investigación SaaS - Monitor de Noticias como Servicio ### Mercado - Global 2025: USD $5.4-6.3B, proyección 2032: $13-17B (CAGR 11-16%) - LATAM 2030: USD $810M (CAGR 10%) - Brecha clara: enterprise ($6,000+/año) vs nada para medios/PYMES locales ### Competencia directa: NINGUNA en este nicho - Meltwater/Cision: $6,000-100,000/año (enterprise) - Brand24/Mention: $49-199/mes (monitoreo de MARCA, no noticias locales) - LATAM (Ejes, Clipping HD): servicios manuales, caros, no SaaS ### Ventajas competitivas únicas - Previsiones IA (ningún competidor lo tiene) - Multi-fuente real (RSS+Twitter+IG+TikTok+Bluesky+Web) - Detección fake news + análisis de sesgo - Alertas Telegram (preferido en LATAM) - Stack liviano = costos bajos = pricing agresivo ### Pricing propuesto - Free: 5 fuentes, 1 usuario - Starter $29/mes: 20 fuentes, 2 usuarios - Pro $79/mes: 50 fuentes, previsiones IA, fake news - Agency $199/mes: 150 fuentes, white-label - Enterprise: custom ### Nombres globales (top 3) 1. Sentinews (Sentinel+News) 2. NewsHawk 3. Vigilo (del latín vigilare) ### Faltante para SaaS Multi-tenancy, auth/billing (Stripe+MercadoPago), onboarding wizard, migrar a PostgreSQL a mediano plazo. ### Primer año conservador: MRR $2,750 / ARR $33,000 ### Primer año optimista: MRR $15,000 / ARR $180,000

Claude · 18-02-2026 14:09hs
Previsiones por categoría con horario personalizado Pendiente

Permitir configurar diferentes horarios de generación por categoría. Ej: deportes a las 20:00 (antes de partidos nocturnos), policiales a las 22:00. Cada categoría puede tener su propia ventana de análisis óptima.

Claude · 18-02-2026 13:44hs
Historial de cambios de configuración Completada

Registrar en una tabla log_config cada cambio de configuración (quién, cuándo, qué campo, valor anterior, valor nuevo). Útil para auditoría y debugging cuando algo cambia de comportamiento inesperadamente.

Claude · 18-02-2026 13:44hs · Resuelta: 18-02-2026 19:13hs
Dominio web y rebranding del proyecto Pendiente

Investigación de dominios y rebranding del proyecto: ## Nombres evaluados | Dominio | Puntuación | Notas | |---------|-----------|-------| | monitormdp.com.ar | Mejor opción | Corto, memorable, descriptivo | | radarmdp.com.ar | Muy buena | Metáfora perfecta para monitoreo | | monitornoticiasmdp.com.ar | Buena | Descriptivo pero largo (20 chars) | | pulsomdp.com.ar | Buena | Evoca dinamismo | | noticiasmdp.com | OCUPADO | Ya existe portal activo | ## Precios - .com.ar (NIC Argentina): $8.500 ARS/año - .com (Namecheap): ~$12.99 USD/año renovación ## Pendiente - Verificar disponibilidad real en nic.ar/verificar-dominio - Decidir nombre final - Reestructurar carpetas (eliminar "lucia" de paths) - Actualizar systemd service, git remote, etc. - Registrar .com.ar + .com como protección (~$25.000 ARS/año total) ## Registradores recomendados - .com.ar: NIC Argentina directo o DonWeb como intermediario - .com: Namecheap o Cloudflare (vende al costo)

Claude · 18-02-2026 13:31hs
Dashboard de precisión de previsiones IA Completada

Página dedicada /previsiones/precision con gráficos históricos de acierto por categoría, evolución semanal/mensual, comparativa de modelos IA (Groq vs Gemini). Útil para calibrar y mejorar los prompts de previsión.

Claude · 18-02-2026 13:15hs · Resuelta: 18-02-2026 19:13hs
Alertas inteligentes por degradación de scraping Completada

Usando los datos del panel de salud DB (#87), detectar automáticamente cuando una fuente deja de traer noticias (posible bloqueo o cambio de estructura) y alertar por Telegram con sugerencias de acción.

Claude · 18-02-2026 13:15hs · Resuelta: 18-02-2026 18:40hs
Modo comparación A/B de prompts IA Pendiente

Permitir ejecutar dos versiones de prompt en paralelo sobre las mismas noticias y comparar resultados (categorización, resumen, score). Útil para optimizar prompts sin afectar producción.

Claude · 18-02-2026 13:15hs
Exportar ideas a Markdown/PDF Completada

Botón en /ideas para exportar todas las ideas (pendientes y completadas) como documento Markdown o PDF, con fecha de creación, solución y autor. Útil para documentación y reportes.

Claude · 18-02-2026 13:15hs · Resuelta: 19-02-2026 hs
Refresh automático de CSRF token via AJAX Completada

Implementar endpoint /api/csrf-token que devuelva token fresco. El frontend lo renueva automáticamente cada 30 minutos via JavaScript, eliminando por completo los errores CSRF por expiración sin importar cuánto tiempo la página esté abierta.

Claude · 18-02-2026 12:59hs · Resuelta: 18-02-2026 13:13hs
Retry inteligente global para operaciones SQLite Completada

Crear un decorador/wrapper reutilizable para todas las funciones de db.py que haga retry con backoff exponencial ante database is locked. Aplicar a todas las operaciones de escritura (no solo ideas) para prevenir errores de concurrencia en cualquier sección del sistema.

Claude · 18-02-2026 12:59hs · Resuelta: 18-02-2026 13:13hs
Monitoreo de salud de la base de datos Completada

Dashboard en /config que muestre métricas de SQLite: locks activos, WAL size, queries lentas, contención de escritura. Alertar por Telegram si hay locks frecuentes o si la DB supera cierto tamaño. Útil para anticipar problemas de rendimiento.

Claude · 18-02-2026 12:59hs · Resuelta: 18-02-2026 13:13hs
Migración a PostgreSQL o conexión pooling Completada

# Evaluación de migración a PostgreSQL ## Fecha: 18-02-2026 13:05hs (GMT-3) ## Estado: COMPLETADA --- ### 1. Análisis del uso actual de SQLite en el proyecto #### Arquitectura actual (db.py) - **1 archivo** de ~3700 líneas con **80+ funciones** públicas - Conexión thread-local con `threading.local()` (pool casero) - PRAGMAs configurados: WAL mode, foreign_keys, busy_timeout=5000ms, cache_size=4MB - Custom function: UNACCENT para búsquedas sin acentos - **12 tablas**: noticias, fuentes, config_runtime, embeddings, cuentas_rrss, newsletter_suscriptores, newsletter_envios, previsiones, ideas, alertas_keyword, events - Múltiples índices (fecha, enviada, categoria, fuente, grupo_id, sentimiento, tipo_fuente, alcance, autor) - Migraciones inline con ALTER TABLE + try/except #### Procesos concurrentes que escriben 1. **Flask web** (dashboard): lecturas mayoritarias, escrituras esporádicas (toggle fuente, CRUD ideas, etc.) 2. **Scraper de RSS/feeds**: inserta noticias nuevas cada N minutos 3. **Scraper de Twitter** (Playwright): inserta noticias de RRSS, actualiza métricas engagement 4. **Scraper Instagram/TikTok**: inserta noticias de RRSS 5. **Filtro IA** (Groq/Gemini): actualiza resumen, categoría, score, sentimiento por noticia 6. **Bot Telegram**: lee noticias, marca enviadas, toggle configuración 7. **Newsletter**: lee noticias para envío 8. **Embeddings**: genera/guarda vectores de embedding por noticia 9. **Previsiones IA**: genera/evalúa previsiones 10. **Limpieza**: elimina noticias viejas periódicamente #### Patrones de acceso identificados - **Escrituras**: INSERT noticias + UPDATE IA + UPDATE métricas (ráfagas cada 5-15 min) - **Lecturas**: Dashboard queries complejas con JOINs, GROUP BY, COALESCE (constante) - **Cache**: stats_dashboard con TTL 30s, stats fuentes con TTL 60s (mitiga lecturas pesadas) - **Transacciones**: Commits individuales por operación (no batching) --- ### 2. Pros y contras de migrar a PostgreSQL #### PROS | Beneficio | Impacto para este proyecto | |-----------|---------------------------| | MVCC real (escrituras concurrentes sin bloqueo) | **ALTO** - 10+ procesos escriben simultáneamente. WAL ayuda pero no elimina contención | | Connection pooling nativo (pgBouncer) | **MEDIO** - Mejor que threading.local() casero | | Búsqueda full-text nativa (tsvector) | **ALTO** - Reemplazaría las funciones de similitud Jaccard caseras | | pgvector para embeddings | **ALTO** - Reemplazaría BLOB + coseno manual. Queries vectoriales 100x más rápidas | | Migraciones con Alembic | **MEDIO** - Eliminaría los ALTER TABLE + try/except frágiles | | JSON/JSONB nativo | **MEDIO** - metadata_json como JSONB con queries indexadas | | Monitoreo/stats integrados | **BAJO** - pg_stat, explain analyze | | Backup incremental (pg_dump, WAL archiving) | **MEDIO** - Backups más robustos que copiar .db | #### CONTRAS | Desventaja | Impacto | |------------|---------| | Servicio separado que consumir RAM (~100-200MB) | **MEDIO** - En VPS con 8GB RAM no es problema | | Complejidad operacional (instalar, mantener, actualizar) | **ALTO** - SQLite = zero-admin. PG necesita mantenimiento | | Refactorizar 80+ funciones en db.py (3700 líneas) | **MUY ALTO** - Esfuerzo considerable. Todas las queries a revisar | | Reescribir queries SQLite-específicas | **MEDIO** - COALESCE funciona igual, pero GROUP BY es más estricto en PG | | Deployment más complejo | **MEDIO** - Necesita Docker o instalación de PG | | Latencia de red (si PG en otro host) | **BAJO** - Normalmente co-located | | Sin beneficio real si escrituras son < 100/min | **ALTO** - Este proyecto probablemente no supera 10-20 escrituras/min | --- ### 3. Alternativa intermedia: Optimizar SQLite actual #### Opción A: Connection pooling con SQLAlchemy sobre SQLite ```python # En vez de threading.local(), usar SQLAlchemy engine from sqlalchemy import create_engine engine = create_engine('sqlite:///data/noticias.db', pool_size=5, pool_timeout=30, connect_args={'check_same_thread': False}) ``` - **Esfuerzo**: ALTO (reescribir todo db.py para usar SQLAlchemy ORM o Core) - **Beneficio**: Pool de conexiones real, pero SQLite sigue teniendo writer lock - **Veredicto**: No vale la pena solo para SQLite #### Opción B: Optimizar el threading.local() actual (RECOMENDADA) 1. **Batch inserts**: Agrupar INSERTs de noticias en una sola transacción 2. **WAL2**: Considerar modo WAL2 (SQLite 3.37+) para mejor concurrencia 3. **PRAGMA wal_checkpoint(TRUNCATE)**: Periódico para mantener WAL compacto 4. **Write-ahead batching**: Cola de escrituras con un solo writer thread 5. **Retry logic**: Agregar retry con backoff en caso de database locked 6. **PRAGMA synchronous=NORMAL**: En vez de FULL (actualmente default) #### Opción C: Migración gradual a PostgreSQL 1. Fase 1: Instalar PostgreSQL, crear schema equivalente 2. Fase 2: Dual-write (escribir a ambas DB) 3. Fase 3: Migrar lecturas a PostgreSQL 4. Fase 4: Desactivar SQLite --- ### 4. Estimación de esfuerzo de migración completa #### Archivos que cambiarían | Archivo | Cambios | Esfuerzo | |---------|---------|----------| | **db.py** (~3700 líneas, 80+ funciones) | Reescribir get_conn(), todas las queries, migraciones | **MUY ALTO** (3-5 días) | | **config.py** | Agregar DB_URL postgresql, quitar DB_PATH | **BAJO** (1 hora) | | **app.py** (Flask) | Ajustar init_db() call | **BAJO** (1 hora) | | **scraper.py / twitter_scraper.py** | Sin cambios (usan db.py) | **NULO** | | **ia_filtro.py** | Sin cambios (usa db.py) | **NULO** | | **telegram_bot.py** | Sin cambios (usa db.py) | **NULO** | | **embeddings.py** | Migrar de BLOB a pgvector | **MEDIO** (4-8 horas) | | **requirements.txt** | Agregar psycopg2-binary, sqlalchemy | **BAJO** (5 min) | | **docker-compose.yml** | Agregar servicio PostgreSQL | **BAJO** (1 hora) | | **Script de migración de datos** | Export SQLite -> Import PG | **MEDIO** (4-8 horas) | #### Total estimado: 5-8 días de trabajo dedicado #### Funciones de db.py que requerirían cambios significativos: - `get_conn()` → pool de conexiones PG - `init_db()` → SQL DDL de PostgreSQL (SERIAL vs AUTOINCREMENT, TEXT vs VARCHAR, etc.) - `_sqlite_unaccent()` → usar unaccent de PG nativo - Todas las queries con `?` placeholders → `%s` o `$1` (psycopg2/asyncpg) - `buscar_noticia_similar()` → pgvector similarity search - `stats_dashboard()` → queries GROUP BY más estrictas - 80+ funciones con `conn.execute()` → adaptar syntax --- ### 5. Recomendación final #### **NO MIGRAR A POSTGRESQL POR AHORA** **Razones:** 1. **El volumen actual no lo justifica**: Con ~48 sitios web + ~84 cuentas RRSS, las escrituras probablemente son <20/minuto. SQLite con WAL maneja esto sin problemas. 2. **El costo de migración es alto**: 5-8 días de trabajo para un beneficio marginal en esta escala. 3. **busy_timeout=5000ms ya está configurado**: Las escrituras esperan hasta 5 segundos si hay lock. Suficiente para la carga actual. 4. **WAL mode ya está activo**: Permite lecturas concurrentes mientras hay escrituras. 5. **SQLite es zero-admin**: En un VPS barato ($5-15/mes), no tener que mantener PostgreSQL es una ventaja operacional enorme. #### **Cuándo reconsiderar la migración:** - Si aparecen errores `database is locked` más de 1 vez por semana en los logs - Si la base de datos supera 5GB (actualmente probablemente <500MB) - Si se agregan funcionalidades que requieran transacciones complejas multi-tabla - Si se necesita pgvector para búsqueda semántica a gran escala (>100K embeddings) - Si se migra a un stack con múltiples workers (gunicorn multi-process) #### **Acciones recomendadas a corto plazo:** 1. Agregar `PRAGMA synchronous=NORMAL` en get_conn() (mejora velocidad de escritura ~2x) 2. Agregar retry logic con backoff exponencial en inserts 3. Monitorear errores "database is locked" con un contador en logs 4. Considerar batch inserts para el scraper (agrupar 10-20 noticias por transacción) 5. Agregar `PRAGMA wal_autocheckpoint=1000` para controlar tamaño de WAL

Claude · 18-02-2026 12:59hs
Clasificar noticias por alcance: local, zonal, provincial, nacional Completada

Agregar un campo alcance a las noticias para clasificarlas en 4 niveles: - Local: noticias específicas de Mar del Plata - Zonal: noticias de la zona (Batán, Miramar, Balcarce, Necochea, etc.) - Provincial: noticias de provincia de Buenos Aires que afectan a MdP - Nacional: noticias de alcance nacional que mencionan o afectan a MdP La clasificación puede hacerse automáticamente por IA al procesar cada noticia. Incluir filtro por alcance en /noticias y en los resúmenes.

Claude · 18-02-2026 08:46hs
Sección de noticias de MdP en medios internacionales Completada

Crear sección separada para rastrear menciones de Mar del Plata en medios internacionales y agencias de noticias de renombre. Fuentes sugeridas (vía RSS/Google News): - Reuters, AP, AFP, EFE, ANSA - BBC Mundo, CNN en Español, DW - The Guardian, New York Times (secciones Latam) Implementación: - Agregar feeds RSS de agencias internacionales - Google News queries con site:reuters.com, site:bbc.com, etc. - Nueva ruta /internacional con las noticias encontradas - Stats: qué agencias mencionan más a MdP, qué temas llegan a nivel internacional - Link en sidebar sección Análisis

Claude · 18-02-2026 08:46hs
Bug corregido v1.46.0: variables de templates no coincidían con rutas Completada

Problema encontrado en v1.46.0: Los 5 templates fusionados (narrativo.html, analisis_fuentes.html, etc.) fueron creados por un agente separado que usó nombres de variables distintos a los que las rutas de Flask pasaban. Desajustes detectados: 1. narrativo.html esperaba resultados, divergencias_resultados, divergencias_updated pero la ruta pasaba sesgo, divergencias, updated 2. analisis_fuentes.html esperaba noticias, stats, horas (unificado) pero la ruta pasaba noticias_prim, stats_prim, horas_cob/horas_prim Solución aplicada: - Se corrigieron los render_template() en web_app.py para usar los nombres que los templates esperan

Claude · 18-02-2026 08:46hs
Investigacion VPS/Dedicados baratos para migracion Completada

# Investigación VPS/Dedicados baratos para migración ## Fecha: 18-02-2026 13:05hs (GMT-3) ## Estado: COMPLETADA ### Requisitos del proyecto - Flask + SQLite + Playwright (Twitter scraping) + Groq/Gemini IA + Telegram bot - Mínimo: 4 vCPU, 8GB RAM, 100GB SSD - Playwright necesita ~1-2GB RAM extra para navegadores headless - Presupuesto objetivo: < $20 USD/mes --- ### Tabla comparativa de proveedores | # | Proveedor | Plan | Precio/mes | vCPU | RAM | Disco | BW | Ubicación | Notas | |---|-----------|------|-----------|------|-----|-------|----|-----------| ------| | 1 | **Contabo** | Cloud VPS S | **$4.95 USD** | 4 | 8GB | 100GB NVMe | 32TB | USA (NY, St. Louis, Seattle), EU | **MEJOR PRECIO.** Sin setup fee. DDoS incluido. Overselling conocido pero suficiente para este uso. | | 2 | **Hetzner** | CAX21 (ARM) | **~$7.10 USD** (€6.49) | 4 | 8GB | 80GB NVMe | 20TB | EU (Nuremberg, Falkenstein, Helsinki) | ARM Ampere. Excelente relación precio/rendimiento. Solo EU. Playwright compatible con ARM (Chromium). | | 3 | **Hetzner** | CX32 (Intel) | **~$7.45 USD** (€6.80) | 4 | 8GB | 80GB NVMe | 20TB | EU solamente | Shared Intel x86. No disponible en USA. Muy buen rendimiento. | | 4 | **Oracle Cloud** | Always Free ARM | **$0 USD** | 4 OCPU | 24GB | 200GB | 10TB | USA (Ashburn, Phoenix, Chicago), BR (São Paulo) | **GRATIS PERMANENTE.** ARM Ampere A1. Specs increíbles. Riesgo: Oracle puede discontinuar o restringir. Provisioning difícil (hay que reintentar). São Paulo = baja latencia a ARG. | | 5 | **Hostinger** | KVM 2 | **$9.99 USD** (promo) | 2 | 8GB | 100GB NVMe | 8TB | USA, EU, Asia | Solo 2 vCPU. Renueva a ~$24.99. Panel propio (no estándar). | | 6 | **Hetzner** | CPX32 (AMD) | **~$14.90 USD** (€13.60) | 4 | 8GB | 160GB NVMe | 20TB | EU + USA (Ashburn, Hillsboro) | AMD EPYC dedicado. Disponible en USA. Premium pero potente. Tráfico USA limitado vs EU. | | 7 | **Hostinger** | KVM 4 | **$19.99 USD** (promo) | 4 | 16GB | 200GB NVMe | 8TB | USA, EU, Asia | Renueva a ~$49.99. Buenas specs pero caro al renovar. | | 8 | **Linode/Akamai** | Shared 8GB | **$48 USD** | 4 | 8GB | 160GB SSD | 5TB | USA (múltiples), São Paulo | Caro. Buena red. Ubicación São Paulo disponible. | | 9 | **Vultr** | Cloud Compute | **$48 USD** | 4 | 8GB | 256GB SSD | 4TB | USA (múltiples), São Paulo, Santiago | Caro. Buena red, muchas ubicaciones LATAM. | | 10 | **DigitalOcean** | General Purpose | **$63 USD** | 4 | 8GB | 25GB SSD | 4TB | USA, EU, SGP | Muy caro. Poco disco. No recomendado para este presupuesto. | | 11 | **IONOS** | VPS L | **$63.71 USD** | 4 | 8GB | 80GB | 2TB | USA, EU | Caro y poco tráfico. | --- ### Ranking recomendado #### 1. Oracle Cloud Free Tier (GRATIS) - Riesgo medio - 4 OCPU ARM + 24GB RAM + 200GB disco. **Inmejorable en specs.** - Ubicación São Paulo = latencia ~30ms a Buenos Aires - Riesgo: provisioning difícil, Oracle puede cambiar términos - Ideal como servidor principal si se consigue provisionar #### 2. Contabo Cloud VPS S ($4.95/mes) - MEJOR RELACIÓN PRECIO/RENDIMIENTO - 4 vCPU + 8GB + 100GB NVMe. Cumple todos los requisitos exactos. - Ubicación New York = latencia ~150ms a Buenos Aires (aceptable) - Sin setup fee, 32TB de tráfico - Overselling conocido pero para Flask+SQLite+Playwright es más que suficiente - **RECOMENDACIÓN PRINCIPAL** #### 3. Hetzner CAX21 ($7.10/mes) - MEJOR RENDIMIENTO/PRECIO EN EU - ARM Ampere, 4 vCPU + 8GB + 80GB. Disco algo corto (80GB). - Solo disponible en EU (Alemania/Finlandia). Latencia a ARG ~250ms. - Playwright funciona en ARM con Chromium. - Alternativa si se necesita más rendimiento real que Contabo. #### 4. Hetzner CPX32 ($14.90/mes) - MEJOR CON UBICACIÓN USA - AMD EPYC, 4 vCPU + 8GB + 160GB. Disponible en Ashburn (USA). - Rendimiento dedicado real. Buena opción si Contabo no convence. --- ### Recomendación final **Plan A:** Contabo Cloud VPS S en New York - $4.95/mes. Cumple requisitos, precio imbatible. **Plan B:** Oracle Cloud Free Tier en São Paulo - $0/mes. Si se logra provisionar, es la mejor opción por lejos (gratis + baja latencia). **Plan C:** Hetzner CAX21/CPX32 - $7-15/mes. Si se necesita rendimiento premium garantizado. Nota: Para migración, preparar scripts de deploy automatizado (Docker o manual), exportar SQLite, configurar Playwright headless, y redirigir DNS del bot de Telegram.

Claude · 18-02-2026 08:46hs
Scraping de Bluesky Completada

API publica sin auth. Monitorear cuentas de medios locales y nacionales en Bluesky (AT Protocol). Similar a Twitter pero sin restricciones de scraping.

Claude · 17-02-2026 15:05hs
Analisis de sesgo mediatico Completada

Comparar cobertura de la misma noticia entre medios: tono (positivo/negativo/neutro), enfoque (titulo, palabras clave), extension del texto. Detectar framing.

Claude · 17-02-2026 15:05hs
Resumen semanal automatico Telegram Completada

Enviar top 10 noticias de la semana, medio mas rapido, categoria mas activa. Automatico los domingos a la manana.

Claude · 17-02-2026 15:05hs
Mapa interactivo de noticias Completada

Pins geolocalizados en mapa de MdP. Usar NER (Named Entity Recognition) para extraer ubicaciones de las noticias y plotearlas en Leaflet.js.

Claude · 17-02-2026 15:05hs
Sistema de scoring personalizado Completada

Configuracion por usuario: ponderar categorias y fuentes segun preferencia. Permite que cada persona vea las noticias mas relevantes para ella.

Claude · 17-02-2026 15:05hs
Deteccion de noticias recicladas Completada

Alertar cuando un medio publica como nueva una noticia vieja (>48h). Comparar con DB historica usando embeddings y similitud temporal.

Claude · 17-02-2026 15:05hs
Panel de metricas de rendimiento Completada

Dashboard tecnico: tiempo de scraping por fuente, tasa de error, latencia IA, uso de DB, uptime del sistema, graficos historicos.

Claude · 17-02-2026 15:05hs
Dashboard de engagement por red social Completada

Graficos de engagement (likes, RT, comments) por plataforma y por cuenta. Ranking de cuentas mas virales. Tendencia semanal.

Claude · 17-02-2026 16:11hs
Notificaciones push en navegador Completada

Web push notifications para noticias de alto impacto (score >= 8). Service worker + notification API.

Claude · 17-02-2026 16:11hs
Exportar informes PDF semanal Completada

Generar PDF automatico con resumen semanal: top noticias, medios mas activos, categorias, graficos. Enviar por Telegram/email.

Claude · 17-02-2026 16:11hs
Deteccion de tendencias emergentes Completada

Detectar automaticamente temas que crecen en cobertura (mas de 3 medios en 2 horas). Alerta especial en Telegram.

Claude · 17-02-2026 16:11hs
Comparador historico entre medios Completada

Grafico temporal de largo plazo: que medio publica mas por categoria, velocidad promedio, cobertura mensual.

Claude · 17-02-2026 16:11hs
Modo kiosko para TV/pantalla Completada

Vista de solo lectura optimizada para pantalla grande: noticias rotando, mapa, estadisticas. Auto-refresh cada 30s.

Claude · 17-02-2026 16:11hs
Buscador semantico de noticias Completada

Buscar noticias por significado (embeddings + RAG). Ej: "accidentes en ruta 2" encuentra noticias relacionadas sin match exacto.

Claude · 17-02-2026 16:11hs
API publica REST Completada

Endpoints JSON publicos para consultar noticias, fuentes, tendencias. Rate limit y documentacion Swagger.

Claude · 17-02-2026 16:11hs
Widget de clima expandido Completada

Ampliar el widget de clima actual con pronostico de proximas horas, probabilidad de lluvia, y mapa radar del SMN. Util para contextualizar noticias de clima/eventos al aire libre.

Claude · 16-02-2026 23:25hs
Busqueda avanzada con operadores Completada

Mejorar la busqueda actual para soportar operadores tipo: "fuente:lacapital categoria:policial score:5 fecha:hoy". Parser simple que traduzca a filtros SQL. Autocompletado de fuentes y categorias.

Claude · 16-02-2026 23:25hs
Deteccion de exclusivas reales Completada

Identificar noticias que solo un medio cubrio durante 24+ horas (exclusiva real, no solo primicia temporal). Clasificar entre exclusivas propias vs temas que nadie mas cubrio. Seccion dedicada con stats por medio.

Claude · 16-02-2026 23:25hs
Mapa de calor de cobertura por hora Completada

Heatmap (estilo GitHub contributions) que muestre a que horas del dia cada medio publica mas noticias. Util para detectar patrones: que medios publican de madrugada, cuales solo en horario laboral, etc.

Claude · 16-02-2026 23:25hs
Notificaciones push en navegador Completada

Implementar Web Push Notifications para recibir alertas de noticias score 5 directamente en el navegador, sin depender solo de Telegram. Usar Service Worker + Push API.

Claude · 16-02-2026 23:25hs
Exportar comparador a PDF/CSV Completada

Boton para descargar las comparaciones como CSV (para analisis en Excel) o PDF (para compartir). Incluir stats, ranking y resumen diario. Util para reportes semanales.

Claude · 16-02-2026 23:25hs
Modo oscuro (dark mode) Completada

Toggle para cambiar entre modo claro y oscuro en toda la web. Guardar preferencia en localStorage. Usar variables CSS existentes para que sea facil de implementar cambiando los valores de --c-bg, --c-surface, --c-text, etc.

Claude · 16-02-2026 23:25hs
Dashboard de engagement RRSS Completada

Panel dedicado con metricas de engagement (likes, RT, comments) agregadas por cuenta y por dia. Graficos de evolucion, top posts virales, y comparativa entre cuentas. Permitiria ver que cuentas generan mas interaccion.

Claude · 16-02-2026 23:25hs
Aliases de medios en comparador Completada

Crear mapa de aliases para unificar variantes de nombres de medios (ej: "AHORA Mar del Plata", "@ahoramdp", "Ahora MdP" = mismo medio). Configurable desde /config como JSON.

Claude · 16-02-2026 23:04hs
Ranking de velocidad por medio Completada

Tabla colapsable que muestra que medios publican primero en promedio, con stats de veces primero/segundo, ventaja promedio en minutos y win rate porcentual.

Claude · 16-02-2026 23:04hs
Alertas Telegram de primicias perdidas Completada

Cuando el medio de referencia es el ultimo en cubrir una noticia que ya tienen 2+ medios (diferencia 30+ min), enviar alerta automatica al grupo de Telegram. Toggle on/off desde Config.

Claude · 16-02-2026 23:04hs
Filtro por categoria en comparador Completada

Dropdown para filtrar cards del comparador por categoria (politica, policiales, deportes, etc.). Se combina con el filtro de stat-boxes (primero/otro/simultaneo). Badge de categoria visible en cada card.

Claude · 16-02-2026 23:04hs