Customer Engagement Platform for Email, Push Notifications, & SMS
The world's leader for mobile push notifications, web push, SMS, email and in-app messaging. Trusted by 2 million+ businesses to send 12 billion+ messages per…
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Smart global campaigns, clean lists, guaranteed delivery.
Open http://127.0.0.1:3000. Log in, then invite a partner from Settings.
You do not need a custom domain. Connect Gmail and campaigns send as that Google address (about 500/day on a personal Gmail).
1. Open Google Cloud Console
2. Create a project → APIs & Services → enable Gmail API
3. OAuth consent screen: External, app name DeliverIQ, add your Gmail as a test user
4. Credentials → Create OAuth client ID → Web application
5. Authorized redirect URI (must match exactly):檢視完整 README ↗Smart global campaigns, clean lists, guaranteed delivery.
docker compose up -d
npm install
npx prisma migrate deploy
npm run db:seed
npm run dev
npm run dev:worker
Open http://127.0.0.1:3000. Log in, then invite a partner from Settings.
You do not need a custom domain. Connect Gmail and campaigns send as that Google address (about 500/day on a personal Gmail).
http://127.0.0.1:3000/auth/google/callback
.env:GOOGLE_CLIENT_ID=....apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=....
GOOGLE_REDIRECT_URI=http://127.0.0.1:3000/auth/google/callback
If you later host for free (Render/Railway), add that URL as a second redirect URI, e.g. https://your-app.onrender.com/auth/google/callback. Still no custom domain.
Only needed if you later buy a domain and want higher volume. Until Gmail is connected or SendGrid is live, jobs are logged locally.
waitUntil), so sending keeps going after the tab is closed or minimized.users.next_send_at. Every send first claims that slot with one atomic UPDATE ... WHERE next_send_at IS NULL OR next_send_at <= now() and moves it forward by the gap plus random jitter (Settings, default 10 s + up to 5 s, minimum 5 s). Overlapping runs can never double send or break the gap.maxDuration 300 s in vercel.json, the Hobby maximum with Fluid compute, read at runtime with getDeadline()). If it sent something and work is left, it starts the next run by calling /cron/send-tick on itself. A lease row (scheduler_leases) keeps it to one run at a time..github/workflows/send-tick.yml (every 5 min), the daily Vercel Cron, and optionally an every minute external pinger such as cron-job.org calling GET https://deliveriq-eosin.vercel.app/cron/send-tick with header Authorization: Bearer <CRON_SECRET>.campaign_recipients.sent_at since midnight Africa/Nairobi for that sender. Over the cap, emails stay queued and continue after midnight (next cron or pinger call).CRON_SECRET (required for the cron endpoint and self chain), SEND_RUN_SECONDS (default 270), SEND_SELF_CHAIN=false to turn chaining off.npm test. Database tests run only with TEST_DATABASE_URL pointing at a throwaway database.