Inspiration
Candidates often have to share their complete résumé and personal details before knowing whether they meet the basic requirements of a job. I wanted to create a safer process where candidates could prove their eligibility without revealing all their information.
What it does
PrivateHire AI compares a candidate’s skills, education, and experience with a job’s requirements.
A candidate is eligible when:
- The skill match is at least 50%
- The education requirement is met
- The experience requirement is met
The Midnight contract creates an anonymous commitment and records only the commitment and final eligibility result. The candidate’s name, résumé, individual skills, education details, and work history are not stored on-chain.
How I built it
I built the frontend with React and Vite and used Flask for the eligibility API. The backend calculates the skill-match percentage and checks the education and experience requirements.
I wrote a Compact smart contract that applies the same eligibility rule and uses a secret nonce to create an anonymous commitment. I used the Midnight TypeScript SDK, Docker, a local Midnight node, an indexer, and a proof server to compile, deploy, and test the contract.
The web application prepares the proof inputs, while the Midnight CLI submits the proof to the local network and reads the verification result.
Challenges I ran into
Setting up the Midnight development environment was the biggest challenge. I faced Windows permission issues, Docker and WSL integration problems, and Compact compiler setup errors.
The proof transaction also failed because two Midnight packages were using different versions of the on-chain runtime. I found the version conflict, aligned the dependencies, redeployed the contract, and successfully submitted the proof.
Accomplishments that I'm proud of
- Built and compiled my first Compact smart contract
- Deployed the contract on a local Midnight network
- Successfully generated and submitted an eligibility proof
- Stored only an anonymous commitment and eligibility result on-chain
- Built and deployed a complete React and Flask application
- Kept the same eligibility rule across the backend and smart contract
What I learned
I learned how Compact contracts and zero-knowledge proofs work on Midnight. I also learned how to separate private inputs from public blockchain data.
This project improved my understanding of Docker, WSL, TypeScript SDKs, smart-contract deployment, dependency debugging, and privacy-first application design.
What's next for PrivateHire AI
Next, I want to connect the web interface directly to a Midnight-compatible wallet so users can submit proofs from the browser.
I also plan to integrate it with my Semantic Job Analyzer, support verified education and employment credentials, and allow candidates to reuse their private eligibility proofs when applying for different jobs.
Built With
- blockchain
- compact
- docker
- flask
- javascript
- midnight
- privacy
- python
- react
- typescript
- vite
- zero-knowledge-proofs