Track your BetMines football double bets
Translation pending
Sports & fitnessGitHub @grga0301OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Prr
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A fully local MVP app that scrapes today's football double from BetMines, tracks results, and displays historical performance in a modern dark-theme UI.
No cloud. No subscriptions. Runs entirely on your PC.
betmines.com/daily-bets-football.bat files for one-click operationnpm install
npx playwright install chromium
npm run db:migrate
This creates prisma/betmines.db — your local SQLite database.
npm run db:generate
npm run dev
Open http://localhost:3000 in your browser.
Option A — Double-click: SCRAPE.bat
Option B — Terminal:
npm run scrape
Option A — Double-click: RESOLVE.bat
Option B — Terminal:
npm run resolve
Open http://localhost:3000 or refresh the browser.
You can also click the ↓ Scrape Today and ⟳ Resolve Results buttons directly in the UI.
betmines-tracker/
├── prisma/
│ ├── schema.prisma # Database schema
│ └── betmines.db # SQLite database (auto-created)
├── scripts/
│ ├── scrape.ts # npm run scrape
│ └── resolve.ts # npm run resolve
├── src/
│ ├── app/
│ │ ├── api/
│ │ │ ├── doubles/ # GET /api/doubles
│ │ │ ├── scrape/ # POST /api/scrape
│ │ │ ├── resolve/ # POST /api/resolve
│ │ │ └── stats/ # GET /api/stats
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ └── page.tsx # Main UI
│ ├── components/
│ │ ├── DoubleCard.tsx # Per-double card
│ │ ├── Header.tsx # Top bar with action buttons
│ │ ├── StatsBar.tsx # Win rate / streak stats
│ │ └── StatusBadge.tsx # WIN / LOSS / PENDING pill
│ └── lib/
│ ├── db/
│ │ └── prisma.ts # Prisma singleton
│ ├── scraper/
│ │ └── betmines.ts # Playwright scraper
│ ├── services/
│ │ ├── doubleService.ts # DB operations
│ │ ├── resolveService.ts # Result resolution
│ │ └── resultEvaluator.ts # WIN/LOSS logic
│ └── types.ts # TypeScript types
├── SCRAPE.bat # Windows one-click scrape
├── RESOLVE.bat # Windows one-click resolve
├── .env # Environment variables
└── README.md
| Market | WIN condition |
|---|---|
| Over 2.5 | Total goals ≥ 3 |
| Over 1.5 | Total goals ≥ 2 |
| Under 2.5 | Total goals ≤ 2 |
| BTTS Yes | Both teams score |
| BTTS No | At least one team scores 0 |
| Home (1) | Home team wins |
| Draw (X) | Draw |
| Away (2) | Away team wins |
| Double Chance 1X | Home win or draw |
| Double Chance 12 | Home win or away win |
| Double Chance X2 | Draw or away win |
For a double to WIN, both selections must WIN.
| Command | Description |
|---|---|
npm run dev | Start UI at localhost:3000 |
npm run scrape | Scrape today's double |
npm run resolve | Check results for pending doubles |
npm run db:migrate | Initialize / migrate database |
npm run db:generate | Regenerate Prisma client |
npm run db:studio | Open Prisma Studio (DB browser) |
npm run db:reset | ⚠️ Wipe all data |
The scraper targets betmines.com/daily-bets-football using Playwright with Chromium in headless mode. It uses multiple CSS selector strategies for robustness.
If BetMines changes their layout, the scraper falls back to demo data (labelled in the terminal). In that case:
src/lib/scraper/betmines.tsparseSelectionsFromPage()You can also manually add entries via Prisma Studio:
npm run db:studio
To run automatically every day without opening a terminal:
Win+R → taskschd.msc)cmd.exe/c "cd /d C:\path\to\betmines-tracker && npm run scrape"Repeat for Resolve at 10:00 AM next day (or offset by hours).
model BetDouble {
id Int @id @default(autoincrement())
date String @unique // YYYY-MM-DD
totalOdds Float
status DoubleStatus @default(PENDING)
createdAt DateTime @default(now())
selections BetSelection[]
}
model BetSelection {
id Int @id @default(autoincrement())
homeTeam String
awayTeam String
market String
line Float?
odd Float
league String
country String
kickoff String
resultStatus SelectionStatus @default(PENDING)
homeScore Int?
awayScore Int?
}
"Cannot find module @prisma/client"
npm run db:generate
"Database file not found"
npm run db:migrate
"Playwright browser not installed"
npx playwright install chromium
Scraper finds no data
src/lib/scraper/betmines.tsBuilt for local use only. No data leaves your machine.