NVRValueBet
Una plataforma que recopila cuotas de fútbol de varias casas de apuestas y de un exchange, las alinea en el mismo partido y el mismo mercado, y muestra dónde un precio se aleja de una referencia de margen bajo. No realiza apuestas.
Repositorio privado
01Qué hace
Cada pocos minutos recopila precios de casas de apuestas francesas e internacionales y de un exchange de apuestas, y empareja el mismo evento entre todas. Quita el margen de la casa a los precios de referencia para obtener cuotas justas, y luego compara el mejor precio francés con esa referencia. El resultado es un tablero de diferencias, donde cada precio se marca como reciente o caducado. Es una herramienta de señales: nada en ella está conectado a dinero real.
02Qué construí
Un servicio en Python sobre FastAPI con un recolector en segundo plano, un adaptador por casa y una capa que reduce equipos, competiciones y mercados a una sola identidad. La API sirve un listado paginado, facetas de filtro, una página de partido, un tablero, un informe de cobertura y una auditoría de datos sospechosos, además de una segunda superficie con la forma de una API comercial de cuotas. Al frente hay una aplicación React Native hecha con Expo y publicada como web, en español, inglés y francés.
03Lo difícil
El mismo partido se escribe distinto en cada casa, así que la identidad hace casi todo el trabajo: alias para equipos y competiciones, protecciones contra mezclar equipos de distinto género o plantilla, y un identificador canónico por casa. La recolección funciona con un presupuesto por casa y un cortacircuitos que espera tras fallos repetidos, y los partidos cercanos al inicio se actualizan más a menudo que los lejanos. La auditoría señala eventos duplicados, parejas de equipos imposibles, horas de inicio incoherentes y cuotas atípicas.
04Cómo funciona
La API corre como servicio systemd en un VPS Linux pequeño, enlazada a la interfaz de bucle local. La aplicación web está en Cloudflare Pages, una Pages Function reenvía sus llamadas por un túnel, y una sola aplicación de Cloudflare Access protege ambas, de modo que la API nunca es pública. Los precios viven en SQLite, y el listado se sirve desde una caché que se construye una vez por ciclo de recolección. GitHub Actions ejecuta las pruebas y publica cada parte con cada push a main. El proyecto nació de un conjunto de scrapers y hojas de cálculo donde cada paso era un copiar y pegar manual, que documenté antes de reconstruirlo como servicio.
Cómo está construido
- Alguien abre el tablero
- Un ciclo de recolección
- Cuotas justas y diferencias
- Un push a main
Cliente
Web por ahora
Borde
Cloudflare
Backend
Un servicio Python
Almacén
Fuentes
Fuera de mi control
Entrega
GitHub Actions a producción
Seleccione una parte del diagrama para ver qué hace. Cada color es un flujo a través del sistema.