尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Lure coursing and racing stats for ASFA, LGRA, NOTRA and AOK9 — standings, titles and events, every figure traced to the bodies' published pages and grading guides, verified on every build.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A searchable, browsable view of American Sighthound Field Association lure coursing data (the Top 20 standings and the trial results behind them), and of the LGRA, AOK9 and NOTRA racing grading guides, with whippet racing from the WRA and NOTRA in beta.
ASFA publishes the standings as one long page of stacked breed tables, and trial results as a page per month. You cannot search either, look up a single hound, or see where a hound sits against the rest of its breed without counting by hand. This site reads those pages and rearranges them.
/ or Ctrl+K) and on the hub at /: a floating panel with a filter per program and the season's leaders before you typeThis is an independent, unofficial project. It is not authorized, approved, or endorsed by ASFA, LGRA, R.A.C.E., NOTRA, the WRA or the AKC, and it is not a publication of any of them; the WRA pages were added at the WRA's request. Wherever this site and ASFA's published standings, the LGRA grading guide, the AOK9 sprint grading guide, the NOTRA grading guides or WRA's grading guide and Point Records disagree, the body's own publication governs.
index.html The hub: one search across every program, the program cards (LGRA and NOTRA share one; WRA and NOTRA Whippets share the Whippet racing card)
asfa.html events.html browse.html dog.html leaders.html kennels.html titles.html
regions.html trials.html lci.html bowen.html rulebooks.html rulebook.html about.html 404.html
akc.html AKC lure coursing by the numbers: the year's events and entries
lgra.html aok9.html notra.html racing-dog.html The racing sections (tabbed pages, one hound page)
wra.html notra-whippets.html cwa.html Whippet racing (beta): one section, each body's page with its own tabs
software-list.html A standalone survey of dog-sport software, deliberately unlinked
css/input.css Design tokens (light + dark), fonts, components — the source
css/app.css Compiled stylesheet, checked in — what pages load
tailwind.config.js Maps the asfa-* color names onto the tokens
assets/fonts/ Fraunces + IBM Plex Mono, self-hosted woff2
js/app.js Data loading, chrome, icons, search, formatting
js/card.js Canvas stat-card renderer
js/racing.js The racing pages: program table, WAVE helpers, overview and hound renderers, Singles
tools/ Python ETL — fetch, parse, clubs, trials, events, build, titles, lgra, aok9, aok9_singles, notra, wra, notra_whippets, cwa, akc_collect, akc_singles, akc, check
tools/build_css.ps1 Rebuilds css/app.css (see tools/build_css.md)
data/snapshots/ Every published standings page, archived verbatim
data/trials/raw/ Every monthly trial results page, archived verbatim
data/events/raw/ The trial schedule page, archived verbatim
data/clubs/raw/ The ASFA club listing PDF — fetched locally, never committed
data/season.json Standings — loaded by every page
data/trials.json Every trial with its entries by program and by breed, and the season by month, state, club and region — loaded by trials.html and regions.html
data/events.json The trial schedule — loaded by events.html
data/clubs.json Club directory: name, region, initials, affiliation only
data/lgra/snapshots/ Each LGRA grading guide, parsed, one file per guide date
data/aok9/snapshots/ Each AOK9 sprint grading guide, parsed, one file per guide date
data/aok9-singles/snapshots/ Each AOK9 Singles sprint records sheet, parsed, one file per date
data/notra/snapshots/ Each NOTRA Other-Breed grading guide, parsed, one file per guide date
data/wra/snapshots/ Each WRA grading guide with the Point Records joined, parsed, one file per report date
data/wra/meets-run.json WRA's Meets Run by Dog page: each active whippet's last meet, for those that ran within two years
data/notra-whippets/snapshots/ Each NOTRA Whippet grading guide, parsed, one file per guide date
data/cwa/snapshots/ CWA's grading guides, standings, all-time lists and title sheets, parsed, one file per guide date
data/lgra/raw/ The workbooks as downloaded — fetched locally, never committed
data/aok9/raw/ data/aok9-singles/raw/ data/notra/raw/ data/wra/raw/ data/notra-whippets/raw/ data/cwa/raw/
data/lgra.json Active LGRA hounds with standings, owners, movement — loaded by lgra.html
data/aok9.json The same for AOK9 — loaded by aok9.html
data/aok9-singles.json Every AOK9 Singles dog, joined to its sprint page — loaded by aok9.html and the hub
data/notra.json The same for NOTRA's Other Breeds — loaded by notra.html
data/wra.json WRA's active list with standings, averages and the Registrar's titles — loaded by wra.html
data/notra-whippets.json Active NOTRA whippets — loaded by notra-whippets.html
data/cwa.json CWA's current grading guide, standings, all-time list and title holders — loaded by cwa.html, the hub and the search
data/cwa-registry.json CWA's archived guide and the whippets found only on its lists — loaded on demand by cwa.html and the search
data/akc/raw/ The AKC entries as collected, one file per collection date (committed: counts only)
data/akc/singles.json AKC's Singles stakes, one row per sheet: club, event number, date and starters (committed: counts only)
data/akc.json Every AKC lure coursing event this year with its entries, totals and rankings — loaded by akc.html
data/*-registry.json Every hound ever registered, compact — loaded on demand
The site is static files with no framework and no runtime dependencies — no CDNs, no font service, no analytics; every page loads with zero third-party requests. The stylesheet is compiled once with the standalone Tailwind CLI and committed, so deploys stay build-free. If you change any class in HTML/JS or anything in css/input.css, rebuild with tools/build_css.ps1 — the how and why live in tools/build_css.md. It follows the device's light or dark preference automatically. Python runs offline to produce the JSON under data/.
pip install -r requirements.txt
python tools/fetch.py && python tools/clubs.py && python tools/parse.py && python tools/trials.py && python tools/events.py && python tools/build.py && python tools/titles.py && python tools/lgra.py && python tools/aok9.py && python tools/aok9_singles.py && python tools/notra.py && python tools/wra.py && python tools/notra_whippets.py && python tools/cwa.py && python tools/akc.py && python tools/check.py
fetch.py archives the live page under data/snapshots/{date}.html, named for the coverage date the page states about itself rather than the wall clock. It skips the write when the page is unchanged. Raw snapshots are committed so every figure on the site traces back to the bytes ASFA served on a given date — and so movement between publications can be computed.
trials.py does the same for each monthly trial results page, splitting each trial's entries by program and by breed from the flight sizes in its results, and clubs.py for the club listing PDF that supplies club regions. lgra.py scrapes lgra.club for the current grading-guide workbook and aok9.py exports the AOK9 sprint guide sheet; each archives a parsed snapshot per guide date (the raw workbooks stay out of git: they are large, and their header rows carry the registrars' mailing details) and rebuilds its feed and registry from every snapshot. aok9_singles.py does the same for the AOK9 Singles sprint records, after aok9.py, because it joins each Singles dog to its sprint page. notra.py scrapes notra.org for the Other-Breed grading guide and treats it the same way, and notra_whippets.py NOTRA's Whippet guide, dating each meet code from the key below its whippets. wra.py reads WRA's two grading-guide reports (the active and the inactive list) and the Registrar's Whippet Point Records PDF, joins them by call name, with the registered name and owner to confirm, and takes titles from the Point Records, which WRA names as the record; it also reads WRA's Meets Run by Dog page for each whippet's last meet, which gives "racing this year". It makes five requests a week, two seconds apart, and keeps a parsed snapshot per report date. cwa.py reads CWA's current and archived grading guides, its standings charts (each from the data behind it, with its own date), its all-time racing sheet and its nine title sheets, five of the twenty-two downloads from CWA's own site, 1.5 seconds apart, and archives a parsed snapshot by the newest of their dates; it joins each list's rows to a whippet on the guides by the registered name without its titles. akc.py collects the year's AKC lure coursing events from AKC's Event Search and the entry counts from each event's results page, with each trial's starters by stake and breed (akc_collect.py), files each collection under its date (committed, since it holds nothing but club names, cities and counts) and recomputes every total and ranking from the event rows. AKC posts Singles stakes apart from Event Search, one PDF per stake on its Single Stakes Results page; akc_singles.py reads each new sheet once and keeps only the club, event number, date and number of starters, and akc.py adds each trial's Singles starters to its entries in every figure. A weekly workflow runs the whole chain and commits when anything changes. While Whippet racing is in beta, each whippet body's data is verified on its own (check.py --only wra, --only notra-whippets, ): one that fails its checks keeps its last committed copy, every other program still updates, and the run is flagged as failed so it gets looked at.
python tools/serve.py
Then open http://localhost:8765. The pages fetch data/season.json, so opening the files directly with file:// will not work.
serve.py is http.server with caching switched off. Plain python -m http.server sends no Cache-Control header, so browsers apply their own freshness guess and keep serving an edited page or script from cache — which looks exactly like the edit never happened.
about.html is the full account of the ASFA side, and each racing page has its own account on its "About the numbers" tab. The short version:
data/review/owner-merges.csv.data/review/owner-splits.csv.check.py fails the build if anything else appears in .tools/check.py re-derives the totals by a different route than tools/build.py and fails if the two disagree. It also counts rows straight out of the raw HTML, so a silently dropped row is caught rather than quietly corrupting a leaderboard.
(meet 1 + 0.7 × meet 2 + 0.5 × meet 3) / 2.2 over the last three complete meets. The registrar's published figure is shown; a hound's page says where the arithmetic differs. check.py requires the two to agree for 98% of LGRA hounds and 85% of AOK9 dogs, which is what the guides actually show.check.py caps how many.-2 suffix.check.py re-derives it. Singles runs at the sprint meets, so its dogs, breeds and meets count in the AOK9 totals; because the sheet lists only the fastest runs, a Singles dog counts as racing this year with a listed run or points from this year.Please check against the source first: ASFA's published standings, the LGRA grading guide, the AOK9 sprint grading guide, the NOTRA grading guides or WRA's grading guide and Point Records. If the two disagree, the published page is right and this site has a bug — please open an issue or email [email protected]. If the body's own listing looks wrong, that goes to the ASFA Records Secretary, the LGRA Registrar/Recorder, the AOK9 National Racing Director, the NOTRA Other-Breed or Whippet Recorder, or the WRA Registrar, not here.
The code is MIT. The standings data under data/ is ASFA's, and the grading-guide data is LGRA's and R.A.C.E.'s, all reproduced with attribution; the Jackrabbit Project icon files are not MIT-licensed. See LICENSE for the carve-outs.
--only cwadata/check.py