Hillfinder
Hillfinder helps cyclists, skateboarders, and explorers find smooth, scenic rides — and save or share them with friends.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Formula 1 telemetry and analytics.
Lap-by-lap driver comparison, tyre strategy modelling, ML driver ratings, and an AI race analyst.
Live app ·
API
Most F1 sites give you tables. RaceDelta computes the differences between drivers and explains where they come from.
Root Directory race-delta-backend
Dockerfile Path ./Dockerfile
Health Check /api/health檢視完整 README ↗Most F1 sites give you tables. RaceDelta computes the differences between drivers and explains where they come from.
Any two drivers, four ways:
| Mode | What it answers |
|---|---|
| Season | Head-to-head on the latest race, plus cumulative points across the year |
| Race | One Grand Prix, lap by lap |
| Track | Every visit to a single circuit |
| Conditions | Wet, dry, safety car, VSC, hot track (≥40 °C), cool track (<25 °C) |
Tyre degradation per compound, stint analysis, pit-stop timing, and a pace model that predicts lap times from stint state. Uses XGBoost when available and falls back to a linear model when it isn't.
Ask questions in plain language ("who's the strongest contender", "what's Antonelli's driving style"). The model answers through tool calls against the same endpoints the UI uses, and shows which tools it called. Runs on NVIDIA NIM or the Anthropic API; without a key it degrades to an offline intent mode.
Live standings, race calendar, session results, per-round analytics with weather telemetry, tyre stint timelines and position-change charts.
| Source | Used for |
|---|---|
| FastF1 | Lap timing, telemetry, weather, track status |
| OpenF1 | Live driver roster, sessions, meetings, stints |
| Jolpica | Standings and schedule — the successor to the retired Ergast API |
The deployed instance ships with a pre-ingested snapshot of the 2026 season: 12 races, 14,101 laps, 762 stints.
Backend
cd race-delta-backend
python -m venv venv && venv/Scripts/activate # Linux/macOS: source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # then fill in the values you need
python app.py # http://127.0.0.1:8000
The schema is created automatically at startup. To populate the database with a season:
python ingest_local.py
Frontend
cd race-delta-frontend
npm install
echo "VITE_API_BASE=http://127.0.0.1:8000" > .env.local
npm run dev # http://localhost:5173
Backend, all optional except in production:
| Variable | Default | Notes |
|---|---|---|
DATABASE_URL | sqlite:///racedelta.db | Postgres works too |
CORS_ORIGINS | * in dev, empty in production | Comma-separated, no trailing slashes. Production allows nothing until you set it. |
FLASK_ENV | development | production turns off debug and shortens standings computation |
NVIDIA_API_KEY / ANTHROPIC_API_KEY | — | Enables the AI Analyst; NVIDIA takes precedence |
ADMIN_TOKEN | — | Admin ingestion endpoints stay disabled unless set |
RACEDELTA_CACHE_DIR | .cache | Persistent JSON cache with stale-while-revalidate |
FASTF1_CACHE_DIR | ./fastf1_cache | FastF1's on-disk session cache |
Frontend:
| Variable | Notes |
|---|---|
VITE_API_BASE | Backend origin, no trailing slash. Baked in at build time — changing it requires a rebuild. |
Backend — Docker, on any container host. The included Dockerfile is sized for a 512 MB / 0.1 CPU instance: one gunicorn worker with eight threads, and the computed cache plus the season database baked into the image so a cold start serves real data without refetching.
Root Directory race-delta-backend
Dockerfile Path ./Dockerfile
Health Check /api/health
Frontend — any static host. Root directory race-delta-frontend, Vite preset. vercel.json supplies the SPA rewrite that React Router needs for deep links.
Refresh the shipped season data with:
cd race-delta-backend && python ingest_local.py
git add -f data/racedelta.db && git commit -m "chore: refresh season data"
Frontend — React 18, Vite, Tailwind, React Router, Recharts, Plotly, Chart.js, Framer Motion
Backend — Flask, SQLAlchemy, FastF1, pandas, NumPy, scikit-learn, XGBoost (optional), gunicorn
race-delta-backend/
app/
routes/ core, compare, lab, admin, openf1
services/ f1_service, ingestor, feature_store, strategy_lab,
driver_intelligence, race_analyst, compare_lab, cache_store
models.py 10 tables: races, race_sessions, laps, stints,
driver_race_features, drivers, constructors, ...
scripts/ Jolpica/Ergast standings and team lookups
data/ pre-ingested season database
.cache/ precomputed API responses shipped with the image
race-delta-frontend/
src/routes/ Home, Compare, Drivers, Teams, Lab, Strategy, Analyst, Race
src/components/ Navbar, cards, charts, comparison tables
src/api/client.js single source of truth for API access
/api/compare/track-map loads full telemetry and is memory-hungry; it needs more than 512 MB.