Inspiration
Hiring the right candidate is difficult, particularly when a single job opening can attract hundreds or even thousands of applications. Recruiters often have to spend hours reading resumes, comparing technical skills, checking years of experience, reviewing projects, identifying relevant technologies, and deciding which candidates should move forward. Traditional recruitment systems are good at collecting applications and managing hiring workflows, but they often depend heavily on keyword matching and predefined filters. This can make it difficult to understand a candidate's actual capabilities, especially when their experience is described differently from the language used in a job description.
We built ai-job-post to address this gap by creating an AI-powered talent intelligence platform that can understand both sides of the hiring process: the job and the candidate. Instead of treating a resume as a simple document or a job description as a collection of keywords, our platform attempts to understand the professional context behind them. It analyzes skills, experience, projects, technologies, education, industry background, job roles, location, salary expectations, relocation preferences, and other relevant information before comparing candidates with a particular role.
Another important motivation was the candidate experience. Candidates repeatedly enter similar information when applying for different jobs, even though their professional identity remains largely the same. We wanted to introduce a one-time professional profile where candidates can maintain their skills, experience, education, projects, certifications, technologies, resume, GitHub, LinkedIn, portfolio, preferred roles, location preferences, salary expectations, and other career information. AI can then transform this information into a structured professional representation that can be reused across relevant opportunities.
The broader market need behind ai-job-post is therefore not simply another job board. The real need is an intelligent layer between professional talent and hiring requirements. Companies need to discover relevant people faster, recruiters need better evidence for their decisions, and candidates need opportunities that genuinely match their capabilities rather than simply matching a few keywords. This is why we designed ai-job-post as a recruiter assistant rather than an automated hiring system. AI performs the searching, organizing, comparing, ranking, and explaining, while humans remain responsible for the final hiring decision.
What it does
ai-job-post is an AI-powered talent matching and talent discovery platform designed to help recruiters understand and identify relevant candidates more efficiently. A candidate can create a professional profile containing their career information, and AI analyzes that information to create a structured candidate profile. On the recruiter side, a job can either be created manually or described using natural language. For example, a recruiter could describe a requirement for a Python backend engineer with several years of experience, FastAPI and PostgreSQL knowledge, and experience building AI applications. The system can analyze that description and transform it into structured job requirements that can be validated and used by the matching engine.
Once the job and candidate information have been structured, ai-job-post compares them across multiple dimensions rather than relying only on exact keywords. Skills, professional experience, projects, technologies, education, industry experience, role alignment, location, relocation preferences, salary expectations, availability, and other job-specific requirements can contribute to the overall evaluation. Semantic understanding allows the system to identify relationships between concepts even when the wording used by the candidate is different from the wording used by the recruiter.
The platform provides recruiters with ranked candidate results such as Top 10, Top 20, and Top 100 candidates. Instead of showing only a single AI-generated percentage, the system is designed to provide context around the recommendation. A recruiter can understand which requirements were matched, which requirements are missing, what evidence supports the match, what the candidate's strengths are, and where potential gaps exist. This makes the recommendation more explainable and gives the recruiter useful information for deciding who should be reviewed or interviewed.
A major part of ai-job-post is its two talent discovery approaches. Portal Ranking focuses on candidates who have already created profiles on the platform. The system can search and rank this existing talent pool against a job. Internet Talent Search provides a separate discovery mechanism for finding relevant professional information from permitted external sources and authorized integrations, such as GitHub, authorized LinkedIn data, portfolio websites, professional websites, and other appropriate sources. Keeping these two sources separate is important because it allows recruiters to understand whether a candidate came from the existing platform talent pool or was discovered through external professional information.
The platform is not designed to automatically hire people or make final employment decisions. Its purpose is to reduce the amount of repetitive analysis performed by recruiters and provide better information for human decision-making. The central concept is therefore simple: AI finds, understands, compares, ranks, and explains talent, while humans remain in control of the hiring decision.
How we built it
We built ai-job-post using an AI-agent architecture that separates AI-based understanding from traditional application logic. The frontend is built with Next.js, React, TypeScript, and Tailwind CSS, providing interfaces for both candidates and recruiters. The backend is built using Python and FastAPI, which handles APIs, authentication, validation, business logic, data processing, scoring, ranking, and other application responsibilities.
For the AI layer, we use Gemini through Vertex AI together with LangChain and LangGraph. Gemini provides the language understanding required to analyze resumes, professional profiles, projects, job descriptions, and other unstructured information. LangChain provides the components required to connect language models with structured workflows and tools, while LangGraph allows us to design multi-step AI workflows where different stages can process and validate information before the next stage begins.
The candidate pipeline begins with raw professional information such as a resume or profile. The information is analyzed and transformed into a structured candidate profile containing relevant professional attributes. That information is then validated and converted into embeddings that can be used for semantic search. The job pipeline follows a similar process. A recruiter can provide a structured job or a natural-language description, after which AI analyzes the requirements, produces a structured job profile, and passes it through validation before it becomes part of the matching system.
The matching process brings these two representations together. Candidate and job profiles are compared using structured attributes and semantic information. Instead of allowing the language model to arbitrarily decide that someone is "91% suitable," the backend can calculate and control important parts of the scoring process. AI is primarily responsible for understanding information and generating useful explanations, while application logic is responsible for validation, permissions, deterministic scoring, and ranking. This separation makes the system easier to reason about and reduces the risk of unpredictable AI decisions.
For data storage and semantic search, we use Supabase PostgreSQL with JSONB and pgvector. PostgreSQL provides reliable structured storage for candidates, jobs, requirements, preferences, and recruitment information. JSONB gives us flexibility for professional profiles that may contain different types of information, while pgvector allows us to store and compare embeddings for semantic similarity. This combination allows the system to use both traditional structured filtering and AI-powered semantic search.
The overall architecture can therefore be represented as a pipeline where raw information becomes structured data, structured data is validated, semantic representations are generated, candidates and jobs are compared, scores are calculated, candidates are ranked, and explanations are generated. This architecture reflects one of our main design principles: AI should be powerful enough to understand complex professional information but controlled enough that important recruitment logic remains within the application.
Challenges we ran into
One of our biggest challenges was dealing with unstructured professional information. Every resume has a different format, candidates describe their experience differently, and important information may exist outside the resume entirely. One candidate may describe themselves as a backend engineer, another may describe themselves as a Python developer, and another may demonstrate the same capabilities primarily through projects. Creating a common representation that could be compared consistently was therefore a major challenge.
Another challenge was reliability. We did not want the platform to produce an arbitrary match percentage simply because an LLM generated one. Recruitment recommendations need to be understandable and consistent, so we designed the system to separate AI understanding from backend decision logic. AI extracts and interprets information, while validation and scoring logic are controlled by the application. This helped us move from a simple LLM demonstration toward a more structured recruitment intelligence system.
Candidate duplication was another difficult problem. A single professional may have a GitHub profile, portfolio, LinkedIn presence, resume, and professional website. If each source were treated independently, the platform could incorrectly display the same person as several different candidates. We therefore had to think about identity resolution, source information, profile enrichment, and the careful merging of professional information.
External talent discovery introduced another important challenge. Professional information available on the internet does not automatically mean that it can be collected, processed, or used without restrictions. We therefore designed the concept around permitted sources, authorized integrations, appropriate access methods, and responsible handling of professional information. The system should also avoid using sensitive personal characteristics as criteria for candidate ranking.
Explainability was another major challenge. A recruiter cannot effectively evaluate an AI recommendation if the only information available is a number such as 88% or 93%. We therefore wanted every meaningful recommendation to have supporting context. The recruiter should be able to understand what matched, what was missing, and what evidence led to the recommendation. This requirement influenced both our data model and our matching architecture.
Accomplishments that we're proud of
One of the things we are most proud of is the concept of a reusable professional profile. Instead of forcing candidates to repeatedly enter the same information for every job, ai-job-post allows them to build a professional identity that can be understood by AI and reused across opportunities. This changes the candidate experience from repeatedly filling forms into maintaining a professional profile that becomes increasingly useful over time.
We are also proud of combining two different talent discovery mechanisms. Portal Ranking allows recruiters to find relevant candidates who already exist within the platform, while Internet Talent Search provides a way to discover additional professional talent through permitted external sources and authorized integrations. This creates a broader talent discovery model instead of limiting recruiters to candidates who happened to apply to a particular job.
Another accomplishment is our focus on explainable matching. We wanted the platform to answer not only "Who is the best candidate?" but also "Why is this candidate relevant?" A strong recommendation can therefore be connected to skills, experience, projects, technologies, location, and other job-related evidence. This makes the system more useful as a decision-support tool and helps recruiters understand how the recommendation was produced.
We are also proud of the separation between AI and traditional application logic. Rather than giving an LLM complete control over the recruitment process, we use AI where language understanding is valuable and use backend logic where consistency, validation, permissions, scoring, and ranking are important. This architecture helped us create a system that is more structured and easier to improve.
Most importantly, we are proud of the philosophy behind the product. ai-job-post is designed to assist recruiters rather than replace them. The system can reduce the time required to search, organize, compare, and understand candidates, but the recruiter remains responsible for the final decision. This human-in-the-loop approach is central to how we envision the product being used in real recruitment environments.
What we learned
Building ai-job-post taught us that an AI recruitment platform is much more than connecting an LLM to a resume database. The quality of the final recommendation depends on the entire pipeline, from collecting information and structuring profiles to validating data, performing semantic matching, calculating scores, ranking candidates, collecting evidence, and generating explanations.
We learned that AI and traditional software logic should have clearly defined responsibilities. Language models are extremely useful for understanding natural language, extracting information, interpreting projects, analyzing job descriptions, and generating explanations. However, important application responsibilities such as validation, permissions, deterministic scoring, ranking rules, and database operations should remain controlled by the backend.
We also learned that data quality is as important as model quality. Even a powerful AI model cannot produce reliable recommendations if the underlying candidate information is incomplete, duplicated, outdated, or incorrectly structured. This made profile normalization, validation, deduplication, and source awareness important parts of the platform rather than secondary engineering tasks.
Another important lesson was the importance of explainability in recruitment. Recruiters need evidence they can understand and evaluate. A recommendation without context can become another form of black-box decision-making. We therefore learned that a useful AI recruitment system should not only answer "Who matches?" but should also help answer "Why does this candidate match?"
Finally, we learned that recruitment cannot be reduced entirely to an algorithm. Skills, experience, projects, and professional requirements can be analyzed computationally, but human judgment is still important in interviews, communication, motivation, team context, and final hiring decisions. This reinforced our decision to keep humans in control.
What's next for ai-job-post
Our long-term goal is to develop ai-job-post into a complete talent intelligence platform that continuously connects companies with relevant professional talent. We want to improve candidate-to-job recommendations by making the matching system more accurate across skills, experience, projects, technologies, location, relocation preferences, salary expectations, availability, and career goals.
We also want to make Internet Talent Search more intelligent while continuing to respect permissions, authorized integrations, source restrictions, and privacy requirements. The goal is not simply to collect more profiles, but to discover genuinely relevant professional talent and provide recruiters with enough context to understand why a person may be suitable for a particular opportunity.
Another major area of development will be deeper project and technology analysis. Rather than simply identifying that someone knows Python, for example, we want the platform to understand how they used Python, what they built, which technologies they combined with it, and what evidence demonstrates their practical capability. This can help create a richer understanding of candidates, particularly for technical and project-oriented roles.
We also want to improve candidate deduplication and professional identity resolution so that information from multiple permitted sources can be combined into a more complete professional profile without incorrectly creating duplicate candidates. Over time, the professional profile could become continuously updated as candidates gain new skills, complete projects, change jobs, earn certifications, or update their professional information.
Recruiter feedback is another important future direction. When recruiters shortlist, interview, reject, or hire candidates, those actions can provide valuable signals about how useful the recommendations were. We want to explore how this feedback can improve future recommendations while maintaining transparency and avoiding uncontrolled automated decision-making.
In the future, ai-job-post could also provide hiring analytics and company-level talent intelligence, helping organizations understand their talent pools, skill availability, recruitment bottlenecks, candidate sources, and emerging hiring requirements. A candidate who is not suitable for one role today could potentially remain in a company's talent pool and become relevant for another position later.
Ultimately, we want ai-job-post to become an intelligent recruitment assistant that reduces the manual work involved in finding and understanding talent without removing human judgment from the hiring process.
AI does the searching, organizing, comparing, ranking, and explaining — while humans remain in control of the final hiring decision.
Built With
- agents
- ai
- cloud
- css
- docker
- fastapi
- gemini
- generative
- langchain
- langgraph
- learning
- llm
- machine
- next.js
- pgvector
- postgresql
- python
- rest
- semantic
- supabase
- tailwind
- typescript
- vector
- vertex
Log in or sign up for Devpost to join the conversation.