Skip to content

emschwartz/turbo-vpb

Repository files navigation

TurboVPB Logo TurboVPB

TurboVPB is a free browser extension that speeds up phone banking with EveryAction's Open Virtual Phone Bank (OpenVPB), VAN, VoteBuilder, and BlueVote.

Get the extension at turbovpb.com.

If you find TurboVPB helpful, please leave a review in the Chrome Web Store or Mozilla Add-Ons to help others find it too!

Technical Details

The TurboVPB extension parses contact details from the virtual phone bank page and sends them to a static site loaded on the caller's phone. Messages are encrypted between the extension and the static site such that the server cannot read the contact details.

To connect the extension and mobile page, the user scans a QR code generated by the extension with their phone. The link encoded in the QR code points to https://turbovpb.com/connect and includes connection details in the URL fragment (hash), so the server never sees the encryption key.

TurboVPB never collects or stores the names, phone numbers, or any personal details of people contacted.

Architecture

The project is a monorepo with three independent components:

  • Extension (extension/) - Browser extension for Chrome and Firefox, built with TypeScript, Preact, and WXT. Content scripts scrape contact details from supported phone bank platforms and manage the WebSocket connection. Includes a popup for call stats and an options page for message templates.
  • Relay Server (server/) - Rust server (Axum, Tokio) that acts as a WebSocket pub/sub relay between the extension and the mobile page. It never sees decrypted contact data. Deployed to Fly.io.
  • Mobile Page - Static page served at turbovpb.com/connect that receives encrypted contacts, decrypts them in the browser, and displays them for easy calling/texting.
 Phone Bank Page           Relay Server           Mobile Phone
┌────────────────┐        ┌─────────────┐        ┌──────────────┐
│    Extension   │──WSS──▶│  WebSocket  │──WSS──▶│  Static Page │
│                │        │  Pub/Sub    │        │              │
│ Scrape contact │        │             │        │ Decrypt with │
│ Encrypt (AES)  │        │ (encrypted  │        │ key from URL │
│ Send via WS    │        │  pass-thru) │        │ Display info │
└────────────────┘        └─────────────┘        └──────────────┘
         │                                               ▲
         └───── QR code (contains channel ID + key) ─────┘

Encrypted WebSocket PubSub

TurboVPB uses a publish-subscribe pattern where the messages are end-to-end encrypted using symmetric encryption.

For each phone bank session, the extension uses the browser's SubtleCrypto.generateKey() method to create an AES-GCM encryption key with a 256-bit key. The encryption key is passed to the static mobile site in the URL fragment/hash at the end of the URL encoded in the QR code. In addition, the extension generates a random PubSub channel ID, which is also communicated to the mobile page in the connection URL.

Questions or Feedback?

Open an issue or email me at evan [at] turbovpb [dot] com.

About

Browser extension to speed up phone banking with OpenVPB, VAN, DNC VoteBuilder, and BlueVote.

Topics

Resources

License

Stars

Watchers

Forks

Contributors