This commit is contained in:
lordpietre 2026-04-01 00:42:19 +00:00
parent 313a7c8b19
commit 0fb90c7635
3 changed files with 115 additions and 1 deletions

110
AGENT.md Normal file
View file

@ -0,0 +1,110 @@
# RSS2 - Agente de Mejora de Software
## Visión General del Proyecto
Aplicación de agregación y procesamiento de noticias RSS con capacidades de IA.
### Stack Tecnológico
| Capa | Tecnología |
|------|-------------|
| Frontend | React 18 + TypeScript + Vite + TailwindCSS + React Query + React Router |
| Backend API | Go 1.25 + Gin |
| Workers Backend | Go 1.25, Python 3.x |
| Base de datos | PostgreSQL 18 |
| Caché | Redis 7 |
| Búsqueda vectorial | Qdrant |
| IA/LLM | Ollama, HuggingFace (NLLB, BERT, sentence-transformers) |
| Orquestación | Docker Compose |
| Monitoreo | Prometheus + Grafana + cAdvisor |
### Arquitectura de Workers
- **rss-ingestor-go**: Ingestión de feeds RSS
- **scraper**: Extracción de artículos de URLs
- **discovery**: Descubrimiento de nuevos feeds
- **topics**: Matching de temas y países
- **related**: Noticias relacionadas
- **langdetect**: Detección de idioma
- **translator**: Traducción con NLLB (CPU/GPU)
- **embeddings**: Generación de vectores semánticos
- **ner**: Extracción de entidades nombradas
- **cluster**: Agrupación de noticias
- **llm-categorizer**: Categorización con Ollama
- **wiki-worker**: Wikipedia info y thumbnails
---
## Recomendaciones de Mejora
### 1. Infraestructura y DevOps
- **Añadir CI/CD**: Pipeline con GitHub Actions para testing y deploy automático
- **Health checks**: Implementar health checks en todos los workers (no solo en db/redis)
- **Logging centralizado**: Integrar Loki o ELK stack para agregación de logs
- **Variables de entorno**: Mover configuración hardcodeada (ej: `translator_type: cpu`) a variables与环境
### 2. Backend Go
- **Estructura**: El proyecto no tiene estructura clara de packages (cmd/ internal/)
- **Testing**: No se observan tests unitarios en el backend
- **Config**: Usar Viper o library dedicada para configuración
- **Graceful shutdown**: Implementar en todos los workers
- **Migraciones**: Usar herramientas como golang-migrate en lugar de crear tablas en initDB()
### 3. Frontend
- **E2E Testing**: Añadir Playwright o Cypress
- **State Management**: Considerar Zustand o Jotai para estado global
- **Componentes**: Crear library de componentes reutilizables
- **i18n**: Preparar para multiidioma
- **PWA**: Añadir Service Worker para offline
### 4. Base de Datos
- **ORM/Query Builder**: Considerar GORM o sqlc para mejor mantenimiento
- **Índices**: Verificar que todos los campos de búsqueda tengan índices
- **Migrations**: Sistema formal de migraciones
- **Connection Pooling**: Configurar apropiadamente
### 5. Workers y Procesamiento
- **Colas**: Implementar RabbitMQ o Redis Streams para jobs asíncronos
- **Retry Logic**: Sistema robusto de reintentos con backoff exponencial
- **Dead Letter Queue**: Manejo de trabajos fallidos
- **Métricas por worker**: Prometheus metrics específicas por worker
- **Rate Limiting**: Protecciones contra rate limits de APIs externas
### 6. Seguridad
- **Rate limiting API**: Implementar en endpoints sensibles
- **Input Validation**: Usar biblioteca como go-playground/validator
- **CSRF Protection**: Añadir tokens CSRF
- **Security Headers**: Implementar todos los headers de seguridad
- **Audit Logs**: Logging de acciones administrativas
### 7. Rendimiento
- **Caching**: Cachear más endpoints con Redis (ej: estadísticas)
- **Pagination**: Implementar cursor-based pagination para grandes datasets
- **Database Connection Pooling**: Configurar límites apropiados
- **Image Optimization**: Comprimir imágenes antes de servir
### 8. Documentación
- **API Docs**: OpenAPI/Swagger para la REST API
- **Arquitecture Decision Records (ADRs)**: Documentar decisiones técnicas
- **Runbooks**: Documentación de operaciones
### 9. Monitorización y Alertas
- **Alertas**: Configurar alertas en Grafana para workers caídos
- **Dashboards**: Dashboard específico por worker
- **Tracing**: Añadir OpenTelemetry para distributed tracing
### 10. User Experience
- **Dark Mode**: Soporte completo
- **Keyboard Shortcuts**: Mejorar navegación
- **Infinite Scroll**: Para feeds grandes
- **Real-time Updates**: WebSockets para nuevas noticias

View file

@ -78,7 +78,7 @@ services:
DB_USER: ${DB_USER:-rss}
DB_PASS: ${DB_PASS}
RSS_MAX_WORKERS: 100
RSS_POKE_INTERVAL_MIN: 15
RSS_POKE_INTERVAL_MIN: 60
TZ: Europe/Madrid
networks:
- backend

View file

@ -0,0 +1,4 @@
-- Migration: Reset all feeds to inactive with 0 attempts
-- Run this to set all feeds as inactive (activo = false) and reset fallbacks to 0
UPDATE feeds SET activo = false, fallos = 0;