The free score tool at https://cr.empoweredbydesign.co.nz/free-score allows one upload per IP address. When blocked, the user sees a message saying the free trial has already been used.
There are two types of blocks:
trial_uploads PostgreSQL tablelocalStorage under key cr_trial_usedUse this when a specific person needs access again without affecting other blocks.
Open a terminal on your Windows machine
Run:
python C:\Users\mattm\release_ip.py
This lists all currently blocked IPs with timestamps.
To release a specific IP:
python C:\Users\mattm\release_ip.py 1.2.3.4
Replace 1.2.3.4 with the actual IP address from the list.
=== Currently blocked IPs ===
id | ip | used_at
----+----------------+------------------------------
2 | 103.212.53.107 | 2026-05-15 01:42:58+00
(1 row)
=== Releasing IP: 103.212.53.107 ===
...
Done — 103.212.53.107 can now use the free score tool again.
Ask the user to visit https://whatismyip.com and send you the number shown. Or check the trial_uploads table — the timestamp shows when they last uploaded.
This clears every block globally — use when starting a new campaign and you want all contacts to be able to try the tool again.
python C:\Users\mattm\reset_trial_ips.py
DELETE FROM trial_uploads;
If a user's browser is blocked but the server block is already cleared, they need to clear their localStorage.
F12) → Console tablocalStorage.removeItem('cr_trial_used'); location.reload();
Alternatively, they can use an incognito/private window.
GET /api/trial/check?token=cr_fs_2026_a7b3c8d2 — returns {used: true} if IP is in trial_uploadsPOST /api/trial/upload — records the IP and blocks future attemptslocalStorage.getItem('cr_trial_used') and shows the blocked screen immediately if setcompliancenz_db (PostgreSQL)compliancenztrial_uploadsid, ip, used_at, score, resultcr_fs_2026_a7b3c8d2 must be in the URL. All marketing email links should include ?ref=cr_fs_2026_a7b3c8d2.