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.5.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.5-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: daily_dashboard-0.1.5.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.5.tar.gz
Algorithm Hash digest
SHA256 a1b974d8af92c718c9238349acf5798fd1079761710218cbd5aa75f8d0f692cc
MD5 b7964d58900c573e2caebe13a487c1db
BLAKE2b-256 3af71943136d8ac52260210cd4a4f19c44410f5edbac4b493bb936eb4927be38

See more details on using hashes here.

Provenance

The following attestation bundles were made for daily_dashboard-0.1.5.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.5-py3-none-any.whl.

File metadata

File hashes

Hashes for daily_dashboard-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e5360d2bc920f4c16896a94955107987717f39a10fbc4b9bd9e66d00ac3230ff
MD5 be7099fa30e472c5d2017cf330e2a97b
BLAKE2b-256 739225f486a44eda0a635669fe315d3ed476abc453ed5382517d6caf90a1bc96

See more details on using hashes here.

Provenance

The following attestation bundles were made for daily_dashboard-0.1.5-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