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.

Chapter I · Disciplines

Ten houses, one proving stack.

See full index →
Chapter II · Primitives

The five primitives.

Read the primer →
assert a bound, reveal a verdict01
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 handle02
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 row03
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 document04
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 proofs05
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
Chapter III · Method

Three movements, ten minutes.

  1. Movement 0101
    Choose a house
    Skim ten disciplines. Open the one that suits your team.
  2. Movement 0202
    Read an entry
    Pitch, Noir primitive, plain-language proposition, market sizing.
  3. Movement 0303
    Copy the mega-prompt
    Pick a build mode, paste into Lovable, generate a real proof. Ship.

1,000 entries indexed · zero infra · ready to ship