← Todos los proyectos
Proyectos 03/Freelance · Python, TypeScript

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

  1. Cliente

    Web por ahora

  2. Borde

    Cloudflare

  3. Backend

    Un servicio Python

  4. Almacén

  5. Fuentes

    Fuera de mi control

  6. 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.

© 2026 Benoit Ardiet · Quito, Ecuador · UTC−5GitHubLinkedInSin rastreo, sin cookies.