Drag the crop box corners to resize, or drag inside to move
Select Mode
Good Zones: Click to add polygon points, click near start to close shape. Perfect Zone: Draw rectangle OR select a good zone and click "Auto Perfect" to place it automatically. Editing: Drag vertices to reshape, drag inside to move. Delete key removes selected zone/vertex.
Level Info
Zone Sets
No zone sets yet
Edit Zone Set
Zones in this set:
No zones yet
All Levels
Loading...
Migrate Original Images
Download original game images and upload them to Firebase.
Progress0 / 10
📋 How-to: the quarterly routine, deletion requests, and sign-in accounts (click to open)
Every quarter (about 10 minutes)
Retention check — section 3 below. Press Check. It lists anyone with no saved score in 24 months and tells you who is next to expire, and when. If nobody is listed and the next date is months away, you can skip checks until then.
If anyone is listed, type the confirmation it asks for and press Expire these students. Their initials and scores stay on the boards; their email record is deleted.
Sign-in accounts — web pages aren't allowed to delete them, so do it in Google Cloud Shell (below).
Picture sources — section 4 below. Press List picture sources. Everything should be green; if not, press Move outside pictures into SpotOn.
At the top of the page, make sure the project says spot-on-games (click it to switch).
Click the >_ button at the top right (Activate Cloud Shell). A terminal opens at the bottom of the page. Paste commands into it with ⌘V and press Return.
First time only (or if it has been a long time and something errors)
Only lists: accounts unused 24+ months, and the next one due. Changes nothing.
python3 auth-cleanup.py --delete
Deletes them. It asks you to type delete plus the count (e.g. delete 5) first; anything else cancels. Your two admin accounts are never deleted. "Unused" counts a browser quietly staying signed in, so students who stay signed in on their MacBook aren't deleted.
A parent or the school asks to delete a student
Section 2 below: enter the email, Find, type the email again, Delete this student.
Then in Cloud Shell (after the "Every time" download), replacing STUDENT_EMAIL with their email:
They can still play the games, but can't sign in, so nothing is ever saved. (Delete their existing records with section 2 if they asked for that too.)
Just look up one account
python3 auth-cleanup.py --email STUDENT_EMAIL
If something goes wrong
An error mentioning "quota project" → run the set-quota-project command above, then try again.
An error mentioning "credentials" → run the application-default login command above, then try again.
"No module named firebase_admin" → run the pip install command above.
Anything else → copy the whole Cloud Shell output into a new Claude chat along with the SpotOn repo.
One-time setup: let the games read pictures from storage (CORS)
Sweet Spot's cropped pictures, and this page's Sweet Spot level editor, read picture pixels, and the storage bucket must allow that for spoton.misterwilson.org. Done once; do it again only if pictures start failing with a "CORS" error in the browser console. Run in Cloud Shell:
The last one should print the spoton.misterwilson.org origin back. Browsers can remember the old answer for up to an hour.
The Cloud Shell sign-in account steps also live at the top of scripts/auth-cleanup.py in the repo.
1. Legacy cleanup (one time)
Before September 2026, most games put each student's email, Google name and profile photo on their public score records. This moves every email into the private player records (only admins can read those) and then strips email, name and photo off every score. Initials and scores don't change. Safe to run again.
2. Delete a student (on a school or parent request)
Deletes the student's scores and their email record. Nothing is deleted until you've seen the count and typed the email again.
3. Retention check (once a quarter)
Finds students who haven't saved a score in 24 months. For each one, their email record is deleted and their scores become anonymous — the initials and scores stay on the leaderboards, attached to no one.
4. Where the game pictures load from
Every website listed here sees a student's IP address when a game shows its picture. Firebase Storage (firebasestorage.googleapis.com) is Google, which already runs SpotOn's database; anything else is another company. Move copies every outside picture into SpotOn's own storage and points the game at the copy (the original address is kept as a credit, never loaded).
🏆 Leaderboard
Rank
Game
Initials
Score
Email
Date
Actions
Loading scores...
Picture Perfect Images
Add New Image
Tip: Use Pexels.com or Unsplash.com for free, high-quality images. Right-click an image and "Copy image address". The picture is copied into SpotOn's own storage when you add it, so students' computers never contact the original website.
Total: 0Enabled: 0Disabled: 0
Loading images...
Edit Image
Balanced Placement II Content
Add New Content
0 / 280
Aim for 120–250 characters. Full sentences with proper punctuation work best.
Total: 0Enabled: 0Disabled: 0
Loading content...
Edit Content
0 / 280
Full punctuated sentences, 120–250 characters.
Enter image URL
100%
Focal point determines crop center for each shape.