Work / Lab

Oblivion

A privacy-first messenger and wallet prototype: Waku E2EE messaging, an Ethereum wallet, one encrypted local vault.

Status
explored
Role
Solo: directed OpenAI’s Codex agent
Timeline
May 2026 →
  • 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

MetricValueSource
PBKDF2-SHA256 iterations310,000local: oblivion/src/lib/vault.ts:5
Vault cipherAES-GCM-256, fresh 12-byte IV per writelocal: oblivion/src/lib/vault.ts:172-229
m.mittal
Home
Work
Research
Lab
About
Experience
Now
Résumé
Uses
Colophon
Contact
AccountWardin-build
Redlbuilt
The Councilresearch
BEMAresearch
EXIT LIQUIDITYin-build
NEXUSarchived
Warrant + Forgebuilt
Concordarchived
BlueCollarPalin-build
Chispenbuilt
Warrant Portalbuilt
JobAppin-build
Night/Dayexplored
BLACKSITE: NULLin-build
SlugBitesbuilt
Riptidebuilt
AeroBitesarchived
Internbuilt
CAD & 3D printingexplored
ForgeCouncilexplored
ADDE: adversarial due-diligence engineexplored
Model routing in practiceexplored
AI due-diligence market mapexplored
Quorumarchived
Colossus Wakeexplored
FitFindrbuilt
Project Omniexplored
Oblivionexplored
MeetWisebuilt
EyeOSexplored
LinkLeap AIexplored
Up-Toexplored
Offline speech-to-notes (Java)explored
AI-assisted game production pipelineexplored
COLLAPSEarchived
THE TRIALSarchived
EcoNodearchived
ESP32-S3 / LoRa benchexplored
CleanPlaybuilt
Rezonyrbuilt
Habit Tracker Telegram Botbuilt
Job Board Aggregatorin-build
Visual Hand Trackbuilt
CLI Task Trackerbuilt
All work44 entries
Can’t Hallucinate, Can Still Be Wrong: Calibration of a Typed-Decision Model Under Input Noisepaper
Disagreement as Signal: A Hybrid Multi-Agent and Council Architecture for Error Detection in LLM Systemspaper
Killing Good Ideasessay
Uncorrelated Failure Modesessay
ADDE: adversarial due-diligence engineexplored
AI due-diligence market mapexplored
AI-assisted game production pipelineexplored
Aura Chatexplored
Colossus Wakeexplored
EcoNodearchived
ESP32-S3 / LoRa benchexplored
EyeOSexplored
FitFindrbuilt
ForgeCouncilexplored
LinkLeap AIexplored
MeetWisebuilt
Model routing in practiceexplored
Offline speech-to-notes (Java)explored
Oblivionexplored
Print benchexplored
Project Omniexplored
Provably-fair outcome enginebuilt
Quorumarchived
Up-Toexplored
Copy hello@mitanshm.com
Switch theme
Play motion
RésuméPDF
Open GitHub ↗mit37
Open LinkedIn ↗
Toggle layout gridh
Toggle single-key shortcuts/ h