*This is a submission for *Weekend Challenge: Passion Edition
#
❔ What I Built
These two last weeks, my team mates started to to use Claude Code together with they yearly review :
to discover which Pokemon they are... and why.
I found that really really fun... and started to wonder
if I could automate that with only onPrem resources, with embeddings, ML... only with a simple laptop without GPU, a simple core i5 and 8 Gib. And of course, only with pure Open Source software ❣️
What you'll discover below is how I started to prototype it and make it happen.
#
🍿 Demo
#
🤗 Code
The whole code source is available as a HF Space, see rastadidi/resume-to-pokemon
for more... or to play wth it 🤓
#
🧰 How I Built It
To achieve this first prototype I :
Used the data I already prepared with my
registry.jsonresume.org/adriens
Bundled dataset (built once). build_dataset.py
fetches every
species from the PokeAPI — name, types,
base stats, sprite, genus and English Pokedex flavor text. For each
Pokemon it also derives a professional-archetype profile from its
types and stat spread (e.g. a Steel type → "a disciplined, precise,
robust engineer of structured systems"), so career resumes and
monster biology meet in the same trait vocabulary. Description +
profile are embedded with
BAAI/bge-m3
and committed as
data/pokemon.json
data/embeddings.npy
— so the app makes no PokeAPI calls at runtime. #
Resume → phrases. Sections that carry semantic signal —
basics.summary
, skills
, work
/volunteer
, projects
,
interests
— are each turned into a short phrase and embedded with the same model. (Administrative sections like education, certificates and languages are skipped.) #
Retrieve → rerank. Cosine similarity over the embeddings retrieves a shortlist of the closest Pokemon; a cross-encoder
(`BAAI/bge-reranker-v2-m3`
)
then re-scores the (resume, Pokemon) pairs jointly for much sharper precision than cosine alone. The tool explains why by quoting the matched resume phrase and the Pokemon's own profile + Pokedex text. #
Ranking + relative fit. Pokemon are ranked by a blend of the rerank match and their base stats (adjustable). Because a broad resume matches many Pokemon similarly, raw scores cluster tightly and are unreadable — so the reported score is a relative fit: rerank scores are standardized across the shortlist and spread through a sigmoid, so the top clearly stands out (~100%) and the tail drops off. It's a fit relative to the candidate pool, not an absolute probability. The two best-fitting types are derived from the same shortlist, so they always agree with the ranked Pokemon. #
Calibrated confidence. Instead of a raw similarity number, a read-out reports how far the top match stands out from the field (a z-score over the shortlist), flagging decisive vs. diffuse, multi-type profiles. Type scores and the ranked Pokemon are derived from the same reranked shortlist, so the "best-fit typing" always agrees with the cards.