Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Because lightweight talent won’t cut it.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Hand it a hiring brief. Get back the few people worth a call, each with the exact profile text that put them there, plus the strong candidates your usual search would never have looked at.
The job: technical sourcing. Turning a hiring brief into a short, justified list of people to contact.
Who does it today: in-house recruiters and sourcers, agency recruiters, freelance sourcers, and hiring managers who source for themselves.
Who pays: the employer, either through a talent team's salary budget or through an agency that is paid when someone is hired.
Where they slip:
Heavy Brains attacks all three: it searches wider, reads profiles for meaning, and refuses to rank anyone on something it can't quote.
One brief goes in. About a minute later you get a ranked list. The run is automatic from the moment you press Find people:
| People outside your usual companies | The quote behind every score |
|---|---|
Where a person still has to step in
| Kind | What it measures |
|---|---|
| Relevance (0 to 100) | How much of your brief the profile proves, weighted by must/nice/context and importance. Role descriptions count most, skills lists least. |
| Career signals (own 0 to 100) | Startup veteran (years at pre-seed or seed-stage teams with 15 or fewer engineers), joined companies while young, rehired by the same company, fast promotion, lean-team employers, repeat contract hires, competitor experience, open-source impact (stars × merged PRs per repo, from GitHub). |
| Optional | An AI review of the quality of what someone posts on LinkedIn, run on request because it costs credits. |
Signals that can't be checked are left out of the score, not counted as zero. The landing page explains each one.
Paste this into the box on the landing page:
We need a founding backend engineer in Bengaluru who has shipped payments systems at a startup. Find me five people worth a call this week, and tell me why each one fits.
On our last live run this took about a minute and about 150 Crustdata credits. Repeating it within 24 hours is served from a cache and costs nothing.
No keys? Choose DEMO DATA in the header. It runs the whole product on a fictional dataset (every screenshot here is from it).
Plain TypeScript runs the agents in order and in parallel. No agent chooses its own next step. Full diagrams are in docs/ARCHITECTURE.md.
| Part | Detail |
|---|---|
| Agents | Brief Analyst, Search Strategist, Evidence Reviewers (parallel, 5 profiles per call), Briefing Writer, Outreach Writer, Content Reviewer. Model: claude-opus-5-5 by default. |
| Scoring | Not a model. A deterministic engine in the browser, so changing a criterion re-ranks instantly. |
| Guards | Any quote must appear verbatim in the profile or it is discarded. Briefing and message drafts are checked the same way. A years-of-experience range in the brief is sent to the search as a filter and re-checked on every result; people outside it are hidden by default. |
| State | Projects live in the browser's localStorage. The server keeps only a 24-hour result cache, on disk locally and in the temp dir on Vercel, where it lasts only while a function instance stays warm. |
| Stack | Next.js 16, TypeScript, Tailwind 4, Motion, three.js. |
| Endpoint | Used for | Cost |
|---|---|---|
/person/search | The candidate pool, several queries per search | 0.03 credits per profile, plus field groups |
/company/search | Employer profiles, founding year, size | 0.03 per company |
/person/enrich | Top 10: full dated career, education, summary, matched GitHub account | about 1 to 2 per person |
/company/enrich | Their employers: funding stage, engineers on the team | about 2 per company |
/social_post/search | Optional post-quality review, one person at a time | 0.5 per post |
Not used: Job Search, Watcher, Web Search, the MCP server. Details and limits we found are in docs/crustdata-integration.md.
npm install
cp .env.example .env # fill in the keys you have; all are optional
npm run dev # http://localhost:3000
Key in .env | Turns on | Without it |
|---|---|---|
CRUSTDATA_API_KEY | Live people search, enrichment, post review | Demo mode (fictional data) |
ANTHROPIC_API_KEY | The agents and message drafts | Keyword rules only |
GITHUB_TOKEN | Open-source signal. A token with no scopes is enough. | That signal stays unchecked |
The header always shows LIVE or DEMO, and AI AGENTS ON or OFF. Nothing switches silently.
npm test # 133 tests
npm run build
| Checked | Result |
|---|---|
| Full live search, AI on, enrichment on | about 60 seconds, about 152 credits, 5 picks with quotes |
| Same search again | 0.0 seconds, 0 credits (cache hit) |
| Post-quality review | Run on 5 real candidates: 1 judged, 4 had too few posts and were skipped at no cost |
| GitHub open-source signal | 7 of the top 10 had a matched account; activity fetched for all 7 |
| Outreach draft | Run on a real candidate: opens with their work, quote checked |
| Not measured | Ranking accuracy against known hires. We have no benchmark and don't claim a hit rate. |
| Not connected | Pay estimates (no salary source), patents, citations, products with users, closed companies |
| Approach | What worked | What didn't |
|---|---|---|
| Keyword rules only | Fast, free, explainable. Still the no-key fallback. | Knew about 14 software terms. Couldn't read a real job posting. |
| LLM scores every profile | Would read profiles well. | Never built. Scores can't be audited, and a model will invent a flattering quote. |
| LLM finds evidence, a formula scores it (what we built) | Every point traces to a quote. Live: 34 quoted findings on one search, anything unquoted dropped. | The quote check first rejected valid quotes over a full stop vs a comma (3 of 5 picks lost). Fixed without loosening the wording match. |
| GitHub activity formulas | Stars × merged PRs per repo works and is live. | One PR into a 56,000-star beginners' practice repo scored near the top, and self-merged PRs inflated scores. We ignore practice repos and cap self-merged PRs. A single PR into a huge project still scores well. |
| Supabase as a data store for GitHub data | – | Hit an error we couldn't get past in time. We call GitHub and Crustdata directly instead. |
| Salary from salary portals | – | Ranges for the same person were far apart across sources. Nothing trustworthy, so salary is not in the ranking. |
| "Startup veteran" metric | Funding stage and engineer count from Company Enrich make it measurable. | Wrong three times on real data: it added up overlapping roles, counted one-person shells, then excluded real startups that LinkedIn labels "Self-Employed". |
| A fix that broke the briefing | – | Telling the model "never write internal ids" left each pick's id field empty, so all five picks vanished. Tests passed because the fake model always sent valid ids. A live run caught it. |
| Autonomous recruiter that also sends | – | Left out: sending needs consent and double-send protection. |
| Left out | Why not now |
|---|---|
| Sending messages | Needs consent handling and a guarantee nobody is contacted twice. Drafting exists. |
| A ranking benchmark on known hires | The as-of replay (judge people using only what was knowable on a date) is the groundwork. We haven't built or run the benchmark. |
| Job Search and Watcher | A standing search that alerts you when a shortlisted person moves is the natural next step. |
| Headcount over time | Company Enrich returns a time series we haven't used. It would fix "team size today, not then". |
| Patents, citations, products with users | Need a data source we don't have. Scoring logic and tests exist. |
| Accounts and a database | State is per-browser. Fine for one recruiter, not for a team. |
Sourcing becomes continuous instead of a project. An agent keeps a standing brief, notices when someone becomes a fit, writes to them, and hands a person a complete file. The recruiter's job shifts from searching to judgement: who to trust and how to win them. The rule that makes that safe stays the same: no claim without a quote a person can check.
3D models are from Sketchfab under CC BY and credited on the pages. More: docs/ARCHITECTURE.md · docs/BUILD-NOTES.md · docs/crustdata-integration.md