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:
- Candidate experience >= minimum required experience
- Degree requirement is satisfied
- JavaScript requirement is satisfied
- 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
- blockchain
- compact
- docker
- github
- javascript
- midnight
- node.js
- smart-contracts
- typescript
- zero-knowledge-proofs
Log in or sign up for Devpost to join the conversation.