koala73 / koala73/worldmonitor

feat(alerts): SMS delivery channel

Open
#6,633 0 comments 0 reactions 0 assignees View on GitHub
crisis feature P2
Dominant language
TypeScript
Stars
86.6k
Forks
13.1k
Avg merge
8h 4m
Merged PRs (30d)
825

Description

## Problem
Six delivery channels exist (`convex/constants.ts:3-10`): Telegram, Slack,
Discord, email, generic webhook, web push. **No SMS.** Also no Microsoft Teams,
no native mobile push, no voice, no PagerDuty/Opsgenie.

## Why SMS specifically
It is the channel that works when someone is **abroad on a bad connection** —
precisely the duty-of-care scenario. Every incumbent in travel risk has it
because it is the last-resort channel when data fails.

Note also: there is **no native mobile app**. `src-tauri/` is a desktop Tauri v2
build (macOS/Windows/Linux); mobile is a PWA. So an employee gets alerts on a
phone only if they have opened the site in a browser and granted push, or linked
Telegram. There is no app to hand someone. SMS partially closes that gap.

## Considerations
- Provider (Twilio/MessageBird/Vonage), international deliverability, per-message
cost, opt-in and STOP handling, and country-specific regulation
- Cost control matters — SMS is the one channel with real marginal cost, so it
should be entitlement-gated and rate-limited more tightly than the others
- **Phone numbers are PII.** This is the one channel that touches personal data,
which interacts with the deliberately PII-free asset-registry design. Keep
them on the user record, never on a site record.

## Acceptance
- [ ] SMS channel with opt-in and STOP handling
- [ ] Entitlement-gated and separately rate-limited
- [ ] Cost monitoring and a spend cap
- [ ] Phone numbers on the user record only, never on sites

Effort: M (~2d).

Contributor guide

Open the contributing guide

Research direction

Start with convex/constants.ts:3-10 and trace how the existing delivery channels are represented and sent. Review the user-record and entitlement paths before choosing a provider; done means opt-in and STOP handling, tighter rate limits, spend controls, and phone numbers kept off site records.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, security
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.