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