UGC Reactions from Real Creators
실제 크리에이터 영상은 11달러, 이미지 8달러. 맞춤 제작은 영상당 25달러부터, 최소 250달러, 상업 라이선스 포함
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
deskfrog mail
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Email marketing made simple. Free with the Desk Frog badge, paid plans remove it. Next.js 15 · Supabase (Postgres + Auth) · Amazon SES.
Dashboard: deskfrogmail.com · API: deskfrogmail.com/api/v1
App (ArgusIQ, Midas, …) ──API key──▶ /api/v1/* ──▶ messages table (the queue)
Dashboard user ──────────────────────▶ server actions ─┘ │
worker (every minute)
│ claim_messages() — SKIP LOCKED
▼
Amazon SES ──events──▶ SNS ──▶ /api/ses/events
(bounce/complaint → suppress,
open/click → stats, webhooks out)
workspace_id. Dashboard users go through RLS; the API and worker use the service role.plans table (AUD/month incl. GST, yearly = 10× monthly): Free $0 (500 contacts, 1,000 sends, badge) · Tadpole $19 (1,500 / 9,000) · Bullfrog $59 (5,000 / 30,000) · King Frog $129 (15,000 / 90,000). Over 15,000: custom. (The club row is retired.) Limits are enforced when queuing: contacts, monthly sends, daily sends. New workspaces are capped at 100/day for their first 7 days.<workspace-slug>@SHARED_SENDING_DOMAIN with the customer's address as Reply-To, and every email carries the badge. Paid plans send from their own verified domain.List-Unsubscribe headers, unsubscribes honoured instantly.Migrations are in supabase/migrations (already applied to project tbvcxjztgvcwifygdcjf).
Auth → enable email/password. Set the Site URL to https://deskfrogmail.com.
ap-southeast-2)send.deskfrogmail.com). Not deskfrog.studio, which keeps the studio's mail reputation clean. Add the DKIM CNAMEs, plus SPF/DMARC.deskfrog-mail:
https://deskfrogmail.com/api/ses/events. The subscription is confirmed automatically, and signatures are verified.ses:SendEmail, ses:CreateEmailIdentity and ses:GetEmailIdentity.Copy .env.example to .env.local and fill it in.
Call POST /api/cron/worker with Authorization: Bearer $CRON_SECRET every minute. It releases scheduled campaigns, drains the queue at SES_MAX_PER_SECOND, and delivers webhooks. Options:
pg_cron + pg_net:
select cron.schedule('deskfrog-worker', '* * * * *', $$
select net.http_post('https://deskfrogmail.com/api/cron/worker',
headers => jsonb_build_object('Authorization', 'Bearer <CRON_SECRET>'));
$$);
All requests: Authorization: Bearer dfm_live_… (create keys in Settings). JSON in, { data } or { error: { code, message } } out.
| Method | Path | |
|---|---|---|
| GET / POST | /contacts | List (filters: status, tag, email, external_id) / upsert one or { contacts: [...] } up to 1000. consent_source is required |
| GET / PATCH / DELETE | /contacts/:id | add_tags, remove_tags, fields, status: "unsubscribed" |
| GET / POST | /lists | |
| POST / DELETE | /lists/:id/members | { contact_ids } or { emails } |
| GET / POST, GET / PATCH / DELETE | /templates, /templates/:id | |
| GET / POST | /campaigns | Draft from html or template_id; target list_id and/or tag_filter |
| GET / PATCH / DELETE | /campaigns/:id | DELETE cancels a scheduled or sending campaign |
| POST | /campaigns/:id/send | Send now, or { scheduled_at } |
| GET | /campaigns/:id/stats | |
| POST | /send | Transactional email to one recipient. data for {{merge}} and idempotency_key supported |
| GET / POST, DELETE | /webhooks, /webhooks/:id | The secret is returned once |
| GET / POST, GET / DELETE | /domains, /domains/:id | Paid plans. GET re-checks verification |
| GET | /usage | Plan, limits and usage |
Merge tags: {{first_name}}, {{last_name}}, {{email}}, any key in fields, with fallbacks: {{first_name|racer}}.
curl -X POST https://deskfrogmail.com/api/v1/contacts \
-H "Authorization: Bearer $DFM_KEY" -H "Content-Type: application/json" \
-d '{"email":"[email protected]","first_name":"Jess","external_id":"argus-member-123",
"tags":["budget-enduro","2026-season"],"fields":{"class":"Outright","car_number":"42"},
"consent_source":"argusiq_entry_form"}'
Events: email.sent, email.delivered, email.bounced, email.complained, email.opened, email.clicked, email.failed, contact.unsubscribed, workspace.paused.
Verify DeskFrog-Signature: t=<unix>,v1=<hex>, where v1 = HMAC_SHA256(secret, "<t>.<raw body>"). Reject anything where t is older than 5 minutes. Failed deliveries retry with backoff (1m → 24h).
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗