Inspiration

Job applications require candidates to share sensitive information such as experience, education, skills, and salary expectations. In many cases, a recruiter only needs to know whether a candidate meets the requirements—not every private detail behind that result.

Private JobMatch was built to explore how Midnight and zero-knowledge technology can enable privacy-preserving job matching.

What it does

Private JobMatch allows an employer to define public job requirements:

  • Minimum years of experience
  • Whether a degree is required
  • Whether JavaScript knowledge is required
  • Maximum salary

A candidate's experience, degree status, JavaScript knowledge, and expected salary remain private.

The application generates a proof-based match against the job requirements and stores only the final result publicly:

Match: true or false

The private candidate data is not exposed on the public ledger.

How I built it

The project was built using Midnight's Compact smart contract language and the Midnight TypeScript ecosystem.

The main components include:

  • A Compact smart contract for job requirements and matching logic
  • Private witnesses for candidate information
  • Zero-knowledge proof generation for private matching
  • TypeScript and Node.js application logic
  • An interactive CLI for setting job requirements, entering private candidate data, generating a match proof, and reading public results
  • Docker-based proof server configuration

The matching logic checks:

  1. Candidate experience >= minimum required experience
  2. Degree requirement is satisfied
  3. JavaScript requirement is satisfied
  4. Expected salary <= maximum salary

All conditions must be satisfied for the candidate to match.

Challenges I faced

One major challenge was debugging compatibility between Midnight runtime dependencies. The application initially produced a StateValue runtime error because different versions of the on-chain runtime were installed.

After identifying the dependency mismatch and aligning the runtime versions, contract calls and state updates worked correctly.

Another challenge was understanding the separation between public contract state and private witness data and ensuring that candidate information was used during proof generation without being written directly to public contract state.

What I learned

This project helped me understand:

  • Midnight Compact smart contracts
  • Public and private state separation
  • Witness-based private data
  • Zero-knowledge proof-based computation
  • Contract compilation and deployment workflows
  • Midnight TypeScript libraries
  • Debugging blockchain runtime dependency issues

What's next

Future versions could support multiple jobs and candidates, additional skills, decentralized recruiter access, richer matching criteria, and a web-based user interface.

Private JobMatch demonstrates a simple but practical idea: verify whether a candidate qualifies without unnecessarily exposing the candidate's personal information.

Built With

Share this project:

Updates

Submission history