Deadline Nudges
How PayMe detects tasks approaching deadlines and sends proportional urgency alerts.
Deadline Nudges
PayMe watches for tasks where remaining work is on a collision course with the deadline. Urgency scales with task size — a 200h milestone gets a gentle weekly check-in; a 4h task due tomorrow gets a same-day alert.
Urgency levels
| Level | Condition | Message tone |
|---|---|---|
none | Plenty of slack | No nudge |
morning-of | Small task (≤4h), due tomorrow, fits in time | Gentle reminder |
weekly | Large task (>100h), many days left | Weekly check-in |
now | Remaining ≥ available hours before deadline | Urgent — act now |
overdue | Deadline passed, work remains | Overdue alert |
Due modes
Nudge behaviour depends on the task's dueMode. The planner, absorption capacity, and nudge system all agree on these semantics:
| Mode | Planner | Absorption | Nudge behaviour |
|---|---|---|---|
auto | Schedules normally | Doesn't lock capacity | Skipped — system-computed, recalculates silently |
soft | Respects date, no warning | Doesn't lock capacity | Overdue only — nudges if deadline passed, silent otherwise |
hard | Warns if can't fit | Locks capacity | Full urgency — all levels (morning-of, now, overdue, weekly) |
Only hard deadlines generate proactive nudge alerts. Soft deadlines only surface when they're already overdue. Auto deadlines never nudge — they recalculate automatically.
Deadline collision detection
The system checks cumulatively: if you have 15h due Wednesday and 15h due Thursday, that's 30h across 3 days (24h capacity) — a collision.
Example collision:
Task A: 15h, due Wed
Task B: 15h, due Thu
Daily capacity: 8h
Cumulative by Wed: 15h needed, 16h available → OK
Cumulative by Thu: 30h needed, 24h available → COLLISION (6h short)The collision nudge names the first deadline that can't be met.
Stuck task detection
A task is flagged as "stuck" when:
- Open for more than
max(3, expectedDays + 1)days - Less than 25% of the estimate has been logged
Tasks are excluded from stuck detection when:
- Blocked by a dependency — a task with
dependsOnpointing to an incomplete task is waiting, not stuck. - Unbroken allocation — a task whose name matches the project name is a budget placeholder, not a real work item. These are reported separately with a nudge to break them down into specific tasks.
Stuck task alerts fire Mon–Fri at 10:00 AM via the stuck-task-check Trigger.dev job.