Collection No. 01 — 1,000 Zero-Knowledge Ideas
Noir Catalyst
One thousand conceptual threads where the world's creative disciplines meet five Noir primitives — private predicates, commitment binding, Merkle set membership, in-circuit signature checks and recursive aggregation — each one a real zero-knowledge proof, generated in the browser, shippable in a single Lovable build.
Primary Directive · dance
Budget Compliance Checker
Budget Compliance Checker proves membership of a funding proposals roster against a public Merkle root without revealing which member.
View Entry
02
Screening Credentials Check
Theme · video
1kZK Entries
Section IIFive Noir primitives.
Predicates, commitments, Merkle paths, signatures and recursion — the five circuit shapes every entry leans on.
Appendix · Build Strategy
→The Three-Mode Protocol
Browser prover, precompiled circuit or native and on-chain — one Lovable build, a real proof either way.
Status
Proving in the browser.
Chapter I · Disciplines
See full index →Ten houses, one proving stack.
💃01/10
Dance & Choreography
100 entries →
🎵02/10
Music & Sound Design
100 entries →
🎨03/10
Visual Art
100 entries →
🎥04/10
Videography & Film
100 entries →
📷05/10
Photography
100 entries →
✍️06/10
Writing, Poetry & Narrative
100 entries →
🎬07/10
Filmmaking & Animation
100 entries →
🎮08/10
Game Design & Interactive Media
100 entries →
🎭09/10
Theater & Live Performance
100 entries →
👗10/10
Fashion & Textile Design
100 entries →
Chapter II · Primitives
Read the primer →The five primitives.
assert a bound, reveal a verdict№ 01
Private Predicate
a Noir circuit takes the sensitive value as a private input and the bound as a `pub` input, then states the claim as an assertion — `fn main(dob_year: u32, threshold: pub u32) { assert(dob_year <= threshold) }`. A proof exists only when the assertion holds, so the verifier learns the verdict and nothing else: no age, no salary, no score, no location
hash a secret, publish the handle№ 02
Commitment Binding
the circuit hashes the private witness and returns the digest as a public output — `std::hash::pedersen_hash([secret_lo, secret_hi])` over the two 128-bit limbs of a SHA-256 digest, because a 256-bit hash does not fit in one BN254 field. Pedersen is deterministic, so the same secret always yields the same commitment: two proofs can be linked to one hidden document, and a verifier can recognise it without ever seeing it
in the list, without saying which row№ 03
Set Membership
publish a Merkle root of the allowed set, then prove a private leaf and its private sibling path hash up to that public root. The circuit recomputes the path and asserts equality with the root, so membership is proved while the identity of the member — and the size and order of the set — stay private
check the issuer, hide the document№ 04
In-Circuit Signature
verify an ECDSA (secp256k1/secp256r1) or EdDSA signature inside the circuit — `std::ecdsa_secp256k1::verify_signature(pub_key_x, pub_key_y, signature, message_hash)` — with the signed payload private and the issuer's public key public. The proof says 'a named authority signed something with these properties' without publishing the signed document itself
a proof about proofs№ 05
Recursive Aggregation
verify one proof inside another with `std::verify_proof`, folding several independent claims into a single succinct proof. The inner proofs' public inputs become private witnesses of the outer circuit, so a chain of attestations, a batch of transactions or a season of contributions collapses to one artefact a verifier checks once
Three movements, ten minutes.
- Movement 0101Choose a houseSkim ten disciplines. Open the one that suits your team.
- Movement 0202Read an entryPitch, Noir primitive, plain-language proposition, market sizing.
- Movement 0303Copy the mega-promptPick a build mode, paste into Lovable, generate a real proof. Ship.
1,000 entries indexed · zero infra · ready to ship