01 · Browser Extensions
WhatsApp Web CRM Sidecar
Sales reps at Runo work inside WhatsApp Web, where no official API exists to read a live personal session. Early prototypes interrupted reps by stealing focus from their active chat or stalling on undocumented bulk limits.
I reverse-engineered WhatsApp Web's minified Webpack module registry to resolve its internal chat and contact stores at runtime, then built history paging that reads past conversations directly from the store — without switching the screen the rep is looking at.
Result: a Manifest V3 extension that syncs chat history and contact identity into the CRM in the background, verified to leave the active chat unchanged across a full history page, with a fail-closed outbox for network retries.
Read the case studyCapturing Live CRM Leads from Closed WhatsApp Web Sessions
WhatsApp provides no official API to read live personal web sessions. Here is how the Manifest V3 sidecar reads state directly from browser memory without interfering with active sales reps.
In-Memory Webpack Store Hook
Directly hooks into WhatsApp Web’s minified Webpack module registry at runtime. Resolves WAWebChatCollection and WAWebConnModel by internal module ID with structural duck-typing fallback.
Zero-UI Background History Pager
Calls WAWebChatLoadMessages.loadEarlierMsgs() directly against the in-memory data store. Verified byte-identical active chat state: historical conversations sync without switching the user's screen.
Privacy Identity Resolver (@lid to @c.us)
WhatsApp’s newer privacy layer masks actual phone numbers under randomized @lid identifiers. Resolves real contact numbers through the internal Contact model before dispatching to the CRM.
Resilient Outbox & Batch Throttling
Enforces a strict 50-message payload ceiling on the backend CRM bulk endpoint. Failed network batches automatically re-enqueue in an isolated pendingOutbox queue rather than dropping data.