Work / Lab
Oblivion
A privacy-first messenger and wallet prototype: Waku E2EE messaging, an Ethereum wallet, one encrypted local vault.
- React 19
- TypeScript
- Vite
- Waku (@waku/sdk)
- ethers 6
- Web Crypto
- protobufjs
- Farcaster Hub API
- Tauri 2 (config only)
TL;DR
- A messenger and a wallet in one app, built by composing open protocols instead of inventing crypto.
- Everything sensitive on the device lives in one AES-GCM-256 vault, keyed by PBKDF2-SHA256 at 310,000 iterations and re-encrypted under a fresh IV on every write.
- I directed OpenAI’s Codex agent through it in one two-hour session.
What I built
- Messaging: Waku light-node messaging with ECIES-encrypted, signed protobuf packets.
- Wallet: a non-custodial Ethereum wallet on ethers.
- Feed: a Farcaster feed with a keyword-based, client-side filter for graphic media.
- Vault: both private keys, the contacts and every conversation, in one encrypted store.
- Contacts: added from a pasted key or from an
oblivion://invite rendered as a QR code.
Mid-build I pivoted it from Expo to Vite and React with a Tauri 2 desktop shell, and I ran two clients side by side to test node-to-node messaging.
Next
Before anyone else touched it, I’d add a send-confirmation step (it defaults to Ethereum mainnet), turn the content security policy on, and move key storage out of the webview. Multi-hop privacy routing and the native desktop build stayed on the roadmap.
Verified numbers
| Metric | Value | Source |
|---|---|---|
| PBKDF2-SHA256 iterations | 310,000 | local: oblivion/src/lib/vault.ts:5 |
| Vault cipher | AES-GCM-256, fresh 12-byte IV per write | local: oblivion/src/lib/vault.ts:172-229 |