Skip to main content

Self-hosted privacy dashboard that reveals what messaging apps leak about you

Project description

message-metadata-mirror

See what your messaging apps are really telling Meta, Google, and Telegram—in real-time.

What is this?

message-metadata-mirror is a self-hosted privacy auditing tool that captures and visualizes metadata leakage from WhatsApp, Telegram, and Signal. Install a CA certificate on your local network, and immediately see timestamps, contact graphs, IP addresses, and device fingerprints that messaging apps reveal—even when end-to-end encryption is enabled. Generate weekly privacy reports showing the gap between what companies claim is encrypted and what you're actually exposing.

Think Little Snitch meets Wireshark, built for privacy-conscious users who want proof, not promises.

Features

  • Real-time metadata capture – HTTPS proxy intercepts and logs messaging app traffic without decrypting message content
  • Privacy-focused analytics – See contact graphs, request timing, IP patterns, device fingerprints, and server endpoints
  • Weekly privacy reports – Automated PDF exports showing what Meta/Google collected vs. their encryption claims
  • One-click setup – CA certificate installer + network proxy configuration for macOS, Linux, and Raspberry Pi
  • Docker-native – Deploy on any hardware (laptop, Pi, home server) with a single docker-compose up
  • Privacy by design – All data stays local; no cloud syncing or telemetry
  • Multi-app support – Built for WhatsApp, Telegram, and Signal (extensible analyzer framework)

Quick Start

Requirements

  • Docker and Docker Compose (or Python 3.10+)
  • 50MB disk space
  • Network access to route devices through proxy

Installation

  1. Clone and configure

    git clone https://github.com/yourusername/message-metadata-mirror.git
    cd message-metadata-mirror
    cp .env.example .env
    
  2. Launch with Docker

    docker-compose up -d
    

    The web dashboard is now running at http://localhost:8080

  3. Install CA certificate

    • Visit the setup page: http://localhost:8080/setup
    • Download the CA certificate and follow platform-specific installation steps
    • Configure your device to route traffic through the proxy
  4. Start capturing

    • Open WhatsApp, Telegram, or Signal on your device
    • Metadata is captured automatically
    • View live captures at http://localhost:8080/captures
    • Download weekly reports from the dashboard

Headless Setup (Raspberry Pi)

docker-compose -f docker-compose.yml up -d
# Configure devices to use <pi-ip>:8080 as proxy
# Access dashboard remotely at http://<pi-ip>:8080

Usage Examples

View real-time metadata captures

Dashboard → Captures tab shows every metadata leak with timestamps, endpoints, and contact info

Generate privacy report

Dashboard → Reports tab → "Generate Weekly Report"
Creates PDF showing:
  - Message sending patterns (timestamps)
  - Contact graph (who you're talking to)
  - IP geolocation of Meta/Telegram servers
  - Device fingerprint data leaked
  - Comparison vs. published privacy policies

Export raw capture data

API: GET /api/captures?format=json
Returns structured metadata for analysis in Excel, Python, etc.

Monitor specific contact

Captures → Search by phone number or contact name
See all metadata patterns for that conversation thread

Tech Stack

Layer Technology Rationale
Proxy mitmproxy Mature TLS interception; non-invasive metadata logging
Backend Python 3.10 + FastAPI Fast async framework; easy analyzer plugins
Database SQLite Local-only, zero-config, queryable
Reporting ReportLab + Jinja2 Self-contained PDF generation
Frontend Jinja2 templates + HTMX Lightweight, no build step, responsive
Deployment Docker + Docker Compose Single-command setup across all platforms
Payments Stripe (optional) Premium hosted version monetization

Configuration

Copy .env.example to .env and adjust:

PROXY_PORT=8080              # Local proxy listen port
DATABASE_URL=sqlite:///data/captures.db
REPORT_FREQUENCY=weekly      # daily, weekly, monthly
RETENTION_DAYS=90            # Auto-purge old captures
STRIPE_API_KEY=sk_live_...   # Optional: premium features

Privacy & Security

  • All data stays local – No cloud sync, no remote servers, no telemetry
  • Message content is never logged – Only metadata (headers, timestamps, endpoints)
  • Requires admin access – CA certificate installation prevents accidental interception
  • Open source – Audit the code at any time

Limitations

  • Requires network-level proxy configuration (devices must route through your network)
  • Metadata analysis only—encrypted message content remains inaccessible
  • Signal limits metadata exposure (smallest footprint of tested apps)
  • Requires periodic CA certificate updates on devices

License

MIT – Use freely for personal privacy auditing and research. Commercial deployment requires Stripe integration for hosted services (see MONETIZATION.md).

Contributing

Issues and pull requests welcome. Priority areas:

  • Additional app analyzers (iMessage, Viber, WeChat)
  • Mobile app setup wizard (iOS profile installer)
  • Tor routing option for metadata obfuscation

Questions? Open an issue. Want to audit your own apps? Start with the Quick Start above.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

message_metadata_mirror-0.1.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

message_metadata_mirror-0.1.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file message_metadata_mirror-0.1.0.tar.gz.

File metadata

  • Download URL: message_metadata_mirror-0.1.0.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for message_metadata_mirror-0.1.0.tar.gz
Algorithm Hash digest
SHA256 305e53e00f89fdf8ade091250280fb6f10a7cf6f53db40c9e7ab95be43524cf2
MD5 d4ee30ffc31f1dcc2c9091155748207c
BLAKE2b-256 ee48bd8863764036303e0866d138d2255a53c7a2f1b80cbe7d7d65cd7c25ef4c

See more details on using hashes here.

File details

Details for the file message_metadata_mirror-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for message_metadata_mirror-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b6105be3302d422b291ca7a319775bb22041af6dd99e974a1870a48bcc9406e
MD5 eff9a07ff9c3b4c30ceabda857ec24bc
BLAKE2b-256 9f20c31073826a12655b6fd6034a9b6c7e85ee4dfd1135af6b300e7534190fd1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page