This runs on a Mac at your place and does one job: every 15 minutes on a race day it checks who won, and writes the results into the database behind the Results tab. It has to run from an ordinary Australian internet connection — the results feeds block cloud servers, which is why this one piece can not live on Netlify or Supabase with everything else.
1 Open Terminal on the Mac
Spotlight (⌘ + Space), type Terminal, hit enter.
2 Paste this in and press enter
curl -fsSL https://the-peoples-tips.netlify.app/setup/install.sh | bash
It checks python3 is there, downloads the poller, tests that both the results feed and the database answer, and only then schedules it. If anything fails the check it stops and tells you why rather than scheduling something broken.
Cautious about piping a script into bash? Fair. Read it first at /setup/install.sh and /setup/tips-poller.py — they're short, and they're your files on your site.
3 Stop the Mac going to sleep
sudo pmset -a sleep 0 disksleep 0 womp 1
Asks for your Mac password. A sleeping Mac doesn't poll. This also lets it wake on network activity and come back by itself after a power cut. In System Settings → Energy, tick Start up automatically after a power failure too.
↺ Backfill any date
python3 ~/tips-poller/tips-poller.py 2026-08-29
Change the date to whichever Saturday you missed. Re-running it on a day that's already done is harmless — posting the same result twice does nothing.
Or just tell me. I can pull the results and load them from my side without the Mac being involved at all. The poller is the convenience, not the dependency.
📋 Watch it work
tail -f ~/tips-poller/poller.log
You'll see lines like CAULFIELD: 3 race(s) done - R1 R2 R3 and then pushed: 200. Ctrl-C to stop watching. On a quiet day it just says no tracked meetings.
🔧 Test it right now
python3 ~/tips-poller/tips-poller.py --check
Says READY if both the results feed and the database answer. If it fails, the Mac is probably on a VPN — turn it off and try again.
🛑 Turn it off
launchctl bootout gui/$(id -u)/com.peoplestips.poller
Re-run the installer in step 2 to switch it back on.
TAB's API is cleaner and was the first choice, but Akamai sits in front of it and refuses programmatic clients: 403 from every cloud server tested (Supabase in Sydney, Postgres directly, Anthropic's servers) and, when we finally tested from a real home connection on 29 August, HTTP/2 stream errors and hangs there too. Punters and Racenet are behind the same protection. Sportsbet answers cleanly from home but not from a datacentre — which is why this one small piece has to sit on a machine at your place.
Everything else — the sheet, the database, the archive, the scoreboards — stays in the cloud and needs nothing from you.