Proof of Data
App
Open the app
Encrypt, query, verify, waitlist.
Encrypt your data
Encrypt a file in this browser to the TEE server's key.
402
Query the data
Price an AI query and pay it over x402 in USDG.
Verify the server
Check its Intel TDX proof against the onchain registry.
Private AI model
Trained on your data, pays you on every call. First training at 25 text uploads.
Join the waitlist
Uploads open in waves, in sign-up order.
Read
Protocol
Documentation
Dev log
X
Docs · How it works

Your data and encryption

Every upload is one file and its type. It is encrypted in your browser before it leaves your phone or computer, and only the TEE server can open it.

Your phoneHPKE encryptThe siterelays encrypted dataTEE serveropens, storesenc, ctenc, ctonchain: hash, type, size, owner
Encryption. Your data exists in the clear on your phone and inside the TEE server, and nowhere in between.

Data types

TypeWhat it holdsLimit
Voice noteaudio, transcribed inside the TEE serverup to 2 minutes
Dashcam ridetrack, framesGPS track and one frame a second, 20 MB
Typing rhythmkey intervalscaptured on the typing test
Dream journalentriestext
Receiptimage, texta photo, read inside the TEE server
Screen timeapps, minutesthe CSV or screenshot a phone gives

The encryption

Each upload is encrypted with HPKE (RFC 9180) in base mode: DHKEM over X25519 with HKDF-SHA256, then AES-128-GCM. The browser makes a fresh ephemeral key for every upload, so two uploads never share a key. The data type and the server id are bound in as associated data: an encrypted file moved to another type or another server fails to open.

The code is the same in the app, the SDK and the TEE server, and it is tested against an independent HPKE implementation. You can run it now in the app's Encrypt tab with a local test key.

The onchain record

The Plates contract stores the SHA-256 of the ciphertext, the type, the size in bytes, the server id and the owner. Only an active server signer can register an upload, and only with the owner's EIP-712 signature over exactly those fields. Contents never touch the chain.

Deleting an upload

The owner calls remove(id), or signs a Remove message that the relayer submits. The upload leaves the next day's payouts and the next model training, and the server drops its encrypted file.