Inspiration
Finding a role takes more than collecting vacancies. Job seekers need to decide which results match their experience, understand the evidence behind that match, and keep track of what happens next. JobLens brings those steps into one workflow while making its scoring decisions inspectable.
What it does
JobLens turns a résumé into a reviewable candidate profile. The user confirms extracted skills, target roles, and search markets before activating it. From there, JobLens discovers jobs through supported public APIs, preserves source responses, normalizes postings, extracts skills, and detects duplicate listings.
A deterministic ranking policy creates a bounded shortlist. When enabled and within its configured budget, an NVIDIA Nemotron model served through Nebius Token Factory supplies the final fit score and a concise explanation. The dashboard clearly identifies whether a score came from NVIDIA on Nebius or from the deterministic fallback, and users can expand the evidence behind the result.
JobLens also supports the rest of the search workflow: users can save roles, track application stages, and manage follow-ups. Saving a result tracks it inside JobLens; it does not automatically apply to an employer.
How we built it
The frontend is React and Vite. A Java 21 and Spring Boot modular monolith serves the interface and APIs on Render. PostgreSQL on Neon stores candidate profiles, job evidence, scores, application state, and Spring Batch execution checkpoints. Flyway owns schema changes.
Spring Batch runs the durable discovery and intelligence workflow:
- Build or refine provider-specific search queries.
- Fetch listings through supported public job APIs.
- Preserve raw responses before business transformation.
- Normalize postings and extract skills.
- Detect exact and explainable fuzzy duplicates.
- Produce deterministic role-aware scores.
- Send only a bounded shortlist for optional NVIDIA scoring.
- Persist score provenance, explanations, and run diagnostics.
The NVIDIA integration calls Nebius Token Factory with structured candidate and job facts. Model responses must satisfy a bounded JSON contract. Timeouts, invalid responses, unavailable inference, or exhausted call budgets keep the deterministic score instead of breaking the workflow. Successful model scores are cached against the profile version, job content, model, and prompt version, so unchanged inputs do not require another inference call.
JobLens also has an independently controlled AI query-planning step. It can refine an existing provider query and page budget before discovery. The dashboard shows whether a query was AI-assisted or rule-based and exposes the planner rationale. In our live verification, the model retained the existing Adzuna query because prior results supported it; we present this as integration evidence rather than claiming an unmeasured relevance improvement.
Challenges we ran into
One challenge was making model output dependable inside a larger data pipeline. During integration, a reasoning response consumed the available output budget before producing the required scoring JSON. We adjusted the bounded scoring request and added strict validation, deterministic fallback, audited attempts, and caching.
Another challenge was fuzzy duplicate detection at realistic data volume. An early implementation held a database transaction too long while comparing a global set of jobs. We replaced it with indexed candidate selection and checkpointed short writes, which allowed the deployed workflow to complete without the earlier idle-in-transaction failure.
Hosted demos add practical constraints too. Free-tier cold starts and synchronous search requests can make a browser request appear to time out even though the durable batch execution continues. JobLens records each run so its actual state can be inspected before retrying.
Accomplishments that we are proud of
- A real end-to-end workflow from résumé review to job discovery, ranking, application tracking, and follow-ups.
- Visible score provenance and expandable explanations instead of an unexplained ranking number.
- Guarded NVIDIA inference with bounded calls, deterministic fallback, caching, and an auditable attempt ledger.
- Durable, restartable ingestion and intelligence processing with Spring Batch.
- Explainable exact and fuzzy duplicate evidence.
- A deployed public demo and an Apache 2.0 licensed repository with reproducible setup documentation.
What we learned
Hosted inference is only one part of a trustworthy AI feature. The application also needs input boundaries, schema validation, fallback behavior, cost controls, cache identity, provenance, and evidence that users can inspect. We also learned that AI should be used where it adds judgment while deterministic processing remains responsible for repeatable normalization, deduplication, and baseline ranking.
Nebius Token Factory let us run an NVIDIA model without operating GPU infrastructure inside the application stack. That kept the deployment focused on the product workflow while still giving the system access to hosted accelerated inference.
What's next for JobLens
Next we will evaluate ranking quality against reviewed examples and improve asynchronous run feedback. Identity, authorization, secure résumé storage, privacy workflows, observability, backups, and high availability remain separate production milestones. The hosted demo is intended for synthetic or redacted résumé data.
Built With
- spring-boot
Log in or sign up for Devpost to join the conversation.