flutter
Flutter는 wger용 피트니스·운동 앱입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기F1 race weekend companion: session-by-session replay, charts and (soon) predictions, built on FastF1
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A companion app that follows a Formula 1 weekend session by session. After each session (FP1 → FP2 → FP3 → Qualifying, and Sprint sessions on sprint weekends) it refreshes the charts and updates a prediction of the race result - for a past weekend replayed step by step, or for a live weekend before its race.
Status: Day 3 of a 3-day build. Built: data pipeline, replay and live weekends, per-session
charts, race prediction with a backtest, race-result view, generated commentary, a "race starts soon"
banner, and a new website for a general F1 audience (web/, Next.js on Vercel). The original
Streamlit app is kept in the repo but is no longer deployed.
Two front ends read the same data:
web/, static Next.js, deployed on Vercel): the fan-facing version and the only one
published. 2026 weekends only, a start-light timeline with autoplay, plain-language explanations,
race-control style commentary, and a "lights out" race reveal. See web/README.md.app.py): the original analysis view, including earlier seasons' data and the
backtest charts. Taken offline on 2026-10-27, now that the website covers the same ground; the
code is kept and still runs locally with streamlit run app.py.Four predictors, and Auto (the default) picks between them:
Percentages come from simulating the race 20,000 times, with retirement chances per team and uncertainty sized - and, for the baseline and Grid + recovery, shaped (wider before Qualifying, tighter for the front six after it) - from each predictor's own past mistakes. Full description: docs/model.md.
Scored on the first 15 races of 2026 (R1-R15), each predicted using only what was known at the time (expanding-window backtest). After Qualifying:
| Order (Spearman ↑) | Winner log-loss ↓ | Podium Brier ↓ | Whole-grid RPS ↓ | |
|---|---|---|---|---|
| Baseline | 0.697 | 0.78 | 0.070 | 0.108 |
| Grid + recovery | 0.709 | 0.75 | 0.070 | 0.107 |
| Auto (default) | 0.704 | 0.745 | 0.069 | 0.108 |
| Ridge, all seasons | 0.699 | 1.18 | 0.075 | 0.110 |
| Ridge, same season | 0.692 | 1.34 | 0.068 | 0.110 |
The model is frozen at tag frozen-2026-r15b; races from R16 on are an untouched holdout
(results in docs/evaluation.md).
2026 has been unusually qualifying-dominated, so beating the grid order is hard; over 2023-26 the
models' edges are larger and significant (e.g. Grid + recovery +0.018 after Qualifying). What each
score means, all stages, and how differences are judged: docs/evaluation.md.
pip install -r requirements.txt
streamlit run app.py
The app reads only the files in data/; it needs neither FastF1 nor network access.
pip install -r requirements-dev.txt
python scripts/auto_update.py --push # pull what's due, re-score, re-export, publish
auto_update.py runs the steps below for any session that finished 30 minutes ago (the race, 60)
and does nothing if none has. Put it on a timer during a weekend — see
docs/season-checklist.md for the cron line and its caveats. To run the
steps yourself:
python scripts/backfill.py --years 2026 --in-progress # during a weekend: sessions run so far
python scripts/backfill.py --years 2026 # after the race
python scripts/backtest.py # re-score and re-predict
python scripts/export_site.py # refresh the website's data
python -m pytest tests
Then commit data/ and push; the deployed app reloads its code on its own. The full routine,
traps (rate limits, pulling too early, offline rebuilds) and what to re-check through the season:
docs/season-checklist.md.
| Document | Contents |
|---|---|
| docs/model.md | Pipeline diagram, every input, the predictors, how percentages are made, data rules, settings |
| docs/evaluation.md | The backtest, every metric with formulas and worked examples, significance rules, current results |
| docs/experiments.md | Everything tried - kept and rejected - with numbers |
| docs/faq.md | Concepts and questions (methods, Auto, grid vs qualifying, the data) |
| docs/season-checklist.md | Weekly routine, periodic re-checks, end-of-season tasks, ideas not built yet |
web/ website (Next.js static export for Vercel) - see web/README.md
app.py Streamlit app (presentation only)
f1cc/data.py FastF1 access, event-match guard, live-session timing
f1cc/features.py per-driver-per-session features from FastF1 sessions
f1cc/store.py parquet storage in data/, starting grids
f1cc/replay.py replay cutoff: which sessions are visible
f1cc/charts.py Plotly figures (no Streamlit inside)
f1cc/predict/ feature matrix, baseline, recovery, ridge, simulation
f1cc/backtest_summary.py summaries, significance, Auto
f1cc/commentary.py commentary sentences built only from computed numbers at each cutoff
f1cc/site_export.py stored data -> JSON for the website (race result kept in a separate file)
scripts/backfill.py pull sessions from FastF1 into data/
scripts/backtest.py backtest + stored predictions
scripts/export_site.py write the website's JSON (web/data, web/public/data)
scripts/auto_update.py scheduled: pull finished sessions, re-score, re-export, optionally push
scripts/build_overtakes.py on-track overtakes per race (circuit overtaking ease)
scripts/experiments/ reusable experiments (season trend, feature retest, chained model)
tests/ leakage, data integrity, freshness, app smoke tests
docs/season-checklist.md). Nothing in data/ depends on this — the deployed app and the
website read only committed files, so both run with no account and no network.Unofficial fan project. Not affiliated with or endorsed by Formula 1, the FIA, or any team.