(How it works)

Your data and encryption

Every upload is one file and its kind, sealed in your browser.

A negative is one file and its kind. Six kinds on day one: voice notes, dashcam rides, typing rhythm, dream journals, receipts and screen time.

Sealing. Your browser encrypts the file with HPKE base mode (RFC 9180): DHKEM(X25519, HKDF-SHA256), HKDF-SHA256 and AES-128-GCM, to the room's public key. The info string is darkroom-v1 and the associated data is kind|room, so a negative opens only inside that room and only as the kind it was sealed as. The implementation is about a hundred lines of WebCrypto and is tested both ways against an independent HPKE library.

Where it goes. Until your wave opens, the sealed copy stays in this browser (IndexedDB) and only its hash goes to the waitlist. When your wave opens, the ciphertext uploads straight to the room. This site never sees a file in the clear.

On the record. Hash, kind, size and owner. Never the contents.

Deleting. One signed message. The negative leaves the next payout and the next training, and its ciphertext is dropped from the room's disk.

$DARKROOMCA at launch