Renewal reminder schedule

Turn a member list and a set of fixed rules into a dated list of renewal notices, with the reason for every member who was held back or whose notice was dropped. The sample list is synthetic. Serve this folder (see README.md) instead of double-clicking the page, so the sample can load.

Your member list never leaves this tab. This page reads the file or text you give it and works out dates. It uploads nothing, stores nothing and sends nothing. It reads up to 5 MB and 20,000 members. No model chooses who is contacted: the rules below do, and you write them. Reload the page to forget the list.

Columns: member_id, email, expiry_date, status, renewed_on, opted_out. Dates are YYYY-MM-DD.

Rules you choose

The notice days, the 70 grace days and the 3-day gap are example settings, not standards. Replace them with your own.