28 repositorios evaluados contra la infraestructura y los proyectos reales de Villavo Vende — con veredicto de adopción y qué extraer de cada uno.
Dos ejes distintos: adoptar (instalarlo y usarlo) y minar (leerlo como fuente de datos o arquitectura, sin instalar nada). Varios que no se instalan sí valen como fuente.
| Repo | Qué es | Veredicto | Por qué |
|---|---|---|---|
| hyperframes | HTML+CSS → MP4 determinista | ADOPTAR | Apache 2.0 sin las tarifas comerciales de Remotion. Ya instalado vía OpenMontage. |
| OpenMontage | Producción de video agéntica | ADOPTAR | Instalado y verificado. 13 pipelines listos. |
| claude-seo | 25 skills SEO + 18 subagentes | ADOPTAR | seo-local cubre GBP y map pack, y detecta el vertical Real Estate. Núcleo gratis. |
| marketingskills | 50 skills de marketing | PARCIAL | Cero dependencias. Instala 5-8, no 50 — y excluye las 5 que chocan con claude-seo. |
| Leaflet | Librería de mapas | SUPERADO | Estable sigue en 1.9.4 de 2023; plugins clave abandonados. Ver MapLibre. |
| maplibre-gl-js CLAUDE | Mapas vectoriales WebGL | ADOPTAR | BSD-3, 4 releases solo en agosto, clustering nativo, estilo = JSON editable. |
| beszel CLAUDE | Métricas de host multi-servidor | ADOPTAR | 4,2 MB de RAM medidos. Mata las falsas alarmas de disco. |
| uptime-kuma CLAUDE | Monitor de endpoints y certs | ADOPTAR | Reemplaza tus scripts de DNS→SSL. Usa :2-slim: el normal pesa 2,48 GB. |
| backrest CLAUDE | restic con UI web | ADOPTAR | La retención es campo obligatorio del formulario, no un flag que se olvida. |
| odoo | ERP completo | MINAR | No adoptar. Pero su l10n_co es LGPL: extrae el PUC y las retenciones. |
| erpnext | ERP completo | DESCARTAR | Define para Colombia solo VAT 16% — derogado desde 2017. |
| twenty | CRM open source | GUARDAR | Vivo y bueno, pero ya tienes CRM26 a tu medida. Mina su modelo de objetos. |
| monica | PRM personal | DESCARTAR | 0 commits en 12 meses y un PR de XSS sin mergear. Y es para amigos, no propiedades. |
| LocalAI | API OpenAI-compatible local | GUARDAR | Consolidaría Ollama+Whisper bajo una API. Útil cuando toque limpiar, no ahora. |
| SurfSense | Research + conectores | MINAR | Monta docker.sock, licencia BSL, v0.0.39. Roba el catálogo de conectores. |
| last30days | Motor de research de tendencias | MINAR | Corpus en inglés, X y TikTok piden cookies. Roba su patrón de escribir skills. |
| CC-Game-Studios | 49 agentes de gamedev | MINAR | 1 autor, parado desde mayo. Pero es diseño de orquestación → La Oficina. |
| Anthropic-Cybersec | 818 skills de seguridad | MINAR | No es de Anthropic (lo admite). Usa solo el subconjunto defensivo. |
| godot | Motor de videojuegos | DESCARTAR | Legítimo, pero el editor pide escritorio y Claude no puede operarlo. Usa Phaser.js. |
| system-design-primer | Guía de diseño de sistemas | MINAR | No es software. Material de estudio, cero recursos. |
| google-map-react | Wrapper React de Google Maps | DESCARTAR | Zombi: sus últimos 4 commits son Dependabot. Código sin tocar desde mayo 2025. |
| gmaps-services-python | Cliente HTTP de servidor | DESCARTAR | No dibuja mapas, y es Python: no encaja en tu stack Next.js. |
| awesome-sys-trading | Lista curada de estrategias | MINAR | Bibliografía. Su meta-dato vale más que cualquier estrategia suelta. |
| Lean | Motor de backtest y ejecución | DESCARTAR | Slippage 0 por defecto, no modela swap, no habla MT5. Sería un downgrade. |
| freqtrade | Bot de cripto | DESCARTAR | Solo cripto: 4 de tus 6 patas quedan fuera. Backtester inferior al tuyo. |
| AI-Trader | Agentes LLM que operan | DESCARTAR | Sesgo de anticipación no resuelto. Ningún agente LLM genera alpha significativo (p > 0,34). |
| TradingAgents-CN | Fork chino de TradingAgents | DESCARTAR | Sin backtest. Reportaba PB 0,42x cuando era 3,46x y beneficio con error de 4 órdenes de magnitud. |
| Vibe-Trading | Framework de trading con LLM | MINAR | Nunca como validador. Roba su quantlib y el desglose de costes por mercado. |
La etiqueta CLAUDE marca lo que no venía en tu lista: son propuestas mías a partir de mirar las dos máquinas.
Todo junto suma menos RAM que 2bots-postgres él solo (216 MB).
| Qué | Dónde | RAM | Resuelve |
|---|---|---|---|
Uptime Kuma :2-slim | sede 1 | 104 MB | "App ausente" ×2, certs SSL, 30 sitios |
| Beszel hub + agente | sede 1 | 34 MB | "Disco lleno" ×5 |
| Beszel agente | sede 2 | 4,2 MB | Vigilar el negocio sin pesarle |
| Backrest + restic | ambas | ~40 MB | Los dos fallos de backup ya vividos |
| Dozzle (opcional) | sede 2 | 12,5 MB | Logs de los 28 contenedores, evento restart |
Dos fallos ya ocurridos lo motivan: el Supabase de la app de inglés se perdió entero sin copia, y los backups del CRM sin retención llenaron el disco al 83%. Donde hubo backup no hubo retención; donde importaba no hubo backup.
2bots-postgres pesa 16 GB, pero 14 GB son la tabla ohlcv — velas de Dukascopy, redescargables. Excluyéndola y excluyendo los modelos de Ollama/Whisper, lo verdaderamente irremplazable en sede 1 son ~3 GB, no 20.backrest (restic con UI)prune y check desde la UI.restic check --read-data-subset=10% semanal detecta bit rot sin pagar el egreso completo.Descartados con motivo: Duplicati (reportes de reconstrucción de BD de 11 días en un restore — justo el escenario para el que compras backups) · autorestic (sin releases desde 2024) · borg (no habla S3) · offen (sin dedup ni verificación, y su borrado por edad puede llevarse ficheros ajenos del bucket).
pg_dump. Y usa -Fp (texto plano), no -Fc: el formato custom sale comprimido y rompe la deduplicación de restic — cada dump diario se guardaría entero. En plano, 30 dumps ocupan poco más que uno.Qué respaldar — sede 1 tiene 4 Postgres y sede 2 tiene 3 Postgres + 1 MariaDB. Un dump por motor, más configs, volúmenes de sesiones de WhatsApp, Nginx y certificados.
# Retención — 18 snapshots vivos, techo predecible restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 1 --prune # Guardarraíl que sale de tu propia historia: aborta si el disco pasa del 85% [ "$(df --output=pcent / | tail -1 | tr -dc 0-9)" -lt 85 ] || exit 1
~18 GB únicos → ~25-35 GB de repositorio con dedup.
~$0,18/mes. Los primeros 10 GB son gratis y el egreso es gratis hasta 3× lo almacenado.
Es gratis, pero no protege del fallo que ya viviste dos veces: perder el proveedor o la cuenta. Y sede 2 solo tiene 66 GB libres. Sirve como tercera copia, nunca como la única externa.
supabase db dump y guardar copias off-site. El dump diario sirve además de prueba de vida: si falla la conexión, es que el proyecto se pausó y tienes días para reaccionar. Ojo: Storage no entra en db dump.pg_stat_user_tables. Si devuelve tablas con filas, sirve. Anota la fecha del último ensayo superado.Hoy el monitoreo lo hace un LLM leyendo salidas de shell. Ha producido 11 falsas alarmas documentadas. Eso no se arregla con mejor prompt.
docker stats. El benchmark se desmontó después y el host quedó verificado limpio.| Herramienta | RAM medida | Imagen | Veredicto |
|---|---|---|---|
| beszel-agent | 4,2 MB | 13,5 MB | SÍ |
| gatus | 8,0 MB | 77 MB | alternativa |
| dozzle | 12,5 MB | 93 MB | opcional |
| beszel (hub) | 30,2 MB | 43,7 MB | SÍ |
| glances | 86,5 MB | 179 MB | no |
| uptime-kuma | 103,7 MB | 2,48 GB | SÍ (slim) |
| netdata | 141,7 MB* | 1,31 GB | no |
* recién arrancado. Sus propias docs dan 250-350 MB en producción, y su config efectiva reserva 3 GiB de métricas + metadatos ≈ 4 GiB de disco por nodo.
:2-slim (~600 MB, misma RAM). (2) Netdata sostiene 13-20% de CPU durante el arranque y reserva 4 GiB de disco por nodo.| Falsa alarma de Hermes | Qué la reemplaza |
|---|---|
| "Disco lleno" ×5 | Beszel lee el % real, con umbral y duración mínima |
| "Faltan apps de pm2" (PATH de nvm) | Uptime Kuma usa pm2 jlist (JSON), no pm2 ls |
| "App ausente" ×2 | Monitor HTTP directo contra la URL |
| "Contenedor Restarting" (columna ↺ mal leída) | Beszel da estado real; Dozzle alerta del evento restart |
pm2 jlist dentro del proceso de Uptime Kuma, así que en Docker no vería el PM2 del host. Y el cron que lo alimente debe usar la ruta completa ~/.local/bin/pm2 — es exactamente la trampa que tumbó a Hermes.Se midió la cobertura real de Villavicencio en OpenStreetMap vía Overpass API. El resultado decide la arquitectura.
Pruebas reales contra Nominatim: Calle 40 #30-25 ignora el "#30-25" y devuelve dos Calle 40 distintas en barrios distintos, a 1,5 km una de otra. Barrio Barzal, Villavicencio — un barrio conocidísimo — no devuelve nada.
Calle X # Y-ZZ codifica un cruce, algo que ningún geocodificador genérico interpreta. Cambiar de proveedor no arregla que los datos no existen.react-map-gl — BSD-3, clustering nativo, estilo = JSON editable (mapas personalizados de verdad)ST_DWithin para "propiedades a 1 km", ST_Contains para "todo lo del barrio Barzal"tile.openstreetmap.org en producción comercial — su política dice que el acceso puede retirarse en cualquier momento.La contabilidad va en software dedicado y la revisa la contadora. Ese dato cierra la decisión.
l10n_co. Si la contabilidad vive fuera, se evapora entero.account se llama literalmente 'Invoicing': Community trae facturación, no contabilidad. account_accountant es Enterprise.sale_subscription y sale_renting son Enterprise → Community no tiene facturación recurrente nativa.OCA/vertical-realestate y OCA/vertical-rental están muertos (ramas vacías).commission|owner|payout|landlord sobre las 468 rutas de PropMS → 0 archivos. Si hay que programar eso igual, la pregunta honesta es cuánto ERP quieres cargar alrededor.Su localización colombiana es LGPL-3, la mantiene Odoo S.A., y son CSV planos:
account.account-co.csv → 379 cuentas del PUC colombianoaccount.tax-co.csv → retenciones con sus tarifas, incluida "3.5% RteFte Arrendamientos Bienes Inmuebles", las 6 de ReteICA, ReteIVA e IVAExtraerlo y sembrarlo en el Postgres de la app te da el trabajo fiscal hecho, sin cargar el ERP.
hyperframes ADOPTAR ya instaladoApache 2.0, de HeyGen. Convierte HTML+CSS con atributos de timing en MP4 determinista (Chrome headless + FFmpeg). Es "Remotion pero con HTML plano", sin las tarifas comerciales de Remotion — esa diferencia de licencia es dinero real.
Ya quedó cacheado por el make setup de OpenMontage (runtime_available=True, v0.8.22). No pide GPU. Determinista: mismo input = mismos frames, o sea que sirve en cron.
Aviso: v0.8.x, API todavía en movimiento (~6 meses de vida, pero 70-500 commits por semana).
claude-seo ADOPTAR25 skills, 18 subagentes, 53 scripts. MIT. Lo relevante: seo-local cubre Google Business Profile, NAP, citations y map pack — el juego exacto de un inmobiliario en Villavicencio — y detecta el vertical Real Estate explícitamente, recomendando schema RealEstateAgent + RealEstateListing. Núcleo gratis con Playwright local. Está al día: descarta HowTo y FAQ como deprecados en mayo 2026.
Avisos: sus estadísticas vienen de blogs de agencias (Whitespark, BrightLocal), plausibles pero no verificables. Y su extensión de Ahrefs pide token de la API de Ahrefs, producto aparte de tu plan web.
marketingskills PARCIAL50 skills, MIT, cero dependencias (markdown puro). Las sustanciosas: video, ads, ad-creative, ai-seo, content-strategy, marketing-plan.
No instales las 50: 50 descripciones compitiendo por activarse contra tus 8 skills de diseño es ruido garantizado. Y seo-audit, ai-seo, schema, programmatic-seo y site-architecture chocan con claude-seo — exclúyelas.
Calibrado para SaaS B2B en inglés y mercado US. Para inmobiliaria colombiana es material de partida, no receta.
last30days MINAR, no instalarTécnicamente el mejor hecho de los tres (motor Python de 165 KB con tests reales). Pero es research de tendencias globales en inglés, y X y TikTok —las fuentes que te servirían— exigen cookies de navegador logueado o llaves de pago: el mismo muro headless que te bloqueó con NotebookLM. Su SKILL.md pesa 229 KB y se come contexto cada vez que se activa.
Tienes motor propio con Dukascopy desde 2012, 6 patas validadas, protocolo Davey (walk-forward + Monte Carlo) y swap modelado por trade. La pregunta no es si son buenos repos, sino qué añaden.
awesome-systematic-trading MINAR — el único con valorDicen haber replicado 4.843 papers. Sus propios resultados son el dato más valioso de todo el bloque:
La mitad del corpus académico publicado no se distingue de cero. Es evidencia dura de que tu protocolo Davey está bien calibrado, y la mejor vacuna contra copiar un paper con Sharpe bonito.
Expectativas bajas: su catálogo es factor investing cross-sectional mensual, casi sin solape con timing direccional sobre 6 CFDs, y sus Sharpe son brutos de costos. Lo que sí ofrece, alineado con tu regla de "no probar más activos sin tesis estructural nueva", es diversificar por tipo de edge en vez de por activo: carry FX, term premium en bonos, momentum de commodities.
Lean DESCARTARApache 2.0 limpia, sin obligaciones por operar en vivo — ese miedo es infundado. El motivo es técnico: slippage cero por defecto, fee genérico en CFD/FX, no modela swap overnight, y sin WFO ni Monte Carlo. Te haría retroceder en rigor. Y no habla MT5.
Solo si algún día entras a equities US point-in-time con delistings, u opciones y futuros con rolls. Ahí sí te ahorra un año.
freqtrade DESCARTARSolo cripto: 4 de tus 6 patas fuera por diseño, y no habla MT5. Donde solaparía, su backtester es inferior: no modela slippage ni spread, y su doc admite que fijar funding rates a mano "hará que tus backtests sean inexactos".
Reciclable gratis: sus chequeos lookahead-analysis y recursive-analysis. Si tu motor no verifica que un indicador dé el mismo valor con 500 velas de warm-up que con 5.000, son 30 minutos bien invertidos.
AI-Trader, TradingAgents-CN y Vibe-Trading. Los tres se descartan como herramienta, y uno con una prueba que no admite discusión.
El primer autor del paper respondió en el issue #805 (13-jun-2026) admitiendo que la fuga a nivel de modelo es "una limitación fundamental que un cambio de código no puede eliminar del todo". La afirmación del paper de "eliminating look-ahead bias" no se sostiene, y lo dice la fuente.
Debajo hay seis fugas de datos documentadas — noticias de 2025-2026 dentro de backtests de 2022, Reddit y StockTwits de hoy en análisis históricos, macro del FRED aún no publicada, memoria inyectando lecciones de fechas futuras — todas parcheadas en 2026, más de un año después de publicar los números.
Medición concreta: para una decisión del 31-mar-2023, GDPC1 valía 19.924 entonces y la API devuelve 21.932 hoy.
Y el código de backtesting nunca se publicó. El issue que lo pide lleva más de un año sin una sola respuesta. Los números no son solo débiles: no son auditables.
Aviso de precisión: Glasserman & Lin suele citarse mal. No publican cifra de inflación de Sharpe. Si alguien te lo cita como "el leakage infla un X%", está citando mal el paper.
Para consultar cuando vayas a construir un módulo nuevo. No es "instalar", es "esto ya está resuelto en algún lado".
| Cuando construyas… | Mira… | Qué te llevas |
|---|---|---|
| La app de arriendos | Odoo l10n_co | 379 cuentas del PUC + tabla de retenciones colombianas, LGPL, en CSV plano |
| La app de arriendos | OCA/contract | Cómo modelar contratos recurrentes y reajuste de precios |
| Turnos de La Oficina | CC-Game-Studios | Director gates, review full/lean/solo, hooks de auditoría, comandos encadenados |
| Skills propias | last30days | Convertir post-mortems en reglas dentro del SKILL.md; guardarraíles anti-alucinación |
| Skills propias | marketingskills | El patrón evals/evals.json: prompts de prueba con assertions verificables |
| Contexto de marca | marketingskills | .agents/product-marketing.md — se escribe una vez y alimenta las 50 skills |
| Research de competencia | SurfSense | Catálogo de conectores (reseñas de Google Maps, YouTube, TikTok) por MCP, sueltos |
| Hardening del VPS | Anthropic-Cybersec | Las ~466 skills defensivas: auditoría cloud, análisis de logs, hardening |
| Reels inmobiliarios | hyperframes | Render determinista en el VPS, sin depender del PC Windows |
| Juegos para Gaby | Phaser.js | Mecánicas 2D dentro de tu Next.js, sin editor gráfico ni salir del stack |
| Costos de backtest | Lean | Arquitectura FeeModel/SlippageModel por broker |
| Validación de indicadores | freqtrade | lookahead-analysis y recursive-analysis como conceptos |
| Mapa de propiedades | MapLibre + PostGIS | Clustering nativo, estilo JSON, consultas geoespaciales gratis |
Consolidar esto libera más recursos que todo lo que instalaríamos junto.
Corre una instancia en cada sede. La de sede 2 (251 MB, con su propio Postgres 16) parece la que de verdad usas; la de sede 1 está en ~/proyectos/n8n. Decide cuál es la buena y apaga la otra.
shared-whisper consume 1,7 GB en sede 2 — el mayor consumidor de la máquina que menos RAM libre tiene (7,4 GB). Y aquí tienes Speaches haciendo lo mismo. Consolidarlo libera casi un cuarto de la holgura de sede 2.
Varios llevan 6 semanas de uptime, o sea 6 semanas sin parches de imagen. wordpress:php8.3-apache y mariadb:11 expuestos a internet en esa situación es el mismo riesgo que descartó a Monica. Instala diun, no watchtower: quieres enterarte, no que te reinicie el bot del captador a las 3 a.m.
Keys en ~/.config/api-keys/, en el .env de cada proyecto, y ahora uno nuevo en OpenMontage. Sin rotación. Candidatos: infisical, vaultwarden, o sops + age para cifrarlos en el propio git.
Cada dominio nuevo en sede 2 es trabajo manual y un certificado que vigilar. nginx-proxy-manager daría UI sobre lo que ya tienes; traefik o caddy-docker-proxy autodescubrirían por labels.
bun; instalado 1.4.0 y enlazado en ~/.local/bin/ para que lo vean los subprocesos — la misma trampa del PATH de nvm que tumbó a Hermes. Bot dedicado @vpsaeljobot, token validado, .env en permisos 600. Queda pendiente el MCP de GitHub (cabecera de autorización mal formada).