Private Chat via Lit/Ceramic, with Read Receipt and Unsend - Extensible to Lens Protocol
Wallet-to-Wallet private messaging system using Lit/Ceramic. Features include configurable message read receipts, unsend messages, in addition to the encrypted messaging with just a wallet as the login. DID authentication is being used as well, which is built into the integrated lit-ceramic-sdk
How it's made
I used Lit to encrypt the data and Ceramic to store the data. Access conditions used for encryption/decryption start out as only the sender and receiver can decrypt the message data using their wallets to sign and prove they own the address. Currently this runs on polygon, but could be any ETH based chain I believe. I added a simple RestAPI to coordinate StreamIDs which are needed to know what to decrypt. For Message unread functionality, I used the lit-ceramic-sdk as a base module, and I added an "updateAccess" function to integration.ts, along with the corresponding sub-module functions. This allows a user to unsend a message by removing the message recipient from the "Access Conditions" therefore even if they still know the streamID, they cannot decrypt the data. This added function could be used to edit messages already sent as well, with a few tweaks and some UI additions. The UI needs a lot of work, to get the data in order and in a more efficient manner.