Dugout Value
Baseball research on pitching, hitting, and projections, plus tools for comparing players, contracts, and trade value.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Handicappers platform
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
La plataforma de pronósticos hípicos de Venezuela. Desafío Hípico conecta a los mejores expertos (handicappers) con los aficionados a las carreras de caballos en Venezuela. Los handicappers publican sus picks y análisis; los usuarios los consumen con un sistema simple de créditos llamados Golds. Todo está construido para el celular, pensado para el venezolano que lleva su teléfono al hipódromo. En producción: desafiohipico.com — Vercel + MongoDB Atlas Contexto técnico completo → CONTEXT.md查看完整 README ↗
La plataforma de pronósticos hípicos de Venezuela.
Desafío Hípico conecta a los mejores expertos (handicappers) con los aficionados a las carreras de caballos en Venezuela. Los handicappers publican sus picks y análisis; los usuarios los consumen con un sistema simple de créditos llamados Golds. Todo está construido para el celular, pensado para el venezolano que lleva su teléfono al hipódromo.
En producción: desafiohipico.com — Vercel + MongoDB Atlas Contexto técnico completo →
CONTEXT.md
Antes de Desafío Hípico, los pronósticos de los expertos hípicos venezolanos estaban dispersos: algunos en Twitter/X, otros en YouTube, otros en canales de Telegram privados. No había una fuente única, no había historial de aciertos, y el usuario no sabía en quién confiar.
La plataforma resuelve tres cosas:
/pronosticos, selecciona la jornada y la carrera| Capa | Tecnología |
|---|---|
| Framework | Next.js 15 App Router + Turbopack |
| Base de datos | MongoDB Atlas (Mongoose 8) |
| Autenticación | Auth.js v5 beta (NextAuth) |
| Estilos | Tailwind CSS v4 |
| Lenguaje | TypeScript 5 (strict, 0 errores) |
| IA | Gemini 2.0 Flash via OpenRouter |
| Resend API (magic links) | |
| PDF Parsing | pdf-parse v1.1.1 (server-side, CJS) |
| Deploy | Vercel |
npm install
npm run dev
Crea .env en la raíz:
MONGODB_URI="mongodb+srv://..."
AUTH_SECRET="openssl rand -base64 32"
AUTH_URL="http://localhost:3000"
AUTH_GOOGLE_ID="xxxx.apps.googleusercontent.com"
AUTH_GOOGLE_SECRET="GOCSPX-xxxx"
RESEND_API_KEY="re_xxxx"
RESEND_FROM="Desafío Hípico <[email protected]>"
NEXT_PUBLIC_WHATSAPP_NUMBER="584120000000"
OPENROUTER_API_KEY="sk-or-xxxx"
/pronosticos — dashboard principal: pronósticos por carrera, ordenados por efectividad (E1), auth gate, 2 gratis por jornada, pago con Golds, badge de ranking, estadísticas en vivo/resultados — resultados oficiales con posiciones, tiempos, dividendos completos y video resumen YouTube; ordenados por fecha/ranking — ranking público de handicappers con métricas E1/E1-2/E1-3/E-General, ordenable, sin login/handicapper/[id] — perfil público de cada experto con historial de aciertos y desglose por hipódromo/programa/[meetingId] — inscritos públicos con preview borroso de pronósticos (CTA para registro)/retirados — caballos retirados del día con SEO/admin/intelligence): el staff pega texto (tweet, WhatsApp, transcripción de YouTube) y la IA extrae los pronósticos, los cruza con los inscritos reales, muestra tabla de revisión, y los publica/admin/ingest): el staff sube imagen del boletín INH y Gemini Vision extrae posiciones, tiempos y dividendos — tabla editable antes de confirmar10 tipos de notificación in-app: recargas aprobadas/rechazadas, nuevo pronóstico de experto seguido, nueva jornada disponible, Gold bajo, etc.
SportsEvent)/api/og/forecast)Marquee sticky bajo el header en /pronosticos que muestra el "fijo del día" de cada handicapper para la carrera actualmente seleccionada. Se actualiza automáticamente al cambiar de carrera.
src/
├── app/
│ ├── page.tsx # Home
│ ├── pronosticos/page.tsx # Dashboard principal
│ ├── resultados/ # Resultados de carreras
│ ├── ranking/page.tsx # Ranking público
│ ├── handicapper/[id]/ # Perfil público handicapper
│ ├── programa/[meetingId]/ # Inscritos públicos
│ ├── retirados/ # Retirados del día
│ ├── admin/ # Panel admin
│ │ ├── ingest/ # PDFs + resultados imagen
│ │ ├── intelligence/ # Ingestor Gemini pronósticos
│ │ ├── topup/ # Recargas
│ │ ├── meetings/ # Video resumen jornadas
│ │ ├── users/ # Usuarios y roles
│ │ └── exchange-rate/ # Tasa BCV
│ └── api/ # Todos los endpoints
├── models/ # Mongoose schemas
├── services/ # Lógica de negocio
│ ├── pdfProcessor.ts # Parser INH + HINAVA
│ ├── ingestService.ts # Upsert idempotente
│ ├── forecastAccessService.ts # Freemium + Golds
│ ├── forecastStatsService.ts # Métricas handicappers
│ ├── notificationService.ts # Central de notificaciones
│ └── followService.ts # Follow/unfollow
├── components/
│ ├── ExpertTickerBar.tsx # Cintillo sticky de expertos
│ ├── TopUpModal.tsx # Recarga de Golds (4 pasos)
│ └── NotificationBell.tsx # Campana con badge
└── lib/
├── mongodb.ts # Conexión singleton
└── constants.ts # Configuración central
# Verificar TypeScript (debe dar 0 errores)
npx tsc --noEmit
# Backfill de pronósticos históricos
npx tsx scripts/backfill-forecasts.ts
# Test ranking
curl http://localhost:3000/api/handicapper/ranking
| Rol | |
|---|---|
[email protected] | admin (auto-asignado en cada login) |
| Cualquier Google | customer |
Documentación técnica detallada → CONTEXT.md