lock
Read-only — viewing only, changes are not saved
SCORE
KEEPER
By Doug Lowe
ios_share
cloud_sync
{{ !hasCreds ? 'NO SYNC' : syncing ? 'SYNC…' : readOnly ? 'RO' : syncError ? 'ERR' : 'LIVE' }}
⚠ No sync credentials
Go to Setup tab to configure your JSONBin, or open with
?bin=ID&key=KEY
New Game
+ Create New Game
Game Name
Score Unit
Level
Round
Hand
Starting #
Low score wins
Leaderboard sorts lowest first
Win Condition
None
Reach level
Score reaches
Create
Cancel
Active Games
{{ g.name }}
LIVE
group
{{ g.players.length }}
{{ g.unitLabel || 'Level' }} {{ currentUnit(g) }}
{{ g.lastPlayed }}
Low wins
Archive
Delete
Archived
{{ g.name }}
ARCHIVED
group
{{ g.players.length }}
{{ g.lastPlayed }}
Reopen
Delete
sports_esports
No games yet
Start a new game above to track scores in real time.
{{ activeGame.name }}
{{ activeGame.unitLabel || 'Level' }} {{ currentUnit(activeGame) }} · {{ activeGame.players.length }} players
Low wins
arrow_back
Back
Leaderboard
History
person_add
No players yet
Tap Players tab to add participants.
{{ i+1 }}
{{ p.name }}
{{ activeGame.unitLabel || 'Level' }} {{ p.level || 1 }}
{{ currentUnit(activeGame) >= activeGame.winValue ? '✓ Done' : (activeGame.winValue - currentUnit(activeGame)) + ' to go' }}
{{ calcScore(p.name) }}
{{ calcDelta(p.name) <= 0 ? '✓ Done' : calcDelta(p.name) + ' to go' }}
history
No history yet
Tap a player on the leaderboard to enter a score.
{{ activeGame.unitLabel || 'Level' }} {{ lvlGroup.level }}
{{ pGroup.name }}
{{ e.note || '' }}
{{ e.points>0?'+':'' }}{{ e.points }}
{{ formatTime(e.timestamp) }}
edit
delete
{{ pGroup.name }}
history
{{ editEntryNote }}
{{ s.slice(editEntryNote.length) }}
Save
Cancel
person_add
Players
arrow_back
Back
Global Roster
No players in roster yet.
{{ p }}
check
close
Register New Player
Add
In This Game
{{ p.name }}
{{ activeGame.unitLabel || 'Lvl' }} {{ p.level || 1 }}
{{ calcScore(p.name) }}
person_remove
Timer
{{ timerDisplay }}
{{ timerRunning ? 'pause' : 'play_arrow' }}
restart_alt
{{ currentPreset }}s — tap to change
Buzzer
notifications_active
BUZZ!
Tap to sound buzzer
Buzzer Style
{{ s.label }}
Setup
Active JSONBin
Current Bin
CONNECTED
CONNECTED RO
NOT SET
{{ activeBinId || 'No bin configured' }}
Switch Bin
Connect Bin
Sync Rate
How often to auto-sync when a game is active (seconds)
seconds (current: {{ syncRate }}s)
Save
Share URL with Credentials
{{ shareUrl }}
content_copy
{{ copyMsg || 'Copy URL' }}
Note Lookahead History
{{ noteHistory.length }} saved note{{ noteHistory.length !== 1 ? 's' : '' }}
— {{ noteHistory.slice(0,3).join(', ') }}{{ noteHistory.length > 3 ? '…' : '' }}
delete_sweep
Clear
{{ activeGame.name }}
{{ activeGame.unitLabel || 'Level' }} {{ activeGame.history.length ? Math.max(...activeGame.history.map(h=>h.level)) : (activeGame.startUnit||1) }}
close_fullscreen
Close
{{ i+1 }}
{{ p.name }}
{{ activeGame.unitLabel || 'Level' }} {{ Math.max(...activeGame.history.filter(h=>h.playerName===p.name).map(h=>h.level), p.level||1) }}
{{ calcDelta(p.name) <= 0 ? '✓' : calcDelta(p.name) + ' to go' }}
{{ currentUnit(activeGame) >= activeGame.winValue ? '✓' : (activeGame.winValue - currentUnit(activeGame)) + ' lvls' }}
{{ calcScore(p.name) }}
{{ calcDelta(p.name) <= 0 ? '✓ Done' : calcDelta(p.name) + ' to go' }}
Timer
close
Close
{{ timerDisplay }}
{{ timerRunning ? 'pause' : 'play_arrow' }}
restart_alt
{{ currentPreset }}s — tap to change
{{ scoreModal.name }}
{{ activeGame.unitLabel || 'Level' }} {{ entryLevel }} · Total: {{ calcScore(scoreModal.name) }} pts
{{ entryDisplay || '0' }}
{{ activeGame.unitLabel || 'Level' }} {{ entryLevel }}
{{ k }}
±
0
backspace
{{ activeGame.unitLabel||'Lvl' }} −
{{ activeGame.unitLabel||'Lvl' }} +
CLR
history
{{ entryNote }}
{{ s.slice(entryNote.length) }}
Cancel
Submit
Share Scorekeeper
Includes your sync credentials so others join the same session.
{{ shareUrl }}
sms
Messages
mail
Email
content_copy
Copy Link
Close
home
Home
leaderboard
Scores
group
Players
timer
Timer
notifications_active
Buzzer
cast
Display
settings
Setup