mirror of
https://github.com/screentinker/screentinker.git
synced 2026-06-15 02:33:15 -06:00
Daily sweep (15:00 UTC) emails a warm, personal "checking in" message to users who signed up 3-14 days ago and still have no paired screen, nudging them toward activation. Once per user, reuses the Graph transport (services/email.js) via the existing fromName/rawSubject options. - New service services/activationNudge.js, started from server.js. Self-correcting daily scheduler (recompute next 15:00 UTC each run; no node-cron dependency). - Eligibility (Option B, workspace-aware): created 3-14 days ago, activation_nudge_sent_at IS NULL, COALESCE(email_alerts,1)=1 (only an explicit opt-out of 0 is excluded; NULL/unset still qualify), and ZERO devices owned by the user OR present in any workspace they belong to. The workspace check avoids nudging engaged team members. - Idempotency: activation_nudge_sent_at, stamped after send; paired sentinel-1 backfill so the first sweep can't blast the dormant legacy base. Only genuinely-new signups become eligible. - GATE: HOSTED_INSTANCE=true (positive hosted signal, NOT !selfHosted). A daily bulk sweep would be far worse to leak than a single email, so a self-hoster who configured Graph but missed SELF_HOSTED won't blast their user base. Unset -> neither scheduled nor sent. Documented in .env.example. |
||
|---|---|---|
| .. | ||
| activationNudge.js | ||
| activity.js | ||
| alerts.js | ||
| email.js | ||
| heartbeat.js | ||
| scheduler.js | ||
| signupEmails.js | ||