The simulation
Each dot is a production node. Time flows left. Inside the look-ahead window a reminder fires; past zero it escalates; a backfilled completion date retires the dot. The sliders are the production tool's actual parameters.
The insight, the build, the result
Strip away the spreadsheet and the email
days = (due − today).dt.days # distance to now warn = days.between(0, AHEAD) # inside the look-ahead window overdue = days < 0 # crossed zero, escalate
It is a threshold trigger in a distance field. Every node is a point; time is the wave; the look-ahead window is the wave's radius. None of it needs a model — deadline arithmetic is deterministic.
What shipped
A local pipeline reads the tracking sheet every morning, applies the rule to every order, groups hits by owner, and sends one email per person: purchasing gets its fabric list, each sales rep gets their own orders, overdue rows pinned on top. Reminders stop the moment someone backfills a completion date — which quietly fixed the data-hygiene problem too.
What I would tell another team
The valuable move was noticing that the alert logic never needed a model. Language models earn their keep at the edges — drafting a customer-facing email — not in the trigger. Separating those two concerns made the tool free to run, trivially auditable, and deployable inside a company that could not use foreign AI services at all.