Skip to main content

Lightweight WSPR analytics: DuckDB ingest + Streamlit dashboard.

Project description

wspr-ai-lite

Lightweight WSPR analytics and AI‑ready backend using DuckDB + Streamlit, with safe query access via MCP Agents.

Made with Streamlit DuckDB MCP Docs License: MIT

Workflows and Packaging Status

Versions GitHub release GitHub tag PyPI version Python versions

CI/CD CI Smoke Publish pre-commit Conventional Commits


Overview

  • Analytics Dashboard: Streamlit UI lets you explore WSPR spots with SNR trends, DX distance analysis, station activity, and “QSO‑like” reciprocity views.
  • Canonical Schema: Data is normalized into a portable DuckDB file—consistent, lightweight, and ready for future backend upgrades.
  • CLI Tools: Click-based tools (wspr-ai-lite, wspr-ai-lite-fetch, wspr-ai-lite-tools) for downloading, ingesting, verifying, and managing the database.
  • MCP Integration: Experimental MCP server (wspr-ai-lite-mcp) exposing safe APIs for AI agents. A manifest defines permitted queries and access control.
  • Roadmap (v0.4+ vision): MCP server will migrate to a FastAPI + Uvicorn backend with service control (start/stop/restart), enabling production-grade deployment.

What Can You Do With It

Explore Weak Signal Propagation Reporter (WSPR) data with an easy, local dashboard:

  • SNR distributions & monthly spot trends
  • Top reporters, most-heard TX stations
  • Geographic spread & distance/DX analysis
  • QSO-like reciprocal reports
  • Hourly activity heatmaps & yearly unique counts
  • Works on Windows, Linux, macOS — no heavy server required.

Key Features

  • Local DuckDB storage with efficient ingest + caching
  • Streamlit UI for interactive exploration
  • Distance/DX analysis with Maidenhead grid conversion
  • QSO-like reciprocal finder with configurable time window

Fast Performance

  • Columnar Storage: DuckDB is a columnar database, which allows for better data compression and faster query execution.
  • Vectorization: processes data in batches, optimized CPU usage, significantly faster than traditional OLTP databases.

Ease of Use

  • Simple Installation: DuckDB can be installed with just a few lines of code, and on any platform.
  • In-Process Operation: It runs within as a host application, eliminating network latency and simplifying data access.

Quickstart (Recommended: PyPI)

1. Install from PyPI

optional but recommended: create a Python virtual environment first

python3 -m venv .venv && source .venv/bin/activate
pip install wspr-ai-lite

2. Ingest Data

Fetch WSPRNet monthly archives and load them into DuckDB:

wspr-ai-lite ingest --from 2014-07 --to 2014-07 --db data/wspr.duckdb
  • Downloads compressed monthly CSVs (caches locally in .cache/)
  • Normalizes into data/wspr.duckdb
  • Adds extra fields (band, reporter grid, tx grid)

3. Launch the Dashboard

wspr-ai-lite ui --db data/wspr.duckdb --port 8501

Open http://localhost:8501 in your browser 🎉

👉 For developers who want to hack on the code directly, see Developer Setup.

Example Visualizations

  • SNR Distribution by Count
  • Monthly Spot Counts
  • Top Reporting Stations
  • Most Heard TX Stations
  • Geographic Spread (Unique Grids)
  • Distance Distribution + Longest DX
  • Best DX per Band
  • Activity by Hour × Month
  • TX/RX Balance and QSO Success Rate

Development

For contributors and developers:

  • docs/dev-setup.md --> Development setup guide
  • docs/testing.md --> Testing instructions (pytest + Makefile)
  • docs/troubleshooting.md --> Common issues & fixes
make setup-dev   # create venv and install deps
make ingest      # run ingest pipeline
make run         # launch Streamlit UI
make test        # run pytest suite

Makefile Usage

There is an extensive list of Makefile targets that simplify operations. See make help for a full list of available targets.

Get Help

Acknowledgements

  • Joe Taylor, K1JT, and the WSJT-X Development Team
  • WSPRNet community for providing global weak-signal data
  • Contributors to DuckDB and Streamlit
  • Amateur radio operators worldwide who share spots and keep the network alive

Contributing

Pull requests are welcome!

Roadmap

  • Phase 1: wspr-ai-lite (this project)
    • Lightweight, local-only DuckDB + Streamlit dashboard
  • Phase 2: wspr-ai-analytics (modernize wspr-analytics)
    • Full analytics suite with ClickHouse, Grafana, AI Agents, and MCP integration
    • Designed for heavier infrastructure and richer analysis

📜 License

MIT — free to use for amateur radio and research.

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

wspr_ai_lite-0.3.9.tar.gz (34.3 kB view details)

Uploaded Source

Built Distribution

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

wspr_ai_lite-0.3.9-py3-none-any.whl (33.1 kB view details)

Uploaded Python 3

File details

Details for the file wspr_ai_lite-0.3.9.tar.gz.

File metadata

  • Download URL: wspr_ai_lite-0.3.9.tar.gz
  • Upload date:
  • Size: 34.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for wspr_ai_lite-0.3.9.tar.gz
Algorithm Hash digest
SHA256 ef40553f67e43203826b0673d5d5feb3d7e495ff54758ec2f2b54cf7f7e39db7
MD5 94b4af191b1474976ddf9c3c2d9e6408
BLAKE2b-256 4f070c26e8c975465ce48ff2346d90fa6dc909eff3570847ca468b32a2e1c2a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for wspr_ai_lite-0.3.9.tar.gz:

Publisher: release.yml on KI7MT/wspr-ai-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wspr_ai_lite-0.3.9-py3-none-any.whl.

File metadata

  • Download URL: wspr_ai_lite-0.3.9-py3-none-any.whl
  • Upload date:
  • Size: 33.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for wspr_ai_lite-0.3.9-py3-none-any.whl
Algorithm Hash digest
SHA256 ac6c85293a20d04344ee749206cf5ab41c705558ff501c49eb7a66daa939edfc
MD5 afb468b19c11a5e4d6b7009c9506b50f
BLAKE2b-256 e6a3380cbf4b65d127ff3211b1df336ed07f8babf19a97e27f29c80424dfbebb

See more details on using hashes here.

Provenance

The following attestation bundles were made for wspr_ai_lite-0.3.9-py3-none-any.whl:

Publisher: release.yml on KI7MT/wspr-ai-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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