Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/HelenDiMo/TinderJob/llms.txt

Use this file to discover all available pages before exploring further.

TinderMatch is the job recommendation engine embedded inside the TinderJob dashboard. It reads a candidate’s CV — either uploaded as a PDF or pasted as plain text — extracts their technical skill set using regex-based pattern matching, and computes a compatibility percentage against every Tecnoempleo offer in the cleaned dataset. The result is a ranked list of the top 20 matching offers, each card showing exactly which skills the candidate already has, which skills they still need to acquire, and a direct link to apply on Tecnoempleo. For candidates, it’s a mirror that reflects both current strengths and reskilling gaps in one view.

How TinderMatch Works

1

Upload your CV

Choose between uploading a PDF file or pasting plain text directly into the text area. The app supports both input modes via a radio button selector.
2

Skill extraction via extraer_skills_cv()

The extraer_skills_cv() function scans the CV text against a dictionary of 80+ known technologies. Each skill is searched using regex word boundary matching — the pattern r'\b' + re.escape(skill) + r'\b' — applied to the lowercased CV text, ensuring that “R” doesn’t match “React” and “Java” doesn’t match “JavaScript”.
3

Compatibility scoring via calcular_match()

For each job offer in the dataset, calcular_match() computes the match percentage as:
match % = (skills you have that the offer requires) / (total skills the offer requires) × 100
4

Filter and rank results

Results are filtered to offers at or above the minimum match threshold (default 20%), then sorted descending by match percentage. The top 20 are displayed.
5

Review your match cards

Each result card displays: match percentage, company name, city, work modality, ✅ skills you already have, ❌ skills you still need to acquire, and a direct link to the offer on Tecnoempleo.
6

Export as CSV

Download the full ranked results table as a CSV file containing titulo, empresa, ciudad, skills, and match_pct columns for offline review or sharing.

Skill Dictionary

TinderMatch recognizes 80+ technologies organized into six categories. The skill list is defined as SKILLS_CONOCIDAS in the source code and drives both extraction and scoring. Languages python, java, javascript, typescript, sql, r, scala, c#, c++, php, ruby, swift, kotlin, go, rust Frontend react, angular, vue, html, css, bootstrap, tailwind, jquery, next.js, nuxt Backend node, django, flask, spring, fastapi, .net, laravel, express, rails Data / ML pandas, numpy, scikit-learn, tensorflow, pytorch, keras, spark, hadoop, kafka, airflow, dbt, mlflow, machine learning, deep learning, nlp, computer vision, data science, big data, etl, power bi, tableau, looker, qlik, matplotlib, seaborn, plotly Cloud / DevOps aws, azure, gcp, docker, kubernetes, terraform, jenkins, github actions, ci/cd, devops, linux, ansible, prometheus, grafana Databases mysql, postgresql, mongodb, redis, elasticsearch, oracle, sql server, sqlite, cassandra, dynamodb Other git, agile, scrum, jira, rest, api, microservices, ciberseguridad, networking, windows, vmware

Match Scoring Algorithm

The calcular_match() function computes the compatibility percentage between the skills extracted from a CV and the skills listed in a single job offer:
def calcular_match(skills_cv: list, skills_oferta: str) -> float:
    if not skills_cv or not isinstance(skills_oferta, str):
        return 0.0
    skills_oferta_list = [s.strip().lower() for s in skills_oferta.split(',')]
    if not skills_oferta_list:
        return 0.0
    matches = sum(1 for s in skills_oferta_list if s in skills_cv)
    return round(matches / len(skills_oferta_list) * 100, 1)
How the score is calculated: the offer’s skills field is split on commas and each token is lowercased and stripped. The function then counts how many of those offer skills appear in the candidate’s extracted skill list. The result is divided by the total number of skills the offer requires and multiplied by 100 to produce a percentage rounded to one decimal place. Key property: the denominator is always the offer’s skill count, not the CV’s. A candidate with 50 skills who matches 3 out of 3 required skills scores 100%, while a candidate with only 5 skills who matches 3 out of 10 required scores 30%. The score measures coverage of the offer’s requirements, not the size of the candidate’s skill set.

Match Score Interpretation

ScoreLabelMeaning
≥ 80%💘 Match perfectoYou already have nearly all required skills — apply immediately
60–79%❤️ Gran matchStrong fit; a small gap is easy to close
40–59%🧡 Buen matchSolid foundation; some upskilling needed
20–39%💛 Match parcialRelevant background but significant reskilling required
< 20%🤍 Bajo matchRole is outside current skill profile
The match emoji label is computed by the get_emoji_match() helper function and displayed below the percentage on each result card.

Filters and Export

TinderMatch offers three optional filters to narrow results before scoring, plus a CSV download:
ControlTypeDefaultEffect
Ciudad preferidaselectboxCualquieraFilters offers to a single city before scoring
Modalidad preferidaselectboxCualquieraFilters by work modality (remote, hybrid, in-person)
Match mínimo (%)slider20% (range 0–100, step 5)Excludes offers below this match threshold from results
CSV exportdownload_buttonDownloads titulo, empresa, ciudad, skills, match_pct for the top results

Skill Extraction Function

The extraer_skills_cv() function performs the text scanning step:
def extraer_skills_cv(texto_cv: str) -> list:
    texto_lower = texto_cv.lower()
    skills_encontradas = []
    for skill in SKILLS_CONOCIDAS:
        patron = r'\b' + re.escape(skill) + r'\b'
        if re.search(patron, texto_lower):
            skills_encontradas.append(skill)
    return skills_encontradas
The function iterates over every skill in SKILLS_CONOCIDAS, constructs a regex pattern using re.escape() to safely handle special characters (e.g. c++, .net, c#), and wraps it in \b word boundary anchors to prevent partial matches. All matching is done on the lowercased CV text to ensure case-insensitive detection. The function returns a list of matched skill strings in their canonical lowercase form, which is then used directly by calcular_match().
If your PDF uses scanned images rather than selectable text, pdfplumber cannot extract any text — it will return an empty string. In that case, use the ”📝 Pegar texto” input option and manually copy-paste your CV content into the text area.
For best extraction results, include your skills explicitly in a dedicated “Skills”, “Technologies”, or “Tech Stack” section of your CV using a comma-separated or bulleted list. Skills buried in free-form prose sentences — for example, “I worked on a project that involved some data processing” — may not trigger a keyword match and will cause the system to undercount your actual skill set.

Build docs developers (and LLMs) love