Strategy
-Role title, JD, or hiring URL parsed into target repos, company map, and skill graph.
-diff --git a/.tmp.driveupload/164315 b/.tmp.driveupload/164315 deleted file mode 100644 index e0e3238..0000000 --- a/.tmp.driveupload/164315 +++ /dev/null @@ -1,18 +0,0 @@ -// vite.config.ts -import { defineConfig } from "file:///Users/mike/SourceProof/FounderFinder/node_modules/vite/dist/node/index.js"; -import react from "file:///Users/mike/SourceProof/FounderFinder/node_modules/@vitejs/plugin-react/dist/index.js"; -import tailwindcss from "file:///Users/mike/SourceProof/FounderFinder/node_modules/@tailwindcss/vite/dist/index.mjs"; -import path from "path"; -var __vite_injected_original_dirname = "/Users/mike/SourceProof/FounderFinder"; -var vite_config_default = defineConfig({ - plugins: [react(), tailwindcss()], - resolve: { - alias: { - "@": path.resolve(__vite_injected_original_dirname, "./src") - } - } -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlUm9vdCI6ICJmaWxlOi8vL1VzZXJzL21pa2UvU291cmNlUHJvb2YvRm91bmRlckZpbmRlci8iLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9taWtlL1NvdXJjZVByb29mL0ZvdW5kZXJGaW5kZXJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9taWtlL1NvdXJjZVByb29mL0ZvdW5kZXJGaW5kZXIvdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL21pa2UvU291cmNlUHJvb2YvRm91bmRlckZpbmRlci92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgcmVhY3QgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXJlYWN0XCI7XG5pbXBvcnQgdGFpbHdpbmRjc3MgZnJvbSBcIkB0YWlsd2luZGNzcy92aXRlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwbHVnaW5zOiBbcmVhY3QoKSwgdGFpbHdpbmRjc3MoKV0sXG4gIHJlc29sdmU6IHtcbiAgICBhbGlhczoge1xuICAgICAgXCJAXCI6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIFwiLi9zcmNcIiksXG4gICAgfSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFpUyxTQUFTLG9CQUFvQjtBQUM5VCxPQUFPLFdBQVc7QUFDbEIsT0FBTyxpQkFBaUI7QUFDeEIsT0FBTyxVQUFVO0FBSGpCLElBQU0sbUNBQW1DO0FBS3pDLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQUEsRUFDaEMsU0FBUztBQUFBLElBQ1AsT0FBTztBQUFBLE1BQ0wsS0FBSyxLQUFLLFFBQVEsa0NBQVcsT0FBTztBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg== diff --git a/QA-Report-2026-02-28.html b/QA-Report-2026-02-28.html deleted file mode 100644 index 4eb61cd..0000000 --- a/QA-Report-2026-02-28.html +++ /dev/null @@ -1,685 +0,0 @@ - - -
- - -getsourcekit.vercel.app
-February 28, 2026
-All 8 navigation sections render correctly with dark-mode styling. Authentication working (michael.f.rubino@gmail.com). Credit system displays 10/10 searches. Form validation enforced on empty submissions. No app-specific console errors detected.
-One functional bug found: History page items do not load cached results. Clicking a history entry re-fires the search API call (confirmed via network trace showing OPTIONS preflight to github-search edge function) instead of loading previously stored candidates from the database.
-| Section | -Status | -Notes | -
|---|---|---|
| New Search | -PASS | -Both tabs (Role + Company, Job Description), form validation, example chips, credit counter | -
| Results | -PASS | -Search bar, workflow stepper, example chips render correctly | -
| History | -PARTIAL | -Renders correctly with date grouping and result counts. Clicking items fails to load cached results (BUG-001) | -
| Pipeline | -PASS | -Kanban board, 5 stages, candidate cards with scores, sort/export buttons | -
| Watchlist | -PASS | -Candidate entries, list management, filter bar, + New List button | -
| Bulk Actions | -PASS | -Table view, sortable columns, score slider, AI action panel, export | -
| Websets | -PASS | -Create form with query/criteria/enrichment fields, empty state renders | -
| Settings | -PASS | -Outreach defaults, API keys masked, webhook URLs, integrations | -
| Parameter | -Value | -
|---|---|
| URL | getsourcekit.vercel.app |
| Auth User | michael.f.rubino@gmail.com |
| Branch | main (post-PR #10 merge) |
| Date | February 28, 2026 |
| Browser | Chrome (Cowork VM) |
| Console Errors | 22 exceptions, all from chrome-extension (aeblfdkhhhdcdjpifhhbdiojplfjncoa). Zero app errors. |
Two input tabs: "Role + Company" (Job Title + Company Name fields) and "Job Description" (URL input + text area). Example chips render: Staff ML Engineer @ Anthropic, Senior Robotics @ Figure, etc. Credit counter shows 10/10 searches remaining. "Build Sourcing Strategy" button present. Form validation tested: submitting with empty fields shows red borders + error messages ("Job title is required", "Company name is required"). Form correctly blocks submission.
-Search bar with icon. Workflow stepper: Search > Review & Score > Enrich & Pipeline. Five example search chips: Rust systems engineers, React accessibility experts, ML infrastructure engineers, Kubernetes contributors, Security researchers. Clean layout, no rendering issues.
-Date grouping (Today / Yesterday). Three history entries with query text, relative timestamps, and result counts (15, 60, 15). UI renders correctly. BUG: Clicking "Rust systems engineers" (15 results) navigates to Results page but shows "No engineers found." Clicking "Seeking a technical founder..." (60 results) same behavior. Network trace confirms an OPTIONS preflight to github-search edge function, meaning history click re-fires the API instead of loading cached results. See BUG-001.
-Kanban board with 5 stages: Contacted, Not Interested, Recruiter Screen, Rejected, Moved to ATS. Filter tabs with counts. Thomas Wolf candidate card visible with score 98 and avatar. Sort by Score dropdown. Export button present. Stage columns render with proper spacing.
-Thomas Wolf entry with @thomwolf handle, "Added Feb 27." Default list tab active. + New List button. Filter bar present. Layout clean, card rendering correct.
-Table view with sortable columns: Name, Score, Stage, Languages. "All Stages" dropdown filter. Score range slider (0-100). AI action panel with buttons: Refine Shortlist, Draft Outreach, Search Insights, Candidate Brief, Compare Selected. Export All button at bottom. Rendering clean.
-Create Webset form with search query input, number of results (default 10), expandable Add Criteria section, expandable Add Enrichment section. + Create Webset button. Empty state shown when no websets exist. Form renders correctly.
-Outreach section: Default Target Role ("Senior Software Engineer"), Default Target Company ("Acme Inc"), Role Pitch ("Building the next-gen developer platform"). API Keys section: Exa key masked ("exa-..."), Parallel key masked ("parallel-..."). Integrations: Webhook URL and Slack Webhook URL fields. All inputs editable.
-| Test | -Action | -Expected | -Actual | -Status | -
|---|---|---|---|---|
| Empty form submit | -Click "Build Sourcing Strategy" with empty fields | -Validation errors shown, form blocked | -Red borders + error messages displayed, form not submitted | -PASS | -
| Auth state | -Check user session | -Authenticated user displayed | -michael.f.rubino@gmail.com shown | -PASS | -
| Credit display | -Check search credit counter | -Credit count visible | -10/10 searches displayed | -PASS | -
| Tab switching | -Switch between New Search tabs | -Content swaps cleanly | -Role+Company and Job Description tabs switch correctly | -PASS | -
| History click | -Click history entry with 15 results | -Load cached candidates | -Shows "No engineers found", re-fires API | -FAIL | -
| Console errors | -Check browser console | -No app-specific errors | -22 errors from Chrome extension only, zero from app | -PASS | -
Severity: P2. History page renders correctly with query text, timestamps, and result counts. However, clicking any history entry navigates to the Results page and re-fires the search API call instead of loading previously cached results from the candidates table. The user sees "No engineers found" despite the history entry showing 15 or 60 results.
-| Field | -Detail | -
|---|---|
| Bug ID | BUG-001 |
| Severity | P2 (functional regression, data loss from user perspective) |
| Page | /history -> /results |
| Behavior | Clicking a history entry navigates to Results page with query pre-filled but shows "No engineers found" |
| Expected | History click should load cached candidates from the candidates table using the stored search_id or query_hash |
| Actual | History click re-triggers the github-search edge function. Network trace shows OPTIONS preflight to the search endpoint. |
| Reproduced | Yes, on two separate history entries (15 results and 60 results) |
Root cause hypothesis: The history item click handler passes the query string to the Results page and re-executes the search flow instead of passing a search_id/query_hash that would trigger a lookup against cached candidates. The Results page component likely has a single code path: receive query -> call edge function -> render results. It needs a second path: receive search_id -> SELECT from candidates WHERE search_id = ? -> render results.
-| Step | -Change | -
|---|---|
| 1 | -History item click should pass search_id (or query_hash) as a URL param to the Results page, not just the query string |
-
| 2 | -Results page should check for search_id param on mount. If present, query candidates table directly instead of calling the edge function |
-
| 3 | -The github-search edge function should store a search_id on each search run, associating candidates with that search |
-
| 4 | -History entries should store search_id so they can be linked back to cached results |
-
All PRs resolved. Zero open pull requests on mrNLK/SourceProof. Main branch is current with all merged changes from PR #10.
-| PR | -Title | -Status | -Resolution | -
|---|---|---|---|
| #10 | -Contributors API fixes, search pipeline fixes | -MERGED | -Merged to main. Contains consolidated fixes from all sprint branches. | -
| #8 | -Sprint branch | -CLOSED | -Superseded by #10 | -
| #3 | -feat: full audit remediation - all 20 prompts | -CLOSED | -Superseded by #10 | -
| #2 | -Beta v1 polish: 12 bug fixes from workflow test report | -CLOSED | -Superseded by #10 | -
| File | -Change | -
|---|---|
| supabase/functions/_shared/gate.ts | -Credit gating logic with user_subscriptions table | -
| supabase/migrations/20260228110000_create_user_subscriptions.sql | -Idempotent migration for subscription table | -
| supabase/migrations/20260227100000_increment_searches_rpc.sql | -Atomic search count increment RPC | -
| supabase/migrations/20260228100000_v2_qa_fixes.sql | -Added query_hash, linkedin_fetched_at columns | -
| src/components/DeveloperCard.tsx | -Fixed type casts | -
| src/components/SearchProgress.tsx | -Fixed useEffect deps array | -
| supabase/functions/github-search/index.ts | -Fixed O(n^2) dedup with Map lookup | -
SourceKit is a technical sourcing tool that finds software engineers based on their actual code contributions on GitHub, not self-reported LinkedIn keywords. You enter a role and company. SourceKit builds a sourcing strategy, searches real repositories, and returns a scored pipeline of candidates in minutes. v2.1 adds Harmonic as a fifth API provider for company intelligence: real-time enrichment, poachability scoring, and similar-company expansion. The system now orchestrates five providers: Claude AI (strategy), Exa (search, enrichment, Websets), Parallel (company intel, JD parsing), GitHub (contributor mining), and Harmonic (company data, poachability, team mapping).
-SourceKit orchestrates five API providers through Claude AI, backed by Supabase for data persistence. Exa powers search, enrichment, synthesis, and persistent collections. Parallel handles company intelligence and JD extraction. GitHub provides contributor mining and commit-level scoring. Harmonic delivers company enrichment, poachability scoring, and similar-company expansion.
- - -v2.1 integrates Harmonic's company intelligence API across the entire pipeline. Every candidate's current employer is automatically enriched with funding, headcount, traction metrics, and investors. The strategy builder expands your poach company list using similar-company discovery. A computed poachability score (0-100) tells you which companies' engineers are most likely to be receptive to outreach.
- - -Every candidate receives a composite score from 0 to 100 based on actual GitHub activity, weighted by relevance to the target role. The EEA scoring layer can be enhanced by Harmonic company data to boost signals for candidates at companies in relevant industries or technology domains.
- -Websets are persistent, auto-updating candidate collections powered by Exa's neural search. Define your criteria once and get new matches continuously as new contributors emerge. v2.0 adds Import (bulk ingest from external lists) and webhook Notify (real-time pipeline sync).
-| Limitation | -Impact | -Workaround | -
|---|---|---|
| GitHub-only sourcing | -Misses engineers not active on GitHub | -Use alongside LinkedIn Recruiter for full coverage | -
| Strategy build time (15-20s) | -Brief wait while AI generates the plan | -Expected behavior. Full search takes 30-60s. | -
| JS-rendered job pages | -Some job URLs may still fail to parse | -Paste the JD text directly instead of the URL | -
| LinkedIn URL accuracy | -Links are AI-matched, not guaranteed | -Always verify the LinkedIn profile before outreach | -
| Harmonic cache (7d TTL) | -Company data may be up to 7 days stale | -Cache refreshes automatically. Stale data still valuable for strategy. | -
| Harmonic coverage gaps | -Very early or stealth companies may not be in Harmonic | -Strategy falls back to Claude's original poach list if enrichment fails | -
- Four APIs orchestrated through a single role-driven strategy layer. Each handles a distinct - slice of the sourcing pipeline from semantic discovery to company intelligence. -
-Three layers from role input to ranked pipeline, powered by four external intelligence APIs.
-Role title, JD, or hiring URL parsed into target repos, company map, and skill graph.
-Neural search + GitHub contributor mining scan repos, artifacts, and engineering ecosystems.
-Contribution scoring, company context enrichment, and evidence-weighted pipeline output.
-Role input generates strategy, repos, and poach company targets.
-Staff ML Engineer -Company: Anthropic-
vllm -transformers -pytorch -triton -megatron-lm-
OpenAI -DeepMind -Meta FAIR -Cohere -Databricks-
Large-scale model training -Inference optimization -RLHF and alignment research-
Ranked by code signal from target repos. Builder Score weights AI framework usage 3x.
-| Engineer | -Primary Repo | -Contributions | -Score | -
|---|---|---|---|
| Liang Chen | vLLM | 203 commits | 94 |
| Priya Sharma | PyTorch | 156 commits | 91 |
| Marcus Webb | Megatron-LM | 89 commits | 86 |
| Yuki Tanaka | Triton | 74 commits | 83 |
What drives the system design.
-Repository history and code output outweigh profile metadata.
-Signals come from technical artifacts, not thin matching logic.
-Rank by shipped work, maintenance, and real technical ownership.
-SourceKit ranks talent on commits, repositories, publications, technical artifacts, maintainership, and ecosystem proof. No self-reported resumes. No keyword-first sourcing.
-Role + company, pasted job description, or hiring URL.
-Builds target repos, ecosystem map, and signal criteria.
-Edit repo lists, adjust targets, and tighten evidence filters.
-Scans repositories, contribution histories, and company intelligence.
-Candidates ranked on verified proof and ready for enrichment or outreach.
-SourceKit blends role strategy, artifact discovery, and candidate evaluation into one loop. Search, score, enrich, and export from the same working surface.
-Commits, repo activity, maintainership, talks, papers, and ecosystem evidence all matter more than a polished keyword resume.
-Websets persist. New evidence-bearing candidates flow in automatically as repos, publications, and ecosystems evolve.
-Type a title and company. SourceKit infers stack, identifies repo targets, and builds a search strategy.
-Paste the full job description. SourceKit extracts requirements, seniority, stack, and evidence criteria.
-Drop in a Lever, Greenhouse, or Ashby link. Relevant job content is parsed into the strategy layer.
-AI-weighted GitHub evaluation returns a 0–100 score with dimension-level breakdowns. GitHub activity is weighted by role relevance. No self-reported data.
-SourceKit starts with role intent, turns it into an explicit technical strategy, then moves through artifact discovery, evidence scoring, and auto-updating candidate collections.
-Persistent, sortable, and built for bulk compare, export, and outreach.
-The external intelligence layer combines semantic artifact discovery, engineer-to-company mapping, contribution analysis, and startup intelligence enrichment.
-Semantic discovery of repositories, papers, and technical artifacts used to define and expand candidate search surfaces.
-Engineer-to-company mapping plus ecosystem discovery used to connect individuals, organizations, and adjacent talent clusters.
-Repository mining, commit history, and contribution signal extraction used to score builders on real technical output.
-Startup, founder, and company intelligence enrichment used to add market context and organization-level signal to candidate sets.
-Build Websets around explicit proof of elite performance instead of loose title matching or keyword spray.
-NeurIPS, ICML, ICLR, CVPR, ACL papers, citations, and notable publication venues.
-Top contributors, maintainers, starred projects, and long-lived repository ownership.
-KubeCon, QCon, Strange Loop, DEF CON, and technical teaching at respected venues.
-Patents, major technical press, field-specific awards, and externally validated technical leadership.
-Architectural decisions, RFC ownership, system design authorship, and org-defining engineering work.
-Production ML, distributed training, infra serving 10k+ QPS, or code shipped at true system scale.
-Decompose the role into 3–5 concrete and verifiable signals, then build your collection around those signals directly.
-Surface the evidence itself: talk links, publication venues, contact data, stars, citations, commits, and company context.
-New engineers who publish, ship OSS, or appear in the right ecosystems automatically re-enter the pipeline.
-SourceKit is designed as a role-driven orchestration layer sitting on top of external intelligence APIs and a GitHub-based builder score.
-Presentation - React + TypeScript - Mobile-first / OAuth / Search / Pipeline / Websets - -AI intelligence layer - Claude AI - Exa + Websets - Parallel.ai - GitHub API - Harmonic API - -Data + infrastructure - Supabase - Auth / RLS / Pipeline - Vercel - Stripe - -Builder score - Commit history - Repository quality - Contribution graphs - Role-weighted evaluation-
Use tightly scoped criteria and then broaden only after the evidence framework is correct.
-Top PyTorch, JAX, DeepSpeed, and systems contributors. Enrich with talks, stars, and company context.
-ROS maintainers, Isaac contributors, and applied robotics OSS builders with verified shipped systems.
-Core React, Vue, and design-system contributors with production ownership and architectural depth.
-DEF CON, Black Hat, bug bounty, CVE, and respected advisory signals with strong technical writing.
-“ML infrastructure engineer focused on training pipelines” beats “ML engineer.”
-The repo list is the single biggest lever for result quality. Tighten it first.
-High contributions with lower follower counts often surface stronger and less recruited talent.
-Let the Webset verify matches first, then add contact data, publications, and company context.
-SourceKit converts a role, job description, or hiring link into a sourcing strategy, maps the engineering ecosystem, evaluates visible GitHub signal, and turns strong searches into live candidate pipelines.
-Commits, repos, activity, talks, publications, maintainership, and ecosystem evidence all matter more than polished keyword resumes.
-Start from shipped work, ecosystem position, and visible technical output rather than title matching alone.
-Translate technical hiring briefs into target repos, target companies, and ability criteria.
-Promote successful criteria into monitored Websets that continue surfacing the right talent.
-This is the core system story: define the brief, generate search logic, map the ecosystem, identify visible proof, then move ranked candidates into a pipeline that can actually be worked.
-Paste a JD, enter a role spec, or drop in a Lever, Greenhouse, or Ashby link.
-Exa identifies target repos, peer companies, and ability criteria from the brief.
-Parallel maps company intelligence, engineers at targets, and adjacent search surfaces.
-GitHub commits, repo quality, Harmonic enrichment, and code scoring produce ranked candidates with citations.
-Ranked shortlist with similar-profile expansion, source citations, and stage movement.
-Harmonic is live in SourceKit and expands the product beyond repo and web signal. It adds structured company intelligence, people enrichment, and a stronger bridge between technical proof and company context.
-The Harmonic API key is set in Supabase secrets, the cache migration is pushed, and the `harmonic-search`, `harmonic-enrich`, and `research-role` edge functions are deployed to production.
-Search companies and related entities to widen the sourcing universe around a role.
-Enrich discovered targets with structured company and people graph data.
-Use live research inputs to sharpen the target company map and talent landscape.
-Cache structured responses to reduce duplicate fetches and stabilize repeated research flows.
-GitHub and Exa help identify builders and technical proof. Harmonic adds structured business context so SourceKit can reason about company targets, startup ecosystems, adjacent employers, and candidate-company relationships with more precision.
-Target company discovery for ecosystem mapping. Structured enrichment connecting engineers to startups and adjacent company graphs. Stronger research loops inside role strategy and outreach logic.
-Builder Score is how SourceKit goes deeper than search. It evaluates visible GitHub work with weighted dimensions and returns an AI summary recruiters can use immediately.
-Scan a candidate’s strongest public repos, score code signal from 0-100, and surface evidence around AI usage, build velocity, tooling, testing, documentation, and activity patterns.
-Weighted dimensions: AI mastery 30%, build velocity 20%, tooling 15%, commit bonus 15%, testing and docs signal.
-Search relevance handles stack fit and recency. Builder Score adds deeper technical diligence so rankings feel more defensible and less like heuristics.
-Compare shortlisted candidates, write smarter outreach, and reduce manual GitHub review.
-For hard technical roles, titles are weak proxies. SourceKit helps define evidence of exceptional ability, then packages that logic into persistent, monitorable talent sets.
-Define criteria once, enrich survivors, and monitor over time as new contributors emerge across the ecosystem.
-Create a Webset from proven criteria. Enrich with contact, company, and talk signal. Monitor on a recurring schedule.
-Model the top 5-10% using research output, open-source impact, conference visibility, technical leadership, and scale.
-Published research and citations, open-source impact and maintainership, technical leadership and shipped scale.
-PyTorch, JAX, or DeepSpeed contribution with distributed training signal and technical depth.
-ROS / MoveIt / Drake contribution plus visible robotics research or ecosystem presence.
-Core UI systems work, OSS contribution, and conference or thought-leadership signal.
-High Builder Score with visible AI-native coding and framework usage patterns in public repos.
-This stack is intentionally simple to explain: an operator-facing product layer, an intelligence layer for research and scoring, and an infrastructure layer for auth, data, and billing.
-Role input, search UI, compare, outreach, search history, pipeline, and Websets workflow.
-Ranked profiles, source citations, stage movement, notes, and export paths for operators.
-Role strategy, ability criteria, summaries, and Builder Score narrative.
-Research, neural search, collections, enrichment, and persistent monitoring.
-JD extraction, company intelligence, and ecosystem mapping.
-Structured company graph search, company enrichment, and startup ecosystem intelligence.
-Contributors, commits, repo mining, language patterns, and code quality signals.
-Auth, PostgreSQL, RLS, search history, Websets data, and pipeline state.
-Frontend delivery, edge deployment, and serverless execution.
-Plans, billing, checkout flow, and entitlement enforcement.
-The strongest SourceKit workflows come from narrowing evidence, curating the repo set, and layering enrichments after candidate quality is already established.
-Technical specificity sharpens the repo universe and improves search relevance immediately.
-The repo list is often the highest-leverage quality control surface in the entire workflow.
-Three tight criteria and twenty excellent matches beats one loose criterion and hundreds of noisy profiles.
-Verify quality first, then add Builder Score, contact data, publications, or outreach context.
-- Four APIs orchestrated through a single role-driven strategy layer. Each handles a distinct - slice of the sourcing pipeline from semantic discovery to company intelligence. -
-Three layers from role input to ranked pipeline, powered by four external intelligence APIs.
-Role title, JD, or hiring URL parsed into target repos, company map, and skill graph.
-Neural search + GitHub contributor mining scan repos, artifacts, and engineering ecosystems.
-Contribution scoring, company context enrichment, and evidence-weighted pipeline output.
-Role input generates strategy, repos, and poach company targets.
-Staff ML Engineer -Company: Anthropic-
vllm -transformers -pytorch -triton -megatron-lm-
OpenAI -DeepMind -Meta FAIR -Cohere -Databricks-
Large-scale model training -Inference optimization -RLHF and alignment research-
Ranked by code signal from target repos. Builder Score weights AI framework usage 3x.
-| Engineer | -Primary Repo | -Contributions | -Score | -
|---|---|---|---|
| Liang Chen | vLLM | 203 commits | 94 |
| Priya Sharma | PyTorch | 156 commits | 91 |
| Marcus Webb | Megatron-LM | 89 commits | 86 |
| Yuki Tanaka | Triton | 74 commits | 83 |
What drives the system design.
-Repository history and code output outweigh profile metadata.
-Signals come from technical artifacts, not thin matching logic.
-Rank by shipped work, maintenance, and real technical ownership.
-| ID | -Severity | -Feature | -Issue | -Repro Steps | -Root Cause | -
|---|---|---|---|---|---|
| BUG-001 | -P1 | -Outreach | -Generate Outreach button throws TypeError: "Cannot read properties of undefined (reading 'name')" | -Open any candidate detail panel > scroll to Outreach > click "Generate Outreach" | -Outreach generator reads .name from role/company context object that is undefined. The context from the search strategy is not passed to the outreach component. Also fires 4-5x per click (event handler leak). |
-
| BUG-002 | -P1 | -Candidate Search | -First search from strategy returns 0 results. Clicking "Search with this strategy" navigates to Results page but shows "No engineers found". Retry from Results page succeeds. | -New Search > enter role+company > Build Sourcing Strategy > click "Search with this strategy" | -Race condition: the strategy state (repos, query) is likely not fully transferred to the search component before the edge function call fires. Only an OPTIONS preflight was captured in network monitoring, suggesting the POST either fired before monitoring started or was aborted. | -
| BUG-003 | -P2 | -Pipeline | -Stage dropdown only shows 2 of 5 stages. On candidate detail (from Pipeline), the stage selector dropdown shows only "Contacted" and "Not Interested", missing Recruiter Screen, Rejected, Moved to ATS. | -Pipeline > click candidate card > click stage dropdown (e.g., "Contacted") | -Dropdown options are likely hardcoded to a subset or the stage list is being filtered incorrectly. | -
| BUG-004 | -P2 | -Pipeline | -Stage dropdown UI does not update after stage change. Clicking "Not Interested" from the dropdown changes the stage in Supabase (verified on kanban), but the button still displays "Contacted". | -Pipeline > click candidate > change stage via dropdown > observe button text | -The local React state for the stage button is not re-rendered after the Supabase write succeeds. Likely a missing state update or stale closure. | -
| BUG-005 | -P2 | -Navigation | -Page refresh always navigates to New Search. Refreshing (F5) on Pipeline, Results, or any sub-page redirects to the home/New Search page. | -Navigate to Pipeline (or any page) > press F5 | -React Router likely uses in-memory state for navigation instead of URL-based routes, or the route paths are not defined in the Vercel routing config (SPA fallback). | -
| BUG-006 | -P2 | -Outreach | -Generate Outreach handler fires multiple times per click. Console shows 4-5 identical errors per single button click, indicating the event handler is attached multiple times. | -Open candidate detail > click "Generate Outreach" once > observe 4-5 console errors | -Event listener is registered in a useEffect without cleanup, or the component re-renders and re-attaches handlers on each render cycle. | -
| BUG-007 | -P2 | -Outreach | -No user-facing error when outreach generation fails. Button shows no loading state, no error toast, no feedback. Silent failure. | -Click "Generate Outreach" > observe no UI response | -Error is caught and logged to console but no toast/alert is shown to the user. | -
| BUG-008 | -P3 | -Search History | -Result count mismatch. History shows "46 results" for "Senior ML Engineer at Anthropic" but Results page only displays 20 candidates. | -History page > compare result count badge vs actual results loaded | -History may be counting total GitHub API matches (before filtering/deduplication) while Results page shows post-processed results. Or multiple search attempts are aggregated. | -
| BUG-009 | -P3 | -UI/UX | -AI-parsed search criteria tags are truncated. Tags like "Large language model dev..." and "PyTorch or JAX with deep..." cut off without tooltip or expand option. | -Results page > observe top criteria tags | -CSS text-overflow: ellipsis applied without a title attribute or tooltip component. | -
| BUG-010 | -P3 | -Pipeline | -Drag-and-drop on kanban board not functional via automated testing. Drop zones show "Drop candidates here" but drag interaction could not be verified. Stage change only works via dropdown on detail page. | -Pipeline > attempt to drag candidate card to another column | -May be a testing tool limitation, or actual DnD implementation may need verification with manual testing. | -
Happy Path: Entered "Senior ML Engineer" + "Anthropic". Strategy built in ~15 seconds with 4-step progress animation. Output included:
-Edge Cases:
-When working, Results page shows: AI-parsed search criteria tags, repos searched, filter bar (location, Hidden Gems, Enrich All, Language, Min Score, Export, Seniority), and candidate cards with scores, EEA badges, commit stats, language bars.
-Thomas Wolf (Score 98) detail panel verified:
-5 columns: Contacted, Not Interested, Recruiter Screen, Rejected, Moved to ATS. Stage filter tabs with counts. Candidate cards show avatar, name, score, time indicator.
-Stage change does persist to Supabase: confirmed Thomas Wolf moved from Contacted to Not Interested column on returning to kanban view.
-The scoring system uses a weighted boolean signal model with a max score of 100.
-| Signal | Weight | Source |
|---|---|---|
| top_company | 20 | LLM enrichment or regex match against 12 top companies |
| has_phd | 15 | LLM enrichment or regex /phd|doctorate|doctoral/ |
| has_publications | 15 | LLM enrichment or regex /publication|paper|published|journal/ |
| open_source | 10 | LLM enrichment or regex /open.?source|github stars|contributor|maintainer/ |
| conference_speaker | 10 | LLM enrichment or regex against 7 top conferences |
| has_patents | 10 | LLM enrichment or regex /patents?/ |
| leadership_role | 10 | LLM enrichment or regex /founder|cto|vp|vice president|chief|director/ |
| top_university | 10 | LLM enrichment or regex against 11 top universities |
| experience_bonus | 5 | 10+ years experience |
Max possible: 105 (capped at 100). Color coding: green (80+), yellow (60-79), orange (40-59), red (<40).
-Displayed Score: 98 | EEA Score: 51
-The main score (98) is the GitHub-based relevance score, NOT the EEA score. These are two separate scoring systems:
-Console error: Outreach generation failed: Error: Cannot read properties of undefined (reading 'name')
First "Search with this strategy" click returns 0 results. Retry from Results page succeeds.
-