Skip to main content

A terminal-based dashboard for news feeds, weather, and network scanning

Project description

Daily Dashboard

CI PyPI version Python 3.11+ License: MIT

A terminal-based dashboard (TUI) built with Python's Textual framework. Displays news feeds from RSS/JSON sources, weather information, saved links, and performs network scanning using scapy's ARP-based discovery.

Daily Dashboard Screenshot

Features

  • News Feeds: RSS and JSON feed support with tabbed interface
  • Weather: Current conditions and 5-day forecast via Open-Meteo API
  • Links: Organized bookmarks by category
  • Network Scanner: ARP-based device discovery on your local network
    • MAC vendor identification (40,000+ vendors)
    • mDNS hostname discovery (macOS)
    • Known hosts tracking (alerts for new devices)
    • Configurable scan timeouts
  • Keyboard Navigation: Vim-style bindings (j/k) and standard arrows
  • Auto-refresh: Configurable automatic data refresh
  • Caching: Smart caching to reduce API calls
  • Settings UI: In-app configuration (press s)

Installation

From PyPI (Recommended)

pip install daily-dashboard

From Homebrew

brew tap grego360/tap
brew install daily-dashboard

From Source

git clone https://github.com/grego360/daily-dashboard.git
cd daily-dashboard
pip install -e .

Quick Start

  1. Create a configuration file

    # Copy the example configuration
    curl -o config.json https://raw.githubusercontent.com/grego360/daily-dashboard/main/config.example.json
    
  2. Edit the configuration to add your feeds, location, and network targets

  3. Run the dashboard

    # With network scanning (requires sudo)
    sudo daily-dashboard
    
    # Without network scanning
    daily-dashboard
    

Configuration

Create a config.json file in your working directory:

{
  "feeds": [
    {
      "name": "Hacker News",
      "url": "https://hnrss.org/frontpage",
      "type": "rss",
      "enabled": true
    }
  ],
  "links": [
    {
      "name": "Development",
      "links": [
        {
          "name": "GitHub",
          "url": "https://github.com",
          "description": "Code hosting"
        }
      ]
    }
  ],
  "network": {
    "scanner": "scapy",
    "targets": [
      {
        "name": "Home Network",
        "range": "192.168.1.0/24",
        "expected_hosts": []
      }
    ],
    "scan_interval_minutes": 15,
    "dns_timeout_seconds": 1.0,
    "arp_timeout_seconds": 3.0
  },
  "weather": {
    "enabled": true,
    "location_name": "London",
    "latitude": 51.5074,
    "longitude": -0.1278
  },
  "settings": {
    "user_name": "Your Name",
    "refresh_interval_minutes": 15,
    "cache_ttl_minutes": 5,
    "log_level": "INFO"
  }
}

See config.example.json for a complete example.

Privacy Note

The following files contain personal data and are excluded from git:

File Contains
config.json Your name, location, network ranges
known_hosts.json Discovered network devices (MAC addresses)
.cache/ Cached API responses

When sharing your setup, use config.example.json as a template.

Usage

# Run with default config (config.json in current directory)
daily-dashboard

# Run with sudo for network scanning
sudo daily-dashboard

# Run with custom config file
daily-dashboard --config /path/to/config.json

# Run with verbose logging
daily-dashboard -v

# Show version
daily-dashboard --version

Running as a Module

python -m dashboard

Keyboard Shortcuts

Global

Key Action
Tab / 1-5 Switch feed tabs
j / k or Up / Down Navigate lists
Enter Open selected item in browser
r Refresh all data
s Open settings
n Quick network scan
w Quick weather search
? Show help
q Quit
Escape Close dialogs

Context-Specific

Key Context Action
a News panel Add new feed
a Links panel Add new link
c Network panel Copy IP address
m Network panel Copy MAC address
o Network panel Open IP in browser

Project Structure

daily-dashboard/
├── dashboard/
│   ├── __main__.py          # CLI entry point
│   ├── app.py               # Main Textual application
│   ├── components/          # UI widgets
│   │   ├── news_panel.py    # News feeds display
│   │   ├── network_panel.py # Network scan results
│   │   ├── weather_panel.py # Weather display
│   │   ├── links_panel.py   # Bookmarks panel
│   │   └── status_bar.py    # Bottom status bar
│   ├── models/              # Pydantic data models
│   │   ├── config.py        # Configuration schema
│   │   ├── news_item.py     # News item model
│   │   ├── scan_result.py   # Network scan results
│   │   └── weather.py       # Weather data model
│   └── services/            # Business logic
│       ├── feed_parser.py   # RSS/JSON feed parsing
│       ├── weather_service.py # Open-Meteo API client
│       ├── network_scanner.py # ARP-based scanning (scapy)
│       ├── known_hosts.py   # Device history persistence
│       └── cache.py         # Response caching
├── tests/                   # Test suite
├── .github/                 # CI/CD workflows
├── config.example.json      # Example configuration
├── pyproject.toml           # Project metadata
├── CONTRIBUTING.md          # Development guidelines
├── CHANGELOG.md             # Version history
└── README.md

Troubleshooting

Network scanning not working

  • Ensure you're running with sudo
  • On Linux, you can grant capabilities to avoid running as root:
    sudo setcap cap_net_raw,cap_net_admin=eip $(which python)
    

Feed not loading

  • Check the URL is accessible
  • RSS feeds should return valid XML
  • JSON feeds need a json_path configured to extract items

Weather not showing

  • Verify latitude/longitude are correct
  • Use the w key to search for a location by name

Development

See CONTRIBUTING.md for development setup and guidelines.

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run linter
ruff check .

# Run type checker
mypy dashboard

License

MIT License - see LICENSE for details.

Author

Costel Grigoras (@grego360)

Acknowledgments

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

daily_dashboard-0.1.4.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

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

daily_dashboard-0.1.4-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

Details for the file daily_dashboard-0.1.4.tar.gz.

File metadata

  • Download URL: daily_dashboard-0.1.4.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for daily_dashboard-0.1.4.tar.gz
Algorithm Hash digest
SHA256 b4f1ad6402f8eee8ea7ff86ce05549694dbb638db4d3f922964f766e1d9ed195
MD5 d025e3946b248dc9342988ee1da8e924
BLAKE2b-256 93db76f876b5045855c3c1dc0e8e5bb32bda8350819c31a0a7b2b005f02b41cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for daily_dashboard-0.1.4.tar.gz:

Publisher: release.yml on grego360/daily-dashboard

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

File details

Details for the file daily_dashboard-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for daily_dashboard-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 18e1ecabb347fb0d81bc3b99bf959929f6f9328bbe3045e883babc486b0fa54c
MD5 07a34d215f093f8863b82e58dc4f0e84
BLAKE2b-256 88015c924062b665564813615db6f832cc64f4f762200e20564b0b6bd0d3692f

See more details on using hashes here.

Provenance

The following attestation bundles were made for daily_dashboard-0.1.4-py3-none-any.whl:

Publisher: release.yml on grego360/daily-dashboard

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