Customer Engagement Platform for Email, Push Notifications, & SMS
모바일 푸시, 웹 푸시, SMS, 이메일, 인앱 메시징 분야 세계 최고, 200만 기업이 신뢰해 연간 120억 건 이상 전송
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.