You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
позволить членам сообщества добавлять свои контакты чтобы не привязывать к одному каналу для оповещений — participation opportunities и дайджесты должны рассылаться не только через вкладку браузера, но и через почту и смс
Translation
Let community members add their own contact details so notifications aren't tied to a single channel. Participation opportunities and digests should be delivered not only via the browser tab, but also via email and SMS.
Why
Today, the ecosystem distributes through narrow per-channel pipes:
scenius-digest posts to Telegram channels (one-way, per-community).
my-community / dear-neighbors show participation opportunities inside their browser apps (pull-only, requires the user to open the tab).
A community member who isn't on Telegram, isn't checking the browser tab, or just prefers email is invisible to both pipes. This is especially bad for time-sensitive participation opportunities (avails polls closing soon, scheduled events about to start, harmonica sessions inviting input).
The fix: hold contact details per member on the community-admin side, and let each pipe (digest, participation opportunity, event reminder) fan out across the contact methods the member opted into.
Rough shape (to refine in brainstorming)
A "Notification preferences" surface where each member can:
Per-channel toggles: "send digests to email + Telegram, but participation opportunities to SMS only."
Per-community toggles where they're a member of multiple (mute one community's digest without disconnecting).
Server side:
Member contact records keyed to ATProto DID (so the same identity ties a Telegram handle, email, and phone).
Per-channel verification (email link, SMS code, Telegram pairing — see Citizen-Infra/community-admin#10 for Telegram onboarding pattern).
Distribution layer: when a digest or participation opportunity is published, look up subscribed members + their preferences, send through each channel they opted into.
Open design questions
Identity model. Is contact info stored on the member's PDS via a new lexicon, or in community-admin's own Postgres? PDS is more ATProto-pure but cross-community delivery wants a central index. Hybrid is plausible.
SMS provider. Twilio is the obvious default; Vonage, Plivo, MessageBird are alternatives. SMS has real per-message cost and country/regulatory variability — pick a provider that handles the markets community-admin actually serves and figure out who pays (community? platform? per-member cap?).
Email provider. Resend is already in the ecosystem (avails, navidrome-jam) — natural fit.
Frequency / batching. Per-channel rate limits matter — SMS once per day vs. Telegram real-time. Probably need a batching layer.
Opt-in defaults. Conservative default: every channel off; member explicitly opts in. (GDPR/CASL/TCPA-friendly; SMS especially.)
Scope discipline
This is community-admin's job, not avails's, not scenius-digest's, not my-community's. Each of those tools should call into community-admin's distribution API rather than maintain their own contact lists. That's the whole point of community-admin being the shared layer.
Related
Citizen-Infra/community-admin#9 — the GET /api/config endpoint that consumers already pull from. Could grow a sibling "resolve member contacts" endpoint.
Citizen-Infra/community-admin#10 — Telegram bot onboarding for self-service community registration. Member-side pairing pattern is similar.
Note (original, Russian)
Translation
Let community members add their own contact details so notifications aren't tied to a single channel. Participation opportunities and digests should be delivered not only via the browser tab, but also via email and SMS.
Why
Today, the ecosystem distributes through narrow per-channel pipes:
A community member who isn't on Telegram, isn't checking the browser tab, or just prefers email is invisible to both pipes. This is especially bad for time-sensitive participation opportunities (avails polls closing soon, scheduled events about to start, harmonica sessions inviting input).
The fix: hold contact details per member on the community-admin side, and let each pipe (digest, participation opportunity, event reminder) fan out across the contact methods the member opted into.
Rough shape (to refine in brainstorming)
A "Notification preferences" surface where each member can:
Server side:
Open design questions
Scope discipline
This is community-admin's job, not avails's, not scenius-digest's, not my-community's. Each of those tools should call into community-admin's distribution API rather than maintain their own contact lists. That's the whole point of community-admin being the shared layer.
Related
GET /api/configendpoint that consumers already pull from. Could grow a sibling "resolve member contacts" endpoint.Definition of done (high level — refine in brainstorming)