The re-check before approval is the part most people would skip — good that you lead with it. I'd also log every sent reminder in a 'sent' tab with a timestamp: if the run crashes mid-loop, the idempotency key alone won't stop a partial rerun from resending.