We're building Opalite: a social platform that feels familiar, but where your privacy is the default — not an afterthought.
Post. Connect. Chat. But here's the difference: your profile never touches a public database, your connections are sealed until mutual interest is confirmed, and only you decide what to reveal.
- Create a DID. You register a Decentralized Identifier on the Midnight ledger — your digital presence, cryptographically yours, with zero personal data exposed on-chain.
- Your profile stays off-chain. Your photos, bio, and preferences are stored as a private commitment. Only a cryptographic hash ever hits the public network. No plaintext profiles. No data leaks.
- Mutual connection unlocks the chat. When two people connect, a zero-knowledge proof verifies the connection — confirming mutual interest without broadcasting who connected with whom to the entire network. Profiles unlock, and a private chat is assigned.
- Chat freely. End-to-end encrypted conversations tied to your DID. No server-side message storage. No ad network tracking.
Midnight's Compact smart contracts and selective disclosure let us build what traditional social platforms can't: a network where real connections happen without turning your social life into a data commodity. Prove you're a real person without surrendering your identity. Prove you're authentic without exposing your life story.
- Clients: React Native (iOS & Android)
- Protocol: Midnight Network
- Contracts: Compact (DID Registry, Credential Issuer, Proof Verifier, Schema Registry)
- Identity: Decentralized Identifiers with zero-knowledge proofs
- Web: Astro + Tailwind CSS
- Runtime: Node.js 24 LTS, pnpm 10.7.0
| Directory | Description |
|---|---|
packages/contracts/ |
Midnight Compact smart contracts (age verification) |
packages/web/ |
Astro + Tailwind website and whitepaper |
deploy-cli/ |
Custom deployment CLI for Midnight preprod |
docs/ |
Handoff documents and session notes |
Our first contract implements privacy-preserving age verification on Midnight:
- Ledger state:
verifiedCount(Counter) — tracks total verifications - Circuit:
verifyAge()— increments the counter via a zero-knowledge proof - Private state: Shielded — the count is visible but individual verifications are not
# Compile the contract
compact compile src/age_verification.compact src/managed/age_verification
# Run tests
pnpm test# Clone and install
git clone https://github.com/APECSdev/opalite.git
cd opalite
nvm use 24
pnpm install
# Start the proof server (required for deployment)
docker compose -f deploy-cli/proof-server.yml up -d
# Run the deploy CLI
cd deploy-cli
npx tsx src/preprod.tsMIT — see LICENSE for details.
Built for the Rise In — New Moon to Full hackathon.
Real connections. True privacy.

