ColdCallReps by MarketPounce — SDR recruiting door into the MarketPounce growth desk. Train with AI voice, prove your skills, get paid on brand deals.
Auth/accounts live on MarketPounce (Clerk application_name: MarketPounce). This site never hosts login — /sign-in and /sign-up redirect there with ?role=REP&from=ccr.
Repo: https://github.com/optimald/coldcallreps
- Clerk auth · Stripe checkout/portal · minutes gate before calls
- xAI Realtime via Cloudflare Durable Object (or local
server.js) - Scenarios: Gatekeeper→DM, Gatekeeper, Pricing, Rejection, $500 Website Pitch, Sell Me This Pen
- Scorecards, live coach, session detail + integrity signals
- Points, streaks, badges, global + org leaderboards
- Hiring board with headline/bio · referrals (
?ref=) · plan deep-links (?plan=) - Privacy + Terms
- Public
/r/[slug]profiles · clip highlights publish to profile - Recruiter Direct Connect + inbox · job detail + apply
- Weekly Top Reps digest (Resend cron) · academy members/progress
- Brand packs in trainer · sponsored boards + bounties
- Certified closer on score ≥80 · attribution events
- Session highlight clips → public profile
- CRM workspace link + coach memory → live coach
- Tournaments + season passes · score sync from practice
- Playbook editor → trainer/coach
- API keys +
/api/v1/leaderboard+/api/v1/profiles/:slug+/api/v1/sessions - Roles (Rep / Recruiter / Brand / Manager / Superadmin) +
/admin - Session gate, integrity gates, webhooks, bounty credits, account export/delete
cp .env.example .env.local
# fill: TURSO_AUTH_TOKEN (Turso), XAI_API_KEY, Clerk, Stripe, RAPIDAPI_MAPS_KEY
# DATABASE_URL stays file:./prisma/dev.db for Prisma CLI; app uses Turso via adapter
npm install
npx prisma generate
npm run db:push:turso # push schema to Turso (needs TURSO_* in .env.local)
npm run db:patch:role-modes # Turso: unlockedRoles + onboarding timestamps (safe re-run)
# optional local file DB: npx prisma db push
npm run seed:demo-brands && npm run seed:dispatchnode
npm run dev # local Node bridge
# OR: npm run dev:next + npm run dev:voice
# NEXT_PUBLIC_TRAINER_REALTIME_URL=ws://127.0.0.1:8787/api/trainer/realtimeDatabase: Turso (libSQL) via @prisma/adapter-libsql. Set TURSO_DATABASE_URL + TURSO_AUTH_TOKEN in .env.local (gitignored). Prisma CLI uses DATABASE_URL=file:./prisma/dev.db.
Browser (Vercel Next.js)
→ wss NEXT_PUBLIC_TRAINER_REALTIME_URL
→ Cloudflare DO TrainerSession
→ xAI Realtime + POST APP_ORIGIN/api/trainer/prompt
End call → scorecard → Prisma + points / minutes
| Who | Pays | What |
|---|---|---|
| SDRs | $0 required | Free practice to polish + clear the gate; campaigns free; earn from brand escrow |
| Brands | Escrow + desk | Fund outcomes and the growth tool |
Optional Starter ($7) / Pro ($29) / Org ($60/user) buy extra AI practice volume for teams or heavy use — never required to earn.
| Plan | Price | Minutes |
|---|---|---|
| Free | $0 | 15+ on signup (TRIAL_MINUTES) — enough to clear the gate |
| Starter | $7/mo | 100 / cycle (optional) |
| Pro | $29/mo | 600 / cycle (optional) |
| Org (TEAM) | $60/user/mo | 60 / user / mo pooled (optional) |
Marketplace: ~20% platform fee on payouts via Stripe Connect (destination charges), capped.
Ops: Stripe Price IDs must match amounts. Set TRIAL_MINUTES=15 on Vercel production.
- Vercel for Next.js · Cloudflare DO for voice (
npm run deploy:voice) - Set
NEXT_PUBLIC_TRAINER_REALTIME_URL+ workerAPP_ORIGIN - Stripe webhook →
/api/billing/webhook - Set
TRIAL_MINUTES=15on Vercel production (match.env.example) - Optional Starter/Pro Stripe prices for teams/heavy practice only — not the SDR recruitment pitch