Inspiration
Finding a job is a fragmented, time-consuming process. Candidates search many portals, keep rewriting the same search terms, compare job descriptions with their resumes by hand, and track applications in separate spreadsheets. Good openings get missed, while expired or unrelated listings waste hours.
We wanted a tool that makes job discovery personal and actionable: define your experience, skills and preferred places once, and see which public listings may fit, with a clear explanation of why. We also did not want to build another generic career chatbot. CareerPilot Job Radar combines real public job search, transparent matching, optional AI analysis by NVIDIA Nemotron, and application tracking in one browser-first app.
What it does
CareerPilot Job Radar helps job seekers discover, evaluate and track relevant jobs from their own career profile.
Profile from a CV. Upload a PDF, DOCX or TXT resume, or type your details. The text is read in your browser. You can then click to have Nemotron turn it into a profile (target roles, skills, education, preferences) that you can edit; if the AI is unavailable, a rule-based extractor does the job. Choose where to look. Pick up to 5 places from a worldwide list of about 23,600 cities plus every country (accent-insensitive, with common alternative names such as Bangalore/Bengaluru), or type your own. Pick job sites from a grouped, searchable list of 97 sources: global boards, India, US and Canada, UK and Ireland, Europe, Middle East and Africa, Asia-Pacific, Latin America, remote and startup boards, and employer career pages (Greenhouse, Lever, Workday and others). Only the sites you tick are searched. A mandatory time window. Last 1 day, 1 week, 2, 3 or 4 weeks. There is no "all time" option. A listing is shown only when a posting date inside the chosen window can be verified; listings without a verifiable date are hidden, and the app tells you how many were hidden. Transparent ranking. Results are de-duplicated, link back to the original listing, and scored with plain keyword logic. Each card shows the matching terms and the skills not found in the listing text. Nemotron on request. For any job, one click asks NVIDIA Nemotron to explain relevant experience, possible skill gaps and what to verify before applying. The explanation never changes the score. Application tracker. Save jobs, move them through Saved, Applied, Interview, Offer and Rejected, add a job manually, and export or restore everything as a JSON backup.
Profile and saved jobs stay in your browser by default, and the app says clearly when something is sent to a search or AI service.
How we built it
CareerPilot is a React, TypeScript and Vite app, deployed on Vercel, with Vercel serverless functions for the server-side integrations. Three parts work together:
Public job discovery. A Vercel function calls the Tavily Search API. For each chosen place it builds targeted queries, groups the chosen sites into a few searches (with a hard cap of 8 searches per click to control cost), restricts results to the selected domains, then applies the date check and removes duplicates. NVIDIA Nemotron through Nebius Token Factory. We call nvidia/nemotron-3-super-120b-a12b through Token Factory's OpenAI-compatible chat-completions API for three separate jobs: extracting a profile from a CV, planning the search queries, and explaining each job. Every one of these has a rule-based fallback, so the app still works without the model, and the model's output is parsed defensively (reasoning blocks and code fences are tolerated). Browser-first storage and documents. CVs are read in the browser with PDF.js and Mammoth.js. Profile and saved jobs live in localStorage. Resume text goes to the hosted model only when the user clicks an AI feature, and a separate opt-in controls whether resume text is included in job explanations.
API keys live only in server-side environment variables, never in the front-end code. The project has automated tests for date handling, location and source selection, matching and URL checks.
Challenges we ran into
Fresh, real listings. Search results can include expired jobs, category pages, duplicates, and pages whose dates are missing or contradict each other. We made the time window mandatory and hide anything we cannot date, so the app favours freshness over volume and can return fewer results. In testing we also found two edge cases where a listing's age text can disagree with the date the search provider reports, or use a format we do not recognise. We documented both as issues rather than hiding them, and we treat the date filter as best-effort, not a guarantee.
Matching without overclaiming. Keyword overlap is not proof that someone is qualified. We kept the match score separate from Nemotron's explanations, so users can see exactly why a job scored as it did and read the AI's view of gaps without an unexplained AI score.
Privacy and hosted AI. CV extraction is local, and search requests carry only the profile fields needed for discovery. Anything that sends resume text to a hosted model needs an explicit click.
Scale of choice. Letting users pick several places and dozens of sites could multiply search calls. We solved it by grouping sites per search, filling a location into each query, and capping the total.
Accomplishments that we're proud of
A working, deployed end-to-end flow: profile, public job search, ranking, explanation and tracking. Nemotron used for three distinct tasks (profile extraction, query planning, job explanation), not just a chat box. A hybrid design: deterministic TypeScript does ranking, date checks and de-duplication; Nemotron adds optional context. The AI cannot silently change a score. A worldwide location picker (about 23,600 cities plus all countries) and a 97-site source picker, both searchable and keyboard-friendly. A mandatory freshness window with no "all time" escape, and honest reporting of how many listings were hidden. Original job links preserved, local-first storage, explicit consent for AI that sees resume text, and rule-based fallbacks for every AI feature.
What we learned
A useful AI app needs more than a model behind a text box. Reliable retrieval, clear matching rules, privacy boundaries and good fallbacks matter just as much. Nemotron fits tasks that need interpretation and structured output; plain TypeScript fits tasks that must be predictable, like date windows, URL de-duplication and ranking. Keeping them separate made the app easier to reason about.
We also learned that public web search is not complete access to every job portal. Coverage is partial, listings can be stale and snippets can be thin, so the app should say so instead of presenting every result as a confirmed opening. And designing privacy in from the start gives users real control over sensitive career data.
What's next for CareerPilot Job Radar
Fix the two known date edge cases and measure matching quality against hand-reviewed examples. Go beyond keyword overlap for skills and experience, and detect duplicates, stale postings and irrelevant pages better. Add caching and rate limiting, and show each listing's freshness and verification status more clearly. Later: daily job alerts, adjustable matching weights, resume versions, interview preparation and optional encrypted sync across devices.
Our long-term goal is a privacy-conscious career workspace that takes you from discovering a job, to understanding your fit, to applying at the original source and managing the process, with AI assisting and the candidate in control.
Built With
- mammoth.js
- nemotron
- pdf.js
- react
- tavily
- typescript
- vercel
- vite
Log in or sign up for Devpost to join the conversation.