## Inspiration

ApplyPilot was inspired by how repetitive and overwhelming job applications can feel. Candidates often spend hours searching across job boards, rewriting resumes, comparing job descriptions, saving links, and tracking follow-ups manually.

We wanted to build a tool that speeds up the process while keeping the user in control. ApplyPilot is not meant to blindly apply everywhere. It is designed as a smart assistant that helps users find better-fit roles, understand their match, tailor their resume, and approve applications before anything moves forward.

## What it does

ApplyPilot is an AI career copilot that helps users go from resume upload to job matching and application approval.

Users can upload a resume, set job preferences, and get matched with suitable roles from public job sources. ApplyPilot explains why each job is a good or weak match, highlights skill gaps, prepares a tailored resume preview, and keeps applications in an approval queue.

The user stays in charge throughout the process. ApplyPilot prepares the application, but the final approval always comes from the user.

## How we built it

We built ApplyPilot as a web app with a static frontend and a Node.js/Express backend.

The frontend handles the user experience, including resume upload, profile view, matched jobs dashboard, saved jobs, tailored resume preview, application queue, calendar page, and preferences.

The backend handles resume parsing, job search, job normalization, matching, ranking, and tailored resume generation. It supports resume formats like PDF, DOCX, and TXT, and searches public job sources such as Greenhouse, Lever, Ashby, Ashby-compatible boards, and Remotive.

Instead of treating job matching like a black-box score, ApplyPilot uses practical signals such as skills, role fit, location, and work mode, then explains the result in plain language.

A simplified version of the matching idea is:

$$
\text{Match Score} =
w_s(\text{Skill Overlap}) +
w_r(\text{Role Fit}) +
w_l(\text{Location Fit}) +
w_m(\text{Work Mode Fit})
$$

## Challenges we ran into

One major challenge was working with real job data. Every platform returns information differently. Some postings have detailed descriptions, some have missing locations, and some do not include salary or remote-work information. We had to normalize all of that into one consistent structure.

Another challenge was resume parsing. Resumes come in different formats, layouts, and writing styles, so the backend needed to extract useful information without assuming every resume looks the same.

The biggest product challenge was trust. Job applications are personal and important, so we designed ApplyPilot around approval instead of full automation. The app can prepare and recommend, but the user makes the final decision.

## Accomplishments that we're proud of

We are proud that ApplyPilot connects several parts of the job search into one flow: resume analysis, job discovery, match explanations, resume tailoring, approval, and calendar support.

We are also proud of the approval-based design. It makes the app feel more like a helpful assistant than an uncontrolled automation tool.

Another accomplishment is that the app works with public job sources by default, while still leaving room for advanced integrations through backend API keys later.

## What we learned

We learned that job matching is more than comparing keywords. A role might match a candidate’s skills but still be a poor fit because of location, seniority, work mode, or missing requirements.

We also learned that explanations matter. A match score is useful, but users need to know why a role was recommended and what they can improve before applying.

Most importantly, we learned that automation works best when it is transparent. For a tool like this, speed is helpful, but trust is essential.

## What's next for ApplyPilot

Next, we want to improve AI resume tailoring, add real Google Calendar OAuth, support more job platforms, and build stronger application connectors.

We also want ApplyPilot to learn from user feedback over time. If a user approves, rejects, or saves certain types of roles, the app should get better at recommending similar opportunities in the future.

The long-term goal is to make job searching less repetitive, more explainable, and more human.

Built With

  • and-google-calendar-links/api-support.-optional-backend-integrations-include-firecrawl
  • ashby-api
  • browser-localstorage
  • cors
  • css
  • dotenv
  • express.js
  • github
  • greenhouse-jobs-api
  • html
  • javascript
  • lever-api
  • mammoth
  • multer
  • node.js
  • npm
  • pdf-parse
  • remotive-jobs-api
  • smartrecruiters
  • tailwind-css
  • usajobs
  • vercel
Share this project:

Updates