Dashboard
notify.ezy.link · Live push server
TOTAL SUBSCRIBERS
12,400
↑ +340 this week
WEB PUSH
5,200
↑ +120 this week
APP PUSH
4,800
↑ +158 this week
DESKTOP
2,400
↑ +62 this week
🌐
Web Push
Browser-native via Web Push Protocol. Chrome, Firefox, Edge, Safari.
SENT TODAY
8,421
CTR
6.2%
DELIVERED
98.4%
OPT-IN
14.1%
📱
App Push
Native iOS & Android via APNs and FCM. Rich media, actions, deep links.
SENT TODAY
11,230
CTR
8.7%
DELIVERED
96.1%
OPT-IN
61.3%
🖥️
Desktop
Windows, macOS, Linux via Electron or system APIs. High-visibility.
SENT TODAY
3,840
CTR
12.4%
DELIVERED
99.1%
OPEN RATE
34.2%
Live ActivityView all →
Campaign "New Feature Drop" sent
Transactional alert: Order #8821
Desktop: System maintenance alert
Segment "Power Users" flash promo
Quick Send
Compose Campaign
Create and schedule multi-channel campaigns
SEGMENT:
All Users
Power Users
Inactive 7d
Malaysian Market
Enterprise
+ Custom
📢Campaign Builder
Live Preview
Web — Chrome
🌐
notify.ezy.link
Notification Title
Your message here...
App — iOS
9:41●●● 100%
📢
Your App · Notify
Notification Title
Your message here...
now
Desktop — macOS
🖥️
Notify
now
Notification Title
Your message here...
Open
Later
Dismiss
Analytics
Channel performance and engagement
Notifications Sent
Web
App
Desktop
Web CTR
6.2%
↑ +0.8% vs last week
App CTR
8.7%
↑ +1.2% vs last week
Desktop CTR
12.4%
↑ +2.1% vs last week
Audience
12,400 total subscribers
SUBSCRIBERCHANNELSSUBSCRIBEDLAST SEENSTATUS
ET
im@edisontkp.comMar 16
Just now
Active
AT
ahmad.t@company.myJan 12
2 hrs ago
Active
SN
siti.n@glc.gov.myFeb 3
1 day ago
Active
ML
mei.l@sme.com.myMar 1
3 hrs ago
Active
DW
d.wong@tech.coNov 14
14 days ago
Inactive
API Keys
Live credentials for notify-push worker
🔑 Live Credentials● Active
API Secreted95b129ad1968cdf970b444cafc95c7efd099916ce1aef86ce7371535795aa0click to copy
VAPID Public KeyBDBtPpOfhTEFboLXIVG3ScJAaJ27_EOlCwC644iw0bV0YwWHGZmWVz9x0FfHtGJBBMYrQL963YwQ1c8aiO_9m6gclick to copy
VAPID Subjectmailto:im@edisontkp.comclick to copy
KV Namespace734cf4753ece48ff9c1811c9529922f2click to copy
Worker URLhttps://notify-push.xtremecorecomputer.workers.devclick to copy
Production URLhttps://notify.ezy.linkclick to copy
⚠️ Pending Secrets● Needs Setup
FCM_PROJECT_IDGet from Firebase Console → Project Settings → Service Accounts
FCM_CLIENT_EMAILfirebase-adminsdk-xxxxx@project.iam.gserviceaccount.com
FCM_PRIVATE_KEY-----BEGIN PRIVATE KEY----- (from .json download)
APNS_KEY_ID10-char key ID from developer.apple.com → Keys
APNS_TEAM_ID10-char Team ID (top right of Apple Developer portal)
APNS_BUNDLE_IDcom.yourapp.ios
APNS_PRIVATE_KEYFull content of .p8 file
Set missing secrets
# Run in your terminal (CF token already in wrangler.toml)
wrangler secret put FCM_PROJECT_ID --name notify-push
wrangler secret put FCM_CLIENT_EMAIL --name notify-push
wrangler secret put FCM_PRIVATE_KEY --name notify-push
wrangler secret put APNS_KEY_ID --name notify-push
wrangler secret put APNS_TEAM_ID --name notify-push
wrangler secret put APNS_BUNDLE_ID --name notify-push
wrangler secret put APNS_PRIVATE_KEY --name notify-push
Web Push
Browser notifications via VAPID / RFC 8291 — Live on notify.ezy.link
// 1. Register service worker (sw.js is in your Pages deployment)
const reg = await navigator.serviceWorker.register('/sw.js');
await navigator.serviceWorker.ready;
// 2. Get VAPID public key from live server
const { publicKey } = await fetch('https://notify.ezy.link/vapid-key').then(r => r.json());
// 3. Subscribe
const sub = await reg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: publicKey });
// 4. Register with Notify
await fetch('https://notify.ezy.link/register', {
method: 'POST',
headers: { 'Authorization': 'Bearer YOUR_API_SECRET', 'Content-Type': 'application/json' },
body: JSON.stringify({ channel: 'webpush', subscription: sub, userId: 'user_123' })
});
App Push
Native iOS (APNs) & Android (FCM) — Live on notify.ezy.link/send/apns & /send/fcm
// Android — get FCM token and register
FirebaseMessaging.getInstance().token.addOnSuccessListener { token ->
registerWithNotify(token, channel = "fcm", platform = "android")
}
// iOS — get APNs token and register (Swift)
func application(_ app: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken data: Data) {
let token = data.map { String(format: "%02x", $0) }.joined()
// POST to https://notify.ezy.link/register
registerWithNotify(token: token, channel: "apns", platform: "ios")
}
// Send via API
POST https://notify.ezy.link/send/fcm
Authorization: Bearer YOUR_API_SECRET
{ "token": "FCM_TOKEN", "title": "Hello!", "body": "From Notify" }
Desktop
Windows, macOS, Linux via Electron / OS notification APIs
// Electron main process
const { Notification } = require('electron');
const notif = new Notification({
title: 'System Alert',
body: 'Standup in 10 minutes',
icon: path.join(__dirname, 'icon.png')
});
notif.show();
notif.on('click', () => mainWindow.focus());
// Or via Notify REST API
POST https://notify.ezy.link/send/apns
{ "token": "APNS_TOKEN", "title": "Alert", "body": "Message", "pushType": "alert" }