Why this exists
Importing 400 customers and pressing send contacts 400 people in one minute. That is how a sending domain earns a spam reputation, and it is an impossible morning if you send by hand. A window spreads the same requests across consecutive days, so many per day. Either you press Release what's due each morning, or you install the runner below and a window releases itself at an hour you choose. Requests go out the way this install already sends: your SMTP, your Twilio, or as links you copy.
A schedule that quietly stops is worse than one you trigger yourself — so the runner records every pass, and this page says out loud when it last ran.
The runner
Windows release when you press the button. To have them release themselves, add one line to your crontab — then set an hour on a window below.
Run it hourly. Every pass after the first one each day does nothing, so a double-fire or a catch-up after a reboot cannot message anyone twice.
0 * * * * /usr/bin/php /var/www/html/cron/send.php >> /var/log/revup-cron.log 2>&1