Inspiration
Most "anonymous" feedback tools aren't actually anonymous. The platform still knows who posted what, they just promise not to tell anyone. We wanted to see if that promise could be replaced with a guarantee, something enforced by math instead of trust. Midnight's zero knowledge tooling made that possible, so we built a feedback board where authorship is provable when it needs to be (so you can delete your own post) and unknowable otherwise.
What it does
Anyone can post a message to the board. Only the person who posted it can remove it, and the contract verifies this using a zero knowledge proof, so the blockchain never learns who the author actually is. It's a small example, but it demonstrates a real pattern: prove you're allowed to do something, without revealing who you are.
How we built it
We started from Midnight's official example-bboard template, a Compact smart contract with two circuits, post and takeDown, plus a CLI and a React UI. Since one of us was completely new to blockchain development, we adapted the template rather than writing contract logic from scratch, and focused our effort on actually getting a full Midnight stack running end to end.
That turned out to be most of the work. Compact doesn't support Windows natively, so we set up WSL2, Docker, and the Compact compiler from zero inside Ubuntu. We compiled the contract, ran a local zero knowledge proof server, and connected it all to a Lace wallet on Midnight's Preprod testnet.
Challenges we ran into
Nearly every layer of the stack threw something at us. The Compact installer failed partway through extraction and needed a manual unzip. The contract's pragma pinned an exact language version that didn't match our compiler, and after loosening that, we hit a deeper mismatch between the compiled contract and its JS runtime dependencies, which needed a compiler upgrade and a recompile to actually fix. Docker's WSL integration broke twice and needed a factory reset. Lace defaulted to a remote proof server instead of our local one, which silently stalled our transactions for a long time before we caught it. And on final deployment, we ran into real congestion on the shared Preprod testnet, likely from a full weekend of hackathon traffic hitting it at once.
What we learned
We learned the full path of building on Midnight, from writing and compiling Compact contracts, to running a local proof server, to wallet based transaction signing on a real testnet. We also learned a lot about environment setup on Windows for a toolchain that assumes Linux or Mac, and how many small version mismatches (language version, compiler version, runtime version) can quietly break a build that looks fine on the surface.
What's next
Given more time, we'd want to move past a single shared board to support multiple independent boards per team or community, and add lightweight moderation tools that still protect poster anonymity. We'd also want to properly confirm deployment once testnet conditions settle, since everything up to that point is verified working.
Built With
- blockchain
- compact
- docker
- lace-wallet
- midnight
- node.js
- privacy
- react
- smart-contracts
- typescript
- web3
- wsl2
- zero-knowledge
- zero-knowledge-proofs
- zk-proofs
Log in or sign up for Devpost to join the conversation.