Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Preparing Ring Platform content
Preparing Ring Platform content
Preparing Ring Platform content
Use Founder / Developer tabs in the docs sidebar. Deep FCM setup lives on Push Notifications (FCM).
Ring delivers in-app and push notifications for opportunities, messages, entity updates, wallet events, and peer-game challenges.
| Type | Purpose |
|---|---|
OPPORTUNITY | New opportunities and applications |
MESSAGE | New messages and conversations |
ENTITY | Entity updates and invitations |
SYSTEM | Platform announcements |
WALLET | Transaction and balance notifications |
GAME_REQUEST | Peer-game challenge in chat (game_request) |
GAME_UPDATED | Game accepted / finished updates |
CALL_INVITE | Incoming WebRTC call when the callee tab is hidden or closed |
GAME_* types appear in notification preferences UI and interactive notify (features/chat/lib/interactive-notify.ts). Offline FCM for game invites: after !deliveredLive, createInvite waits ~500ms and rechecks getTunnelHub().isUserConnected(peer) before NotificationType.GAME_REQUEST + FCM (not the call ringtone). Hub presence is process-local today — multi-pod false offline is backlog. See Peer Games.
notifications:inbox / bell UIgetFcmVapidKey() / NEXT_PUBLIC_FIREBASE_VAPID_KEY) → fcm_tokens. Safari / empty PushManager uses dedicated VAPID_* → push_subscriptions. Server PUSH fans out both tables; empty RFC on Chrome is a no-op, not a second delivery.Granular enable/disable by type and channel, including quiet hours — see preferences components under features/notifications/.
Deep-dive: per-user FCM + RFC fan-out, iOS Home Screen, and empty RFC-on-Chrome no-op.
Same-workflow: CALL_INVITE uses the same PUSH channel (90s TTL, data-only FCM).
Same-workflow: GAME_REQUEST / GAME_UPDATED for challenges and session updates.
Depends-on: live inbox fan-out on notifications:* channels.
Broader notifications triggers and preferences API docs are still expanding; treat the type table above as the verified Peer Games addendum.
Use Founder / Developer tabs in the docs sidebar. Deep FCM setup lives on Push Notifications (FCM).
Ring delivers in-app and push notifications for opportunities, messages, entity updates, wallet events, and peer-game challenges.
| Type | Purpose |
|---|---|
OPPORTUNITY | New opportunities and applications |
MESSAGE | New messages and conversations |
ENTITY | Entity updates and invitations |
SYSTEM | Platform announcements |
WALLET | Transaction and balance notifications |
GAME_REQUEST | Peer-game challenge in chat (game_request) |
GAME_UPDATED | Game accepted / finished updates |
CALL_INVITE | Incoming WebRTC call when the callee tab is hidden or closed |
GAME_* types appear in notification preferences UI and interactive notify (features/chat/lib/interactive-notify.ts). Offline FCM for game invites: after !deliveredLive, createInvite waits ~500ms and rechecks getTunnelHub().isUserConnected(peer) before NotificationType.GAME_REQUEST + FCM (not the call ringtone). Hub presence is process-local today — multi-pod false offline is backlog. See Peer Games.
notifications:inbox / bell UIgetFcmVapidKey() / NEXT_PUBLIC_FIREBASE_VAPID_KEY) → fcm_tokens. Safari / empty PushManager uses dedicated VAPID_* → push_subscriptions. Server PUSH fans out both tables; empty RFC on Chrome is a no-op, not a second delivery.Granular enable/disable by type and channel, including quiet hours — see preferences components under features/notifications/.
Deep-dive: per-user FCM + RFC fan-out, iOS Home Screen, and empty RFC-on-Chrome no-op.
Same-workflow: CALL_INVITE uses the same PUSH channel (90s TTL, data-only FCM).
Same-workflow: GAME_REQUEST / GAME_UPDATED for challenges and session updates.
Depends-on: live inbox fan-out on notifications:* channels.
Broader notifications triggers and preferences API docs are still expanding; treat the type table above as the verified Peer Games addendum.
Use Founder / Developer tabs in the docs sidebar. Deep FCM setup lives on Push Notifications (FCM).
Ring delivers in-app and push notifications for opportunities, messages, entity updates, wallet events, and peer-game challenges.
| Type | Purpose |
|---|---|
OPPORTUNITY | New opportunities and applications |
MESSAGE | New messages and conversations |
ENTITY | Entity updates and invitations |
SYSTEM | Platform announcements |
WALLET | Transaction and balance notifications |
GAME_REQUEST | Peer-game challenge in chat (game_request) |
GAME_UPDATED | Game accepted / finished updates |
CALL_INVITE | Incoming WebRTC call when the callee tab is hidden or closed |
GAME_* types appear in notification preferences UI and interactive notify (features/chat/lib/interactive-notify.ts). Offline FCM for game invites: after !deliveredLive, createInvite waits ~500ms and rechecks getTunnelHub().isUserConnected(peer) before NotificationType.GAME_REQUEST + FCM (not the call ringtone). Hub presence is process-local today — multi-pod false offline is backlog. See Peer Games.
notifications:inbox / bell UIgetFcmVapidKey() / NEXT_PUBLIC_FIREBASE_VAPID_KEY) → fcm_tokens. Safari / empty PushManager uses dedicated VAPID_* → push_subscriptions. Server PUSH fans out both tables; empty RFC on Chrome is a no-op, not a second delivery.Granular enable/disable by type and channel, including quiet hours — see preferences components under features/notifications/.
Deep-dive: per-user FCM + RFC fan-out, iOS Home Screen, and empty RFC-on-Chrome no-op.
Same-workflow: CALL_INVITE uses the same PUSH channel (90s TTL, data-only FCM).
Same-workflow: GAME_REQUEST / GAME_UPDATED for challenges and session updates.
Depends-on: live inbox fan-out on notifications:* channels.
Broader notifications triggers and preferences API docs are still expanding; treat the type table above as the verified Peer Games addendum.
See-also: interactive notify kit that emits typed notifications.
See-also: interactive notify kit that emits typed notifications.
See-also: interactive notify kit that emits typed notifications.