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:21hsResumen 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:21hsEnviar 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:21hsAgregar 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:21hsAgregar 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:15hsDescargar 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:15hsAgregar micro-barras horizontales en la seccion de categorias mostrando proporcion relativa de cada una, tipo sparkline visual
Claude · 19-02-2026 17:15hsMostrar variacion porcentual respecto al dia anterior (mas/menos noticias, nuevas categorias, etc) como indicadores delta junto al hero stat
Claude · 19-02-2026 17:15hsAgregar 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:48hsPermitir 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:48hsEndpoint /api/geo-noticias que retorne noticias con coordenadas en GeoJSON para integración con otros sistemas o mapas externos.
Claude · 19-02-2026 15:48hsOverlay 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:48hsImplementar 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:21hsCuando 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:22hsGenerar 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:22hsPermitir 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:22hsCuando 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:22hsAgregar 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:21hsGuardar 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:21hsAgregar un mini-grafico circular o barra mostrando el porcentaje de ideas completadas vs pendientes en el PDF exportado.
Claude · 19-02-2026 11:44hsSi una fuente tiene 5+ errores consecutivos, enviar alerta al chat personal de Telegram automaticamente.
Claude · 19-02-2026 11:44hsGenerar 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:21hsIncluir 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:44hsActualizar 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:07hsDespué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:07hsWidget 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:07hsCuando 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:16hsSi 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:16hsAgregar 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:16hsAgregar 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:16hsImportar 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:16hsGenerar 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 hsGrafico 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:35hsUsando 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:35hsImplementar Web Push Notifications para alertas keyword y noticias de alto impacto, usando Service Workers. Permitiria recibir alertas sin Telegram.
Claude · 18-02-2026 14:49hsCrear 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## 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:09hsPermitir 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:44hsRegistrar 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:13hsInvestigació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:31hsPá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:13hsUsando 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:40hsPermitir 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:15hsBotó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 hsImplementar 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:13hsCrear 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:13hsDashboard 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# 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:59hsAgregar 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:46hsCrear 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:46hsProblema 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# 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:46hsAPI 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:05hsComparar 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:05hsEnviar top 10 noticias de la semana, medio mas rapido, categoria mas activa. Automatico los domingos a la manana.
Claude · 17-02-2026 15:05hsPins 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:05hsConfiguracion por usuario: ponderar categorias y fuentes segun preferencia. Permite que cada persona vea las noticias mas relevantes para ella.
Claude · 17-02-2026 15:05hsAlertar cuando un medio publica como nueva una noticia vieja (>48h). Comparar con DB historica usando embeddings y similitud temporal.
Claude · 17-02-2026 15:05hsDashboard tecnico: tiempo de scraping por fuente, tasa de error, latencia IA, uso de DB, uptime del sistema, graficos historicos.
Claude · 17-02-2026 15:05hsGraficos de engagement (likes, RT, comments) por plataforma y por cuenta. Ranking de cuentas mas virales. Tendencia semanal.
Claude · 17-02-2026 16:11hsWeb push notifications para noticias de alto impacto (score >= 8). Service worker + notification API.
Claude · 17-02-2026 16:11hsGenerar PDF automatico con resumen semanal: top noticias, medios mas activos, categorias, graficos. Enviar por Telegram/email.
Claude · 17-02-2026 16:11hsDetectar automaticamente temas que crecen en cobertura (mas de 3 medios en 2 horas). Alerta especial en Telegram.
Claude · 17-02-2026 16:11hsGrafico temporal de largo plazo: que medio publica mas por categoria, velocidad promedio, cobertura mensual.
Claude · 17-02-2026 16:11hsVista de solo lectura optimizada para pantalla grande: noticias rotando, mapa, estadisticas. Auto-refresh cada 30s.
Claude · 17-02-2026 16:11hsBuscar noticias por significado (embeddings + RAG). Ej: "accidentes en ruta 2" encuentra noticias relacionadas sin match exacto.
Claude · 17-02-2026 16:11hsEndpoints JSON publicos para consultar noticias, fuentes, tendencias. Rate limit y documentacion Swagger.
Claude · 17-02-2026 16:11hsAmpliar 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:25hsMejorar 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:25hsIdentificar 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:25hsHeatmap (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:25hsImplementar 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:25hsBoton 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:25hsToggle 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:25hsPanel 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:25hsCrear 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:04hsTabla 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:04hsCuando 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:04hsDropdown 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