Inspiration

I work as the Peer Lead at an opioid drop-in center in El Paso, Texas — Proyecto Centro Salvavida, run by Recovery Alliance El Paso. Every day I sit across from people who are unhoused, in active addiction, and terrified that any record of their presence at our center could be used against them — by law enforcement, by immigration, by housing authorities.

That fear is not paranoia. It is lived experience.

Our center serves roughly 15,000 contacts per year. We are required by funders to collect attendance data, demographic information, and service records. But the people we serve have every reason not to trust a system that stores their name, their DOB, their status. Different staff members kept re-asking the same intake questions because nobody wanted to be the one holding that data. We were re-traumatizing people just to check them in.

I had stumbled across zero-knowledge proofs before I ever heard of Midnight — I was dabbling with NFTs in the Polygon ecosystem, trying to figure out smart contracts without really knowing what I was doing. I didn't know how to code then. Honestly, I'm still learning. But something about ZKP clicked for me — the idea that you could prove something is true without revealing why it's true felt like it was made for the people I serve.

Then I found the Midnight hackathon. I looked into the project and thought — this is exactly it. A blockchain built from the ground up for privacy, with ZKP as the core primitive, not an afterthought. I didn't hesitate.

What it does

MANO (which means hand in Spanish — the helping hand) is an anonymous check-in credential system built on the Midnight blockchain using zero-knowledge proofs.

A participant enrolls once. Their identity is sealed on-chain — cryptographically committed but never revealed. Every time they check in, they prove they are enrolled without revealing who they are. The blockchain records that someone checked in. Not who.

Over time, those check-ins accumulate into a verifiable milestone credential. With the participant's consent, that credential can be selectively disclosed to an employer, a housing provider, or a reentry program — proving consistent attendance in a recovery program without exposing any underlying identity.

Private by default. Transparent by choice.

How I built it

MANO extends the Midnight example-bboard reference implementation with 6 new Compact circuits:

  • enroll — First-time enrollment, stores sealed identity commitment on-chain
  • checkIn — Proves enrollment via ZKP, increments attendance counter, replay-protected via sequence
  • verifyMilestone — Proves X check-ins for credential disclosure
  • revokeEnrollment — Admin circuit with Circuit Breaker pattern for emergency pause
  • purePublicKey — Derives public identity from secret key + sequence (no ledger write)
  • getEnrollmentStatus — Read-only status check

Key Compact patterns used:

  • sealed ledger fields — identity hidden on-chain
  • disclose() — mandatory wrapper for witness-derived ledger writes
  • persistentHash with domain separation and sequence counter for replay protection
  • assert() guards on every state-mutating circuit
  • Counter type for milestone accumulation

The TypeScript API implements all 6 witness functions and a full simulator for offline testing. All 13 tests pass — success and failure cases for every circuit.

Challenges

I am self-taught. I learned Compact, ZKP concepts, the Midnight SDK, and TypeScript patterns essentially from scratch over the course of this hackathon — using documentation, the example repo, and AI assistance.

The WSL2 + Windows development environment added friction at every step: DNS resolution failures, proof server Docker configuration, Node version conflicts between Windows and WSL2.

The hardest conceptual shift was understanding that disclose() is not optional — any witness-derived value written to the ledger must be explicitly disclosed or the circuit rejects. This took real debugging to internalize.

What I learned

Zero-knowledge proofs are not just a cryptography concept — they are a human rights tool. The ability to prove something is true without revealing why it is true has profound implications for the most vulnerable populations in our communities.

I also learned that the hardest part of building privacy technology is not the cryptography. It is convincing people it is real — that their data truly cannot be extracted, that the proof is the point, that they are in control.

MANO is a capstone project today. It is a production system tomorrow.

What's next

  • Physical card system for participants without smartphones (~50% of our population)
  • WebAuthn fingerprint authentication (Phase 2)
  • Participant self-custody wallet — they claim their credential and it travels with them
  • Volunteer hour tracking as verifiable ZKP credential for employment and reentry applications## Inspiration

Built With

Share this project:

Updates