DYNASCORE
Managing · Scoring · Analytics — The complete IPSC match management system for clubs, range officers, and match directors.
DynaScore is an offline-capable web application that runs entirely in the browser. No installation required — just open the HTML files. Data is stored locally in the browser (localStorage) and optionally synced to a central server for multi-tablet use.
| Page | Used by | Purpose |
|---|---|---|
| setup.html | Match Director | Create and configure a match (7-step wizard) |
| scoring-squad.html | Range Officer | Enter scores during Squad Mode or Range Rotation |
| scoring-stage.html | Range Officer | Stage selector for Stage Mode |
| rangemaster.html | Range Master | Monitor events, approve scores, manage DQs |
| display.html | TV / Monitor | Live match leaderboard for the main screen |
| display-stage.html | TV / Monitor | Per-stage shooting order and results |
| analysis.html | Shooter / Admin | Individual shooter stats, rank, history |
| results.html | All | Final match results by division |
| progress.html | Admin | Overall match completion progress |
👥 Squad Mode
The squad arrives at the range and shoots all stages in sequence before leaving. The tablet travels with the squad. Best for club matches with a single range.
Scoring URL: scoring-squad.html
🎯 Stage Mode
Each range has one stage. The tablet stays fixed at that stage. Squads rotate between ranges on a timed schedule. Best for larger matches with multiple ranges.
Scoring URL: scoring-stage.html
🔄 Range Rotation Mode
Each range has multiple stages. Squads shoot all stages on Range 1, then rotate to Range 2, etc. One tablet per range stays fixed. Best for multi-range clubs with 1–5 stages per range.
| Segment | Range 1 (S1+S2) | Range 2 (S3+S4) | Range 3 (S5+S6) |
|---|---|---|---|
| 09:00 | Squad A | Squad B | Squad C |
| 11:00 | Squad B | Squad C | Squad A |
| 13:00 | Squad C | Squad A | Squad B |
Scoring URL: scoring-squad.html?rangeGroup=N (one per range)
Fill in as much or as little as needed. Only Match Name is required to proceed. All other fields are saved for documentation and integration with DynaReg.
| Section | Fields | Notes |
|---|---|---|
| Core | Name, Dates, Venue, Level, Firearm | Required for scoring |
| Officials | Match Director, Range Master, Stats Office | Shown on results |
| Contact | Organiser, Contact Person, Email, Phone | Ausschreibung export |
| Registration | Opens, Closes, Payment Deadline, Fees | EUR amounts |
| Bank | IBAN EUR/CHF, BIC, Account holder | For entry payment |
| Schedule | Squad card issue time, Morning/Afternoon start, Prematch | Zeitplan |
| Terms & Safety | Teilnahmebedingungen, Sicherheitshinweise, Foto/Film | Free text |
Stage Fields
| Field | Description |
|---|---|
| Name | Stage name e.g. "Cold Start" |
| Paper targets | Number of paper (IPSC) targets |
| Steel targets | Number of steel poppers / plates |
| No-shoots | Number of no-shoot targets |
| Hits required | Hits per paper target — default 2 (double-tap) |
| Stage type | Auto-calculated: Short (<12), Medium (12–24), Long (>24), Speed |
| Range / Bay | Free text label shown on displays e.g. "Range 3 · Bay 7" |
| Range Group | Range Rotation only — assign stages to ranges 1–5 |
| Briefing | Stage description for the walk-through |
paper × hitsRequired + steel.See Workflow Modes above for a full comparison. For Range Rotation, set Minutes per Stage and Break between segments — the rotation table is calculated automatically.
Squad Setup
Manual Entry
Click + Add Competitor. Fill in bib number, name, division, power factor, squad and day. Click the ✓ checkmark to save.
CSV Import
Click ⬆ Import CSV. The file must have these columns:
# Optional: category, nation, ipsc_id, status
1, Thomas, Schneider, Production, Minor, 1, 1
7, Felix, Gruber, Open, Major, 1, 1, Overall, GER, GER-04192
Power Factor Rules
| Division | Major allowed? |
|---|---|
| Open, Standard, Rifle | Yes |
| All other divisions | Minor only |
DynaScore uses IPSC Comstock scoring. Hit values and calculation formulas are shown here for reference. See Scoring Rules for the full breakdown.
The Launch page runs a pre-flight checklist. Errors must be fixed before launching. Warnings can be ignored but are worth checking.
Common errors:
- No stages defined
- No competitors added
- Competitors with no squad assigned
SC1 — Day & Squad Selection
Select the day at the top, then tap the squad button. Start times are shown next to each squad number. Green border = squad fully approved. Yellow border = pending approvals.
SC2 — Shooter List
Shows all shooters in the current squad for the active stage. Tap a shooter to open score entry.
| Border colour | Meaning |
|---|---|
| Green | Score approved — locked |
| Yellow | Saved, pending Range Master approval |
| None | Not yet scored |
SC3 — Score Entry
SC4 — Summary & Approval
Review the score before approving. Three options:
| Button | Action |
|---|---|
| ← Back / Correct | Return to score entry to fix a mistake |
| ✓ Approve | Score is locked and counted in results |
| ⏳ Save — Not Approved | Save score, raise event in Range Master, shooting continues |
Every score must be approved before it counts in the results. There are two paths:
Direct Approval (normal)
The RO reviews the score on SC4 and taps ✓ Approve. The score is immediately locked and included in results. The shooter row turns green in SC2.
Save — Not Approved (pending RM)
Used when the RO is unsure, a protest is expected, or the Range Master needs to review. The score is saved but not counted. A ⏳ PENDING event is raised in the Range Master page. The squad continues shooting.
On SC4 (Summary), if a reshoot is required:
When Reshoot at End is pressed:
- The display page immediately advances to the next shooter
- A 🔄 RESHOOT badge appears on the display next to the shooter's name
- After all other shooters are done, the reshoot shooter is presented automatically
- The stage closes only after the reshoot is approved
DNS — Did Not Shoot
Tap DNS on SC3. The shooter is marked as DNS for this stage and skipped in the shooting order. DNS on all stages = overall DNS. Does not affect match results negatively.
DQ — Disqualification
Tap DQ on SC3 and select the DQ reason. A DQ event is raised in the Range Master. The Range Master must approve the DQ for it to take effect. Until approved, the DQ is shown as pending.
Once a DQ is approved by the Range Master, the shooter is excluded from further stages and removed from the leaderboard. The squad will auto-close once all remaining shooters are done.
Open rangemaster.html on the Range Master's tablet or phone. The page has three tabs:
| Tab | Content |
|---|---|
| Events N | Pending DQs, pending score approvals, DNS events |
| Progress | Match completion overview by squad and stage |
| Rotation Plan | Stage Mode / Range Rotation schedule (hidden in Squad Mode) |
Pending Approval Cards ⏳ PENDING
Appear when a scorer taps "Save — Not Approved". Shows the shooter name, stage, and saved score.
| Button | Action |
|---|---|
| ✓ Approve Score | Score is marked approved and counted in results |
| ✕ Reject / Re-score | Score is cleared — scorer must re-enter from scratch |
DQ Event Cards
Appear when a scorer raises a DQ. Shows the DQ reason and shooter details.
| Button | Action |
|---|---|
| ✓ Approve DQ | DQ confirmed — shooter excluded from match |
| ✕ Retract DQ | DQ reversed — shooter re-enters shooting order |
The Rotation Plan tab (visible in Stage Mode and Range Rotation only) shows the full schedule: which squad is on which stage/range at each time segment. The current time slot is highlighted in orange. Completed slots shown in green.
Open display.html on any browser connected to the same network. Press F11 for fullscreen.
The display shows:
- Leaderboard cycling through divisions every 8 seconds
- Best Time and Best HF for the active stage
- Currently Shooting slot (with 🔄 RESHOOT badge if applicable)
- On Deck and On Hold shooters
- QR code for the On Deck shooter — links to their analysis page
Tap 📺 Stages in the top-right to open the Stage Display launcher — shows URLs and QR codes for every stage.
Open display-stage.html on the range TV. No URL parameter needed — it auto-detects the active stage and switches automatically as the squad progresses.
| URL | Behaviour |
|---|---|
display-stage.html | Auto-follows active stage across all stages |
display-stage.html?stage=3 | Always shows Stage 3 |
display-stage.html?range=2 | Range Rotation — auto-follows active stage in Range 2 |
Left panel: Best Time/HF → Currently Shooting → Shooting Order → Completed.
Right panel: Stage results sorted by Hit Factor — all shooters who have shot this stage.
Direct HDMI (1–2 monitors)
Connect monitors directly to the GMKtec mini PC via HDMI. Open Chrome on each screen, drag windows to each monitor, press F11.
WiFi (recommended for multiple monitors)
http://192.168.1.100:8000/display-stage.html (replace IP with your server IP).Open analysis.html or scan the QR code from the display page. The analysis page shows:
| Section | Content |
|---|---|
| Hero header | Bib, name, division, cat, nationality, PF |
| Div Rank | Position in division with ▲▼ movement arrow |
| Cat Rank | Position in category with ▲▼ movement arrow |
| Match % | Percentage of division leader, gap shown |
| Stages | Done/total, estimated points remaining |
| Match Progress | Overall match completion bar |
| Division Neighbors | Shooter ahead and behind with % gap |
| Next Stage | Next unscored stage name and range |
| Stage breakdown | HF, time, points per stage |
| Cumulative graph | Running points total vs division leader |
The page updates in real time when new scores are approved — the rank arrows show movement since the last update.
analysis.html?bib=7 — works on any phone connected to the match WiFi.Recommended Hardware
| Device | Role | Cost |
|---|---|---|
| GMKtec mini PC | Server (already owned) | — |
| TP-Link travel router | WiFi hub for the range | ~€30 |
| Amazon Kindle Fire 10 | Scoring tablet (already owned) | — |
| Amazon Fire TV Stick 4K | Per-range display | ~€40 each |
Network Layout
pip install fastapi uvicornuvicorn main:app --host 0.0.0.0 --port 8000http://192.168.1.100:8000/<page>.htmlThe server handles real-time result broadcasting via WebSocket. When a score is approved, the server recalculates rankings and pushes updates to all connected displays within 1–2 seconds.
DynaScore is designed to work fully offline. All data is stored in localStorage on each device. When network connectivity is lost:
- Scoring continues normally — all scores are saved locally
- The connection bar shows ● Offline and the queue count
- When connectivity is restored, queued scores are automatically synced to the server
- Display pages show the last known results until refreshed
Hit Values
| Hit Zone | Major | Minor |
|---|---|---|
| A (Alpha) | 5 | 5 |
| C (Charlie) | 4 | 3 |
| D (Delta) | 2 | 1 |
| M (Miss) | 0 | 0 |
| No-shoot hit | −10 | −10 |
| Procedural Error | −10 | −10 |
Calculations
Stage Type by Round Count
| Type | Min rounds |
|---|---|
| Short | < 12 |
| Medium | 12 – 24 |
| Long | > 24 |
| Term | Meaning |
|---|---|
| Bib | Competitor number (unique positive integer) |
| Squad | Group of shooters shooting together (numbered 1, 2, 3…) |
| Stage | One course of fire with defined targets |
| Range Group | Set of stages on the same physical range (Range Rotation mode) |
| Segment | Time block in Range Rotation — all squads shoot simultaneously |
| HF | Hit Factor = total points ÷ time |
| Match % | Shooter's total points as a percentage of the division leader |
| PE | Procedural Error — −10 points each |
| DNS | Did Not Shoot — shooter absent from stage |
| DQ | Disqualification — raised by RO, approved by Range Master |
| SC1/2/3/4 | The four screens on the scoring page (Squad → Shooters → Entry → Summary) |
| RM | Range Master |
| RO | Range Officer (operates the scoring tablet) |
| Problem | Solution |
|---|---|
| Scoring page shows no days or squads | Go back to Setup → Step 4 and add at least one squad, then re-launch. Make sure to tap Competitors → (not just navigate away) to save squads. |
| Page looks old / outdated version | Clear browser cache: F12 → Application → Clear site data. Or press Ctrl+Shift+R for a hard reload. The version number is shown in the top-right of every page. |
| Stage won't close after all shooters done | Check if any shooter has a pending reshoot (🔄) or a pending approval (⏳). The stage closes automatically once all active shooters are approved/DNS and the reshoot queue is empty. |
| Display shows "no data" | Display pages read from localStorage. If opened from a different folder or browser profile, they won't see the scoring data. Ensure all pages are opened from the same server URL. |
| Score stuck as "approved" cannot edit | Use Range Master → ✏ Edit / Approve Shooter Score. Select shooter + stage, adjust the time, and re-approve. |
| DQ not taking effect | DQs must be approved by the Range Master. Check the Events tab — tap ✓ Approve DQ on the pending event card. |
| Wrong mode launched (squad vs stage) | Go back to Setup → Step 3 and re-select the correct workflow mode. Make sure to tap Squads → to save the change before launching. |
| Major PF option is greyed out | Major power factor is only available for Open, Standard, and Rifle divisions. Change the shooter's division or set power factor to Minor. |
| CSV import fails | Check that the file has the required columns: bib, first_name, last_name, division, power_factor, squad, day. Ensure bib numbers are unique integers. |
| Display TV shows blank after WiFi drop | The display page caches the last known results. Refresh the page once WiFi is restored — it will reconnect automatically and show current data. |