AI-powered GitHub talent sourcing for technical recruiting. Find engineers by what they've actually built — their open-source contributions, repositories, and shipped code — not just their LinkedIn headlines.
SourceKit turns GitHub's open-source graph into a recruiting pipeline:
- Research — Paste a job description or describe a role, and AI builds a sourcing strategy: target repos to mine, companies to source from, skills to weight, and EEA (Evidence of Exceptional Ability) signals to detect.
- Search — Finds real GitHub contributors matching your criteria, scores them 0–100, and surfaces hidden gems (high-quality, low-visibility engineers).
- Enrich — Looks up LinkedIn profiles via Exa semantic search and finds contact information.
- Pipeline — Kanban board to track candidates through Contacted → Not Interested → Recruiter Screen → Rejected → Moved to ATS.
- Outreach — AI writes personalized messages referencing the candidate's actual open-source work.
- Bulk Actions — Compare, rank, and draft outreach for multiple candidates with an AI chat interface.
- Frontend: React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui, Radix UI
- Backend: Supabase (PostgreSQL, Edge Functions, Auth)
- AI: Anthropic Claude (query parsing, candidate scoring, research, outreach generation)
- Search: GitHub REST API (contributor mining, profile enrichment), Exa (LinkedIn lookup)
- Payments: Stripe
- Hosting: Vercel
- Analytics: Vercel Web Analytics
- Node.js 18+ (install via nvm)
- A Supabase project
- API keys for: GitHub, Anthropic, and Exa
# Clone the repo
git clone https://github.com/mrNLK/SourceProof.git
cd SourceProof
# Install dependencies
npm install
# Configure environment variables
cp .env.example .env
# Edit .env with your actual keys (see below)
# Start the dev server
npm run devCopy .env.example to .env and fill in your values:
| Variable | Purpose |
|---|---|
VITE_SUPABASE_URL |
Your Supabase project URL |
VITE_SUPABASE_PUBLISHABLE_KEY |
Supabase anon/public key |
VITE_SUPABASE_PROJECT_ID |
Supabase project ID |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key (Edge Functions only) |
GITHUB_TOKEN |
GitHub personal access token |
ANTHROPIC_API_KEY |
Anthropic API key |
EXA_API_KEY |
Exa API key |
PARALLEL_API_KEY |
Parallel API key for Fast Entity Search and research |
FINDEM_API_KEY |
Findem signal import key |
APOLLO_API_KEY |
Apollo enrichment key |
CLAY_API_KEY |
Clay fallback enrichment key |
MICROSOFT_* |
Optional future Microsoft Entra/Graph OAuth and mailbox settings |
SALESFORCE_* |
Optional future Salesforce connected app and API settings |
BD_* |
BD operator identity, compliance footer, unsubscribe, and sending-domain settings |
STRIPE_SECRET_KEY |
Stripe secret key |
STRIPE_WEBHOOK_SECRET |
Stripe webhook secret |
STRIPE_PRICE_ID |
Stripe price ID |
Important: The
VITE_SUPABASE_URLandVITE_SUPABASE_PUBLISHABLE_KEYmust also be set as environment variables in your Vercel project settings for the production deployment to work.
- Connect this repo to a Vercel project.
- Add all
VITE_*environment variables in Vercel → Project Settings → Environment Variables. - Deploy. The
vercel.jsonconfig handles SPA routing automatically.
SellKit is a standalone business-development sourcing workflow at /sellkit. The legacy /bd-sourcing path also loads the same app. It uses the current Vite/React app, Supabase Postgres and Edge Functions, Vercel hosting, Exa Websets, Exa Company Search, Exa Agent, and Parallel server-side integrations. It does not introduce a separate backend or migrate the repo to Next.js.
V1 is manual-first because Microsoft Graph and Salesforce policy approval is unknown. The app can source, enrich, score, review, and prepare outreach without those integrations.
What is implemented:
- Deterministic scoring, human review gating, optional CRM/dedup helpers, target state machine, and template-bound email drafting.
- A login-gated review queue UI with Mariah onboarding saved to Supabase, signal evidence, verified-email status, review gate status, copyable email drafts,
.emldownload, CRM CSV export, and Sales Navigator note text. - Supabase migration for
bd_companies,bd_contacts,bd_signals,bd_targets,bd_outreach_touches,bd_email_messages,bd_salesforce_links,bd_suppressions,bd_scores, andbd_audit_logs. - A
bd-sourcingEdge Function with safe action routing and server-side Parallel Fast Entity Search at/v1beta/findall/entity-search. - Server-side Exa Company Search for structured company seeds and Exa Agent for async multi-hop target discovery with structured output.
- Microsoft Graph and Salesforce write actions are optional future upgrades and remain blocked in v1.
Manual setup before first real run:
- Rotate any API key that has been pasted into chat or logs.
- Add
PARALLEL_API_KEYandEXA_API_KEYto Supabase Edge Function secrets and Vercel environment variables. The browser never receives these keys. - Add Apollo and Clay keys, then confirm the exact people-match and email-verification fields.
- Add Findem credentials or export/import flow for hiring, executive-change, and funding signals.
- Fill
BD_PHYSICAL_ADDRESS,BD_UNSUBSCRIBE_BASE_URL,BD_OPERATOR_NAME, andBD_OPERATOR_EMAIL. - Sign in to
/sellkit, then complete the onboarding prompts for target companies, buyer titles, offer, buying signals, and email voice. - Keep
BD_INTEGRATION_MODE=manual,APOLLO_SEQUENCE_ENABLED=false, andINSTANTLY_SEQUENCE_ENABLED=falseuntil integrations are explicitly approved.
No CRM/customer/prospect suppression upload is required for v1 because a human approves every draft before any handoff or export.
Optional future setup, only if company policy allows it:
- Register a Microsoft Entra app for Microsoft Graph OAuth to create Outlook drafts or send through M365.
- Create a Salesforce connected app to run live dedup and write Leads/Contacts/Tasks.
Compliance defaults:
- No automatic email send, Outlook draft creation, Salesforce write, or Sales Navigator action executes in v1.
- Approved email is copied/downloaded for manual sending. Approved CRM records export as CSV for manual import.
- LinkedIn and Sales Navigator are manual only. The app prepares note text and profile links; it does not log in, scrape, or automate LinkedIn.
- Emails require verified work email, verified signal evidence, physical address, and one-click unsubscribe.
| Command | Description |
|---|---|
npm run dev |
Start dev server (localhost:5173) |
npm run build |
Production build |
npm run preview |
Preview production build locally |
npm run lint |
Run ESLint |
npm test |
Run tests (Vitest) |
src/
├── components/ # UI components (search, pipeline, research, bulk actions)
├── hooks/ # Custom React hooks (subscriptions, etc.)
├── integrations/ # Supabase client and type definitions
├── lib/ # API helpers, utilities, and scoring (eea.ts)
├── pages/ # Route-level page components
├── services/ # External service integrations (Exa/Websets)
├── types/ # TypeScript type definitions
└── data/ # Static data and constants
supabase/
└── functions/ # Supabase Edge Functions (search, enrich, research, etc.)
- Tester Guide — Full walkthrough of every feature, search tips, and workflow diagrams.
- Security Policy — How secrets and API keys are handled.
This project is source-available. The code is publicly visible for transparency and review, but no license is granted for redistribution or commercial use. All rights reserved by the author.