UGC Reactions from Real Creators
真实创作者视频库,视频仅需 11 美元,图片仅需 8 美元。定制化制作起价 25 美元/视频,最低消费 250 美元。包含商业授权。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
Clipping for BoDoggos Ent
翻译准备中
正在加载完整 README。
查看完整 README ↗Clipper campaign desk. X-only. Clippers submit tweets, we track impressions for 7 days, pay $4 CPM (capped) in USDC. See CLIPPER_APP_SPEC.md for the full build spec.
Next.js 15 (App Router) · React 19 · TypeScript · Tailwind · Supabase (Postgres + Auth) · twitterapi.io · Resend · Vercel Cron.
npm install
cp .env.example .env.local # fill in keys (see below)
npm run dev
| Var | Where to get it |
|---|---|
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY | Supabase project settings → API |
TWITTERAPI_IO_KEY | twitterapi.io dashboard |
X_OAUTH_CLIENT_ID / X_OAUTH_CLIENT_SECRET / X_OAUTH_REDIRECT_URI | X Developer Portal → OAuth 2.0 |
RESEND_API_KEY / RESEND_FROM_EMAIL | Resend (used by Supabase Auth for magic-link delivery) |
CRON_SECRET | any random string; set the same value on Vercel |
NEXT_PUBLIC_APP_URL | your deployed origin (e.g. https://yourdomain.com) |
Run in order (Supabase SQL editor or CLI):
supabase/migrations/0001_init.sql — schemasupabase/migrations/0002_rls.sql — row-level securitysupabase/seed.sql — seeds the active campaignsupabase/seed_admin.sql — after an admin signs in once via magic link, edit the email and run to grant adminnpm run dev # local dev server
npm run build # production build
npm run typecheck # tsc --noEmit
npm test # vitest (URL parser, payout calc, poll cadence)
/ landing/auth/magic magic-link sign-in/api/auth/x/start → X OAuth (PKCE)/onboarding first-time clipper handle entry/dashboard clipper KPI + submit + clips/dashboard/clips/[id] clip detail + impressions chart/dashboard/settings/admin, /admin/clippers, /admin/clippers/[id], /admin/clips, /admin/payouts, /admin/config/api/cron/poll-clips (Vercel Cron, hourly)/api/cron/finalize-clips (Vercel Cron, daily at 01:00 UTC)/api/admin/clips (machine-to-machine read API — see below)Read-only endpoint for external tools (e.g. the deliverable tracker) to pull
clips for a partner. Auth is a static bearer secret — set CLIPS_API_KEY in
the environment and send it as Authorization: Bearer <CLIPS_API_KEY> (the
header x-api-key: <CLIPS_API_KEY> is also accepted).
# Filter by partner (slug or label, case-insensitive exact match)
curl "https://flickclip.io/api/admin/clips?partner=acme" \
-H "Authorization: Bearer $CLIPS_API_KEY"
# Filter by creator (substring, case-insensitive — "Nick" matches "Nick",
# "Easy, Nick", "Nick, Easy", etc.)
curl "https://flickclip.io/api/admin/clips?creator=Nick" \
-H "Authorization: Bearer $CLIPS_API_KEY"
# Combine — partner AND creator
curl "https://flickclip.io/api/admin/clips?partner=acme&creator=Nick" \
-H "Authorization: Bearer $CLIPS_API_KEY"
# Or pass filters in a JSON body
curl "https://flickclip.io/api/admin/clips" \
-H "Authorization: Bearer $CLIPS_API_KEY" \
-H "content-type: application/json" \
-d '{"partner":"acme","creator":"Nick"}'
Omit both partner and creator to return all clips. Rejected clips are always excluded.
Response:
{
"partner": "Acme",
"creator": "Nick",
"count": 2,
"clips": [
{
"handle": "someclipper",
"submission_date": "2026-05-20T18:03:11.000Z",
"tweet_link": "https://x.com/someclipper/status/123",
"creator": "Nick",
"partner": "Acme",
"impressions": 958
}
]
}
impressions is the locked-in final_impressions for completed clips, or the latest polled impressions while tracking — matches the count shown in /admin/clips.
partner and creator in the envelope echo back what was queried (null if omitted). An unknown partner returns 404 with the list of available_partners; a creator substring that matches no creator tag returns 404 with available_creators.
.env.example.vercel.json. Provide CRON_SECRET and Vercel will send it as Authorization: Bearer <secret> to the cron routes.X_OAUTH_REDIRECT_URI in Vercel env.