Support club running nationwide — NRCD Pro unlocks Hypothetical Meet, Head-to-Head, lineup planners, Power Rankings, and more.

View plans

Timer Kit

Meet day (no NRCD person on site)

Print this page or keep it on a phone. Default to Path A unless you already auto-upload or run custom timer software.

Meet id is in the Live URL: /upcoming-meets/<id>/live

Pick one push path for race 1. Mixing later is fine. First meet: Path A.

Recommended

A · Browser

Live crew signs in and uploads each .lif. No Python. No token on the laptop.

B · Folder agent

Windows .bat or macOS/Linux .command watches the FinishLynx LIF folder. Needs Python + ingest token.

C · Live Timer API

Your software POSTs JSON or LIF with a Bearer token. Not browser upload. Not the agent script.

Path D · HyTek (FTP / publish-to-disk)

Agent --ftp-port 2121 + HyTek FTP to this laptop (F11/F12), or export to disk. Prefer A/B/C for FinishLynx live heats. See Path D.

Path C is different

A uses an NRCD login. B is NRCD's Python folder watcher (Windows .bat or macOS/Linux .command). C is any client that speaks HTTP: Meet Manager plugin, custom script, another timer stack. B happens to call the same API as C; you can skip B entirely.

Host (night before)

  1. Open the upcoming meet → NRCD Live.
  2. Assign bibs (or auto-assign). Download entries CSV for Meet Manager if needed.
  3. Optional for B/C: seed FinishLynx event number maps.
  4. Enable NRCD Live. Copy the token once (shown only then).
  5. Hand off by path only:
    • A: add clock person's NRCD email under Live crew, or they request on the Live page if none is set · text them the Live page + this guide.
    • B: download Windows .bat or macOS .command starter while the token is visible · text handoff.
    • C: send meet id + token + API docs (copy curl from Live page).
    • D (fallback): only if scoring in Meet Manager - show them Path D preview upload.
  6. Confirm green Preflight ready on the Live page (red rows have Fix links).

Path A · Clock (browser)

  1. Create or sign in to NRCD with the email the host added as Live crew, or open the meet Live page and click Request to be timer when no crew exists (host confirms before fans see Live).
  2. Open the meet's Live results page (host text or Upcoming meets).
  3. Expand Live opsPath A · Upload FinishLynx .lif.
  4. After each heat: choose the .lif, confirm event/heat (optional if filenames are mapped like 001-1-02.lif), Upload. Watch the Latest ticker.
  5. Optional desk: running clock, Prev/Next board focus, correct a bad mark.

You do not need the ingest token for Path A. Keep the Live page open on a second screen if you can.

Path B · Clock (folder agent)

  1. Install Python 3 (add to PATH; macOS: brew install python or python.org).
  2. From Timer & crew setup: download nrcd_live_agent.py and (while the token is shown) the Windows starter .bat or macOS/Linux .command. Keep them in the same folder.
  3. Windows: double-click the .bat. macOS: chmod +x the .command file, then double-click (or run it in Terminal). Paste the FinishLynx LIF folder path. Optional: paste a HyTek/MM export folder for Path D auto-upload.
  4. If preflight blocks, fix Live page items (bibs / Live on), then retry.
  5. Leave the window open. Save a practice LIF and confirm it on the Live page (Agent on).

Uses the ingest token. Live crew login is optional on another device for desk tools.

Path C · Live Timer API

Use when you are not clicking Upload (A) and not running NRCD's agent (B). Host still Enables Live and shares meet id + ingest token. Copy the practice curl from the Live page when the token is shown.

  1. Every call: Authorization: Bearer <meet_token>
  2. Base: https://nationalrunningclubdatabase.com
  3. Push: POST /api/live/<meet-id>/ingest (JSON), .../ingest/lif (multipart), or .../ingest/hytek (Path D file)
  4. Optional: POST .../clock, .../heartbeat, .../board, GET .../preflight
  5. Fans watch /upcoming-meets/<meet-id>/live
curl -sS -X POST \
  -H "Authorization: Bearer MEET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"event_name":"Men 1500m","gender":"M","heat":1,"rows":[{"bib":"104","place":1,"result_time":"3:55.22","first_name":"Pat","last_name":"Runner","team_name":"Example U"}]}' \
  https://nationalrunningclubdatabase.com/api/live/MEET_ID/ingest

Field, DNS/DNF, LIF, board: full Live Timer API docs.

Path D · HyTek Meet Manager (FTP)

Prefer A/B for FinishLynx. For Meet Manager hands-free: start the agent with FTP port 2121, point HyTek FTP at 127.0.0.1, then F11/F12. Or publish-to-disk into --mm-watch. Manual:

curl -sS -X POST \
  -H "Authorization: Bearer MEET_TOKEN" \
  -F "file=@results.txt" \
  https://nationalrunningclubdatabase.com/api/live/MEET_ID/ingest/hytek

Full notes: Timer Kit · Path D.

60-second dry run (do this before race 1)

  1. Host: Live page is green Preflight ready.
  2. A: upload a practice .lif → mark shows in Latest.
  3. B: save one practice LIF into the watch folder → mark shows · Agent on.
  4. C: POST one practice row (or use the Live page curl) → mark shows.
  5. D (optional): preview + upload sample HyTek .txt → events appear.
  6. Optional: set clock / Prev-Next so projector modes look right.

If something breaks

  • Nothing uploads: Live still enabled? A: still Live crew? B/C/D: token rotated (old token dies)?
  • Wrong event name: A type the name; B/C add event maps or pass event_name.
  • Names don't match athletes: assign bibs to match FinishLynx competitor numbers.
  • Fans see old heat: Timer desk Prev/Next or board API focus.
  • HyTek preview empty: use Meet Manager text with Event headers, or CSV with Event/Place/Name/Mark.
  • Need the long version: Full Timer Kit (desk, projectors, payloads).

Related

Bookmark this URL for meet weekend. Path A first unless you already ship Path C.