AI-powered deep talent matching for the English market.
Candidates and companies each complete a structured questionnaire (Career DNA / Company DNA). The platform scores compatibility across eight workplace dimensions and reveals high-match opportunities in a weekly Drop — no mass applications required.
This repository is an independent public project owned and maintained for the English-speaking market. It is not a fork of any other product line.
Hiring still optimizes for keywords and resumes. Fit is often about how people actually work — pace, collaboration, decision style, communication, ambiguity tolerance, growth, motivation, and execution.
TalentDrop borrows the depth of intentional matching (inspired by deep-matching products like Date Drop) and applies it to recruiting:
- Career DNA — 8 spectrum dimensions (no “right answers”) that describe how a candidate works
- Company DNA — the same dimensions for teams/culture, with multi-respondent aggregation
- Three-layer questionnaires — platform standard (30 Q, 60%) → role-type (15 Q, 25%) → company custom (≤5 Q, 15%)
- Two-sided discovery — candidates get roles, companies get candidates; both accept/skip independently → mutual match
- Weekly Drop — results revealed on a schedule with a compatibility report
| Layer | Stack |
|---|---|
| Frontend | Next.js 16 + React 19 + TypeScript + Tailwind CSS v4 |
| Backend | Python 3.11+ / FastAPI + Pydantic v2 |
| Database | SQLite (aiosqlite) |
| AI | OpenAI API (chat profiling / resume parse / match reports) + LightRAG knowledge graph (mock fallback without a key) |
| Packages | uv (Python) / npm (Node.js) |
| Deploy | Docker Compose |
- Candidate — Career DNA questionnaire, weekly Drop, match report (radar + knowledge graph + funnel), AI chat profiling, resume upload/parse, profile management
- Company — Company DNA questionnaire, role CRUD, weekly candidate Drop, match detail and dimension comparison
- Matching engine — L1 hard filters → L2 DNA compatibility (see below)
- Visualizations — force-directed knowledge graph, match funnel, dimension bars, DNA radar
- Interactive demo —
/demowith sections explaining the product thesis
Matching runs as DNA scoring → L1 hard filter → L2 DNA compatibility.
After questionnaires, answers become an 8-dimension objective profile via three item types:
| Item type | Scoring | Purpose |
|---|---|---|
| Single choice | Fixed contribution maps per option → dimensions | Direct preference |
| Ranking | Borda count — rank 1 = N points … last = 1, normalized 0–100 | Priority weights |
| Budget allocation | Allocated % maps straight to dimension scores | Trade-off signal |
Per dimension, multi-item scores are averaged into DimensionScores (0–100 spectrum).
Consistency coefficient:
consistency = 1 - mean(per-dimension stddev) / 50
Higher self-consistency → higher confidence in the final match score.
Company-side extras:
- Multi-respondent aggregation — role-weighted scores (e.g. HR 0.5, employees 1.0); for N≥7, drop extremes, use weighted median
- CAS (culture authenticity score) —
CAS = 0.55 × internal consistency + 0.45 × HR–employee gap→ Gold / Silver / Bronze
Boolean gates; fail → match score 0:
| Filter | Logic |
|---|---|
| Remote policy | remote roles pass all candidates |
| Location | onsite requires exact city match |
| Skills | At least one skill overlap with role requirements |
per dimension d: compat_d = 1 - |candidate_d - company_d| / 100
final score: score = mean(compat_d) × consistency × 100
Normalized Manhattan distance on the 8-D vectors, damped by answer consistency. Clamped to 0–100; higher = closer “workplace DNA.”
LightRAG (HKUDS, EMNLP 2025) is designed as Layer 0 — context understanding. It does not replace the scoring pipeline; it helps the system use unstructured text (dream-role writeups, chat logs, resumes, anonymous employee feedback).
Questionnaire answers / resume text / AI chat / employee feedback
↓
Textualize (structured → natural language)
↓
LightRAG.insert()
↓
Chunk → LLM entity/relation extract → knowledge graph + vectors
User request (e.g. “generate match report” / “why this role?”)
↓
LightRAG.query(question, mode="hybrid")
↓
Dual retrieval:
low-level → vector similarity over chunks
high-level → graph traversal over entities/relations
↓
Context + LLM → grounded report / answer
| Scenario | Without (current baseline) | With LightRAG |
|---|---|---|
| Match reports | Scores → OpenAI with thin context | Resume + chat + DNA retrieved into the report |
| Knowledge graph | Hand-built from DB | Auto entities/relations from unstructured text |
| AI chat | No durable memory across turns | Ongoing index; later questions use prior context |
| Cross-entity reasoning | Limited | e.g. “candidate A’s project ↔ role B’s stack” |
Phase 1 (current — cold start)
✅ Questionnaire + matching engine + template reports end-to-end
✅ OpenAI direct reports; manual graph visualization
Phase 2 (data accumulation)
→ LightRAG owns context understanding
→ Unstructured text auto-ingested into the graph
→ Reports from dual retrieval + LLM
→ Incremental updates without full rebuilds
Phase 3 (learning loop)
→ 90-day hire outcomes as Outcome nodes
→ Multi-hop: Match → led_to → Outcome → reverse success factors
→ Collaborative filtering + graph to retune weights
Dependency is declared (
lightrag-hku>=1.0.0); Phase 2 can be enabled when ready.
- Python 3.11+ and uv
- Node.js 18+ and npm
- Optional: Docker & Docker Compose
- Optional: OpenAI API key (mock data if unset)
# 1. Clone
git clone https://github.com/Teejay-first/talentdrop.git && cd talentdrop
# 2. Backend (venv + deps)
./scripts/dev-backend.sh
# 3. Seed demo data (new terminal)
./scripts/seed-db.sh
# 4. Frontend (new terminal)
./scripts/dev-frontend.sh- Backend:
http://localhost:8000 - Frontend:
http://localhost:3000
./scripts/docker-up.shexport OPENAI_API_KEY="sk-..." # AI chat / resume / reports
export JWT_SECRET="your-secret" # default: demo-secret-keytalentdrop/
├── backend/ # FastAPI (API / models / services / data)
├── frontend/ # Next.js (pages / components / lib)
├── scripts/ # Dev & deploy scripts
├── discuss/ # Product design notes (incl. discuss/en/)
├── nginx/ # Production reverse proxy
└── docker-compose.yml
After ./scripts/seed-db.sh, password for all seeded users: demo123
Home (
http://localhost:3000) has one-click demo login buttons by name.
| Name | Profile sketch | |
|---|---|---|
| Alex Chen | alex@example.com |
Senior frontend, 6y, Hangzhou — fast pace / independent |
| Maria Santos | maria@example.com |
Full-stack, 4y, Beijing — collaborative / mission-driven |
| James Wright | james@example.com |
Backend, 8y, Shanghai — data-driven / planned |
| Priya Sharma | priya@example.com |
Product engineer, 3y, Beijing — mission / team |
| David Kim | david@example.com |
DevOps, 5y, Shanghai — data-driven |
| Sophie Zhang | sophie@example.com |
Junior, 1y, Nanjing — generalist |
| Company | |
|---|---|
| Velocity Labs | hr@velocity-labs.example.com |
| Meridian Financial | hr@meridian-financial.example.com |
| Bloom Education | hr@bloom-education.example.com |
| Candidate | Company | Approx. match |
|---|---|---|
| Alex Chen | Velocity Labs | ~91% |
| James Wright | Meridian Financial | ~92% |
| Priya Sharma | Bloom Education | ~93% |
| Maria Santos | Bloom Education | ~89% |
| This repo | English-market product line (TalentDrop) |
| Maintainer | Teejay-first |
| Status | Independent public repository — not a GitHub fork |
A related Chinese-market product line is maintained separately by partners. Codebases may share heritage; this repo is the canonical English-market source of truth going forward.
Public demo / open source under the repository owner’s terms. Review before commercial use; contact the maintainer for partnership or commercial licensing.