Guided demo · 7 stops

Click these in order.

Each stop is a real route with real on-chain or cryptographic substance behind it. Estimated 8-12 minutes end-to-end. If you're a hackathon judge — this is the path that gives you everything you need to score the submission.

01

Open the subpoena scene first

What
A clinician produces what would be disclosed under a PDPO §57 subpoena.

Why it matters
Establishes the asymmetry we're attacking. The status quo would disclose name, HKID, employer, and document scans. Compass discloses a 15-minute bucket and a commitment. That's the whole pitch in 5 seconds.

What lands on-chain
Nothing. This is a read-only view of a fixture receipt.

02

Onboard as Maria

What
Four-step flow: connect Privy embedded wallet → mint a soulbound agent NFT → receive a fresh SD-JWT VC → request eligibility.

Why it matters
This is the full happy path. Each step is real on Galileo (or mainnet when NEXT_PUBLIC_COMPASS_USE_MAINNET=1). The SD-JWT VC is signed Ed25519 by the issuer route; the vault is AES-256-GCM with a non-extractable WebCrypto key; the grant is EIP-712 typed-data signed by the user's embedded wallet.

What lands on-chain
Step 2 mints an INFT in AgentRegistry. Step 4 atomically consumes a single-use grant + emits a ReceiptIssued event in CompassHub, all in one tx.

03

Inspect the encrypted vault

What
See the credential ciphertext, the AES-GCM IV, and the metadata. Open DevTools → IndexedDB to confirm the decryption key is non-extractable.

Why it matters
Plaintext SD-JWT VC never enters localStorage. The WebCrypto key handle persists across page reloads and cannot be exported via WebCrypto APIs (extractable=false); same-origin script execution can still call decrypt() with it, which is why a strict CSP is on the v0.6 hardening list.

What lands on-chain
Nothing. The vault lives client-side; the ciphertext upload to 0G Storage is the v2 path (currently behind COMPASS_LIVE_STORAGE=1).

04

Read the public audit log

What
The on-chain ReceiptIssued events with the non-identifying fields exposed.

Why it matters
This is what the world sees. policyId, nullifier, agentIdCommitment, resultHash, attestationDigest, timestampBucket. No row in this log lets you derive who the worker is.

What lands on-chain
Already on-chain — this is just the read view. Each event ties back to a specific block on chainscan(-galileo).0g.ai.

05

Look at the 3D audit visualisation

What
A force-graph rendering of the same audit log, clustered by 15-minute timestamp bucket. No inter-receipt edges — we cannot suggest correlation between disclosures.

Why it matters
Demonstrates that even an attacker with the full receipt graph cannot infer who interacted with whom. The unlinkability is a structural property of the data, not a UI choice.

What lands on-chain
Nothing — read-only render.

06

Verify the chain yourself (in your browser)

What
Paste a Compass receipt bundle into /verify. Your browser re-runs the four cryptographic checks the verify-receipt CLI does — no server call, no clone, no install.

Why it matters
Don't trust the maintainer. Don't trust the website. The page does not send your bundle anywhere; everything happens in your tab. Same signer-recovery, quote-freshness, image-binding, and attestation-digest checks the Node CLI runs at enclave/scripts/verify-receipt.ts.

What lands on-chain
Nothing. This is the verifier path that closes the trust loop — and it now runs without a terminal.

07

Read the reality table

What
Every claim on the home page mapped to a row marked real / draft / mocked / stubbed.

Why it matters
Compass is honest about its limits. We do not hide draft rows behind happy-path screenshots. The trade-offs are itemised so a reader can decide for themselves whether the security claim holds for their threat model.

What lands on-chain
Nothing — but the rows that say 'real' all link to the tx, commit, or live URL that backs them.

After the tour

If you have questions: /faq. If you want to know what ships next: /roadmap. If you want to write about Compass: docs/press-kit.md.

If you want to fork for a different use case (refugee services, food bank, anonymous job-seeker eligibility, etc.): the contract surface is ~250 LoC of Solidity. Open an issue tagged use-case-fork.

Watch the 3-min demo →