-
-
Search anything that you'd like to see in a candidate!
-
Searches through devpost scraping users' Github, Devpost, LinkedIn
-
A grid of people who match the requested skills, each scored
-
User profile to see details, why they fit what you want
-
See good traits in each user
-
Have an automated email drafted for you
Inspiration
Devpost is a great platform to find talented students who've made great projects during hackathons. There are hundreds of real, working, public projects, built within a time constraint, working with a team, and understanding a good project scope, the closest thing in a student's record to a real work sample. Then the archive just sits there. Recruiters treat Devpost as afterthought, instead of it being a sea of talent.
How we built it
Pipeline Crawl Devpost for each event's projects, teams, prizes and write-ups, plus each member's own profile. Clone every repo and count added lines per author from
git log --numstat, keeping only commits inside the submission window and ignoring build output, lockfiles, vendored, generated and minified code, and template files that predate the event.Classification. Rules first (extension, path, imports, dependencies) across six types; Gemini types only the leftovers, on redacted metadata, in batches.
Scoring. Simple arithmetic, criteria match plus skill fit.
Words. Gemini writes each card's one-line "why" and profile summary from a facts JSON that contains no name, school or links, and every line passes a validator before it ships.
Topic search. Every project write-up is split into chunks and embedded locally, then stored in Tiger Cloud Postgres with pgvector; a search like "built a RAG pipeline" scores every chunk and joins the result against how much of that project the person wrote.
App. Next.js and TypeScript, reading the pipeline's cached output, so a demo never calls Devpost, GitHub, People Data Labs or Gemini live.
Challenges we ran into
Making attribution honest. Raw line counts credit the wrong person constantly — committed
node_modules,collectstaticoutput, generated clients, a template cloned before the event. Most of our attribution work was exclusions. We also flag projects where one person has over 90% on a team of three or more, since that usually means a shared laptop or squashed commits rather than one heroic teammate.Identity without name matching. Tying a commit author to a teammate is easy if you're willing to guess from names, and we weren't. We only follow the GitHub and LinkedIn links a person posted on their own Devpost profile; authors we can't place stay "unknown."
Semantic search that actually discriminated. One vector per project put an EV-charging app fourth for "retrieval-augmented generation," because long hackathon write-ups all sound alike. Similarity also scales differently by topic — the median project scores 0.28 for RAG but 0.37 for drone computer vision — so a fixed threshold can't work. We moved to per-section chunks scored against the whole distribution with a z-score.
Tiger Cloud connection and memory. node-postgres reads
sslmode=requireas full certificate verification, so the connection string neededuselibpqcompat=true; and loading every vector in one statement ran a small service out of memory, so the loader batches.Model trade-offs. Gemini at low thinking was five times faster but flipped a whole batch of 28 per-animal modules from ML to Backend — a genuinely close call. We kept default thinking and got the speed from parallelism instead.
What we learned
Might be simple but verification beats generation. The most valuable thing we built around the LLM was the validator that refuses any line containing a number we didn't provide.
What's next for Starter
We want to actually grow and make starter a recognized tool for recruiters to use.
Built With
- beautiful-soup
- gemini
- huggingface
- next.js
- node.js
- pgvector
- postgresql
- python
- react
- tailwindcss
- tigerdata
- typescript