A configurable, widget-based monitoring system that generates static dashboards for tracking various data sources.
PeekDeck is a flexible dashboard generator that transforms YAML configurations into beautiful, static HTML dashboards. Perfect for monitoring crypto prices, tech news, GitHub trends, and more - all without requiring a backend server.
Key Features:
- Widget-Based Architecture - Compose dashboards from reusable widgets (price charts, news feeds, Reddit posts, etc.)
- Static Generation - Pure HTML/CSS/JS output, deployable anywhere (GitHub Pages, Netlify, S3)
- AI-Friendly Markdown - Parallel .md versions optimized for LLM/AI agent consumption
- Smart Caching - Respects API rate limits with intelligent update scheduling
- Multi-Page Support - Create unlimited dashboards organized by category
- Customizable Themes - Per-page color schemes and styling
- GitHub Actions Ready - Automated updates via scheduled workflows
- Bitcoin Dashboard (.md) - Real-time crypto prices, charts, market stats, news, and community discussions
- Ethereum Dashboard (.md) - Live Ethereum monitoring with price charts and news
- AI News (.md) - Latest developments in artificial intelligence
- Robotics (.md) - Robotics research and industry news
- Python 3.11+
- pip
- Git
# Clone the repository
git clone https://github.com/diaorui/peek-deck.git
cd peek-deck
# Install dependencies
pip install -r requirements.txt
# Run the pipeline
./run.sh all
# View your dashboards
open docs/index.htmlCreate a new YAML file in pages/:
# pages/solana.yaml
category: crypto
id: solana
name: Solana
description: Live Solana monitoring
icon: "◎"
enabled: true
theme:
primary_color: "#14F195"
background: "#1a1a1a"
text_color: "#ffffff"
card_background: "#2d2d2d"
border_radius: "8px"
params:
symbol: SOLUSDT
coin_id: solana
widgets:
- type: crypto-price
update_minutes: 5
- type: crypto-price-chart
update_minutes: 10
- type: crypto-market-stats
update_minutes: 30
- type: google-news
update_minutes: 30
params:
query: solana
limit: 10Run the pipeline:
./run.sh all
open docs/solana.html- crypto-price - Current price display
- crypto-price-chart - Historical price charts with multiple timeframes
- crypto-market-stats - Market cap, supply, all-time high/low
- crypto-fear-greed - Fear & Greed Index with historical chart
- google-news - Latest news articles with thumbnails
- reddit-posts - Recent posts from any subreddit
- hackernews-posts - HackerNews stories by keyword
- youtube-videos - YouTube search results
- github-repos - Trending GitHub repositories
- huggingface-models - Trending ML models with AI-generated descriptions
- huggingface-papers - Latest research papers
PeekDeck uses a 3-stage pipeline:
- Fetch - Gets data from APIs
- Process - Transforms data (e.g., LLM summarization, calculations)
- Render - Generates static HTML and AI-friendly Markdown
Each widget has an update_minutes setting to control refresh frequency and respect API rate limits. Markdown versions include full content without truncation, perfect for LLM consumption.
1. Fork/Clone this repository
2. Configure GitHub Secrets (Optional)
Go to Settings → Secrets and variables → Actions and add:
YOUTUBE_API_KEY- For YouTube widget (if using youtube-videos)GEMINI_API_KEY- For AI-generated descriptions in HuggingFace models widget (optional)
3. Run the Workflow First
- Go to Actions → Update Widgets
- Click Run workflow
- Wait for it to complete (this creates the
gh-pagesbranch)
4. Enable GitHub Pages
- Go to Settings → Pages
- Set Source to
gh-pagesbranch - Save
Your dashboards will be live at:
https://YOUR_USERNAME.github.io/peek-deck/
The workflow runs every 5 minutes, automatically updating widgets based on their configured update_minutes.
Note: GitHub Pages is the recommended deployment method because it integrates seamlessly with GitHub Actions for automated scheduled updates. Other static hosting platforms would require you to set up your own cron jobs or manual updates.
pages/- Page configurations (YAML)src/peek_deck/- Python source (core, widgets, pipeline stages)templates/- Jinja2 templatesdata/- Generated data (cached, gitignored)docs/- Generated HTML (deployed to GitHub Pages)
Pages are defined by YAML files in pages/. Each page has:
- Metadata (id, name, icon, category)
- Theme colors
- Widget list with update frequencies
See pages/ for examples.
Configure the index page in config/index.yaml (base URL, GitHub URL, analytics, SEO).
To add custom widgets, subclass BaseWidget and implement fetch_data(), process_data(), and render() methods. See existing widgets in src/peek_deck/widgets/ for examples.
| API | Widgets | Free Tier | Auth Required |
|---|---|---|---|
| Gemini Exchange | crypto-price | 120 req/min | No |
| Binance US | crypto-price-chart | 6,000 req/min | No |
| CoinGecko | crypto-market-stats | 5-30 calls/min | No |
| Alternative.me | crypto-fear-greed | 60 req/min | No |
| Google News RSS | google-news | Undocumented | No |
| Reddit RSS | reddit-posts | Undocumented | No |
| HackerNews Algolia | hackernews-posts | Undocumented | No |
| GitHub API | github-repos | 60/hour (1k in Actions) | Auto in Actions |
| Hugging Face Hub API | huggingface-models, huggingface-papers | Unclear | No |
| YouTube Data API | youtube-videos | 10k units/day | Yes - API key needed |
| Google Gemini API | huggingface-models (AI descriptions) | 1000/day (free tier) | Optional - API key needed |
For local development, set environment variables before running:
export YOUTUBE_API_KEY=your_key_here
export GEMINI_API_KEY=your_key_here # Optional - for AI-generated model descriptions
./run.sh allTo enable AI-generated descriptions for HuggingFace models, also configure llm in config/index.yaml:
llm:
provider: gemini
model: gemini-2.5-flash-liteNote: When running in GitHub Actions, set secrets in repository settings. The workflow automatically uses GITHUB_TOKEN for GitHub API (1,000 requests/hour vs 60 unauthenticated).
We welcome contributions! Here's how you can help:
- Add new widgets - Implement widgets for new data sources (stocks, weather, sports, etc.)
- Improve existing widgets - Enhance features, fix bugs, improve styling
- Share your dashboards - Create interesting page configurations and share them
- Report issues - Found a bug? Open an issue
- Improve documentation - Fix typos, add examples, clarify instructions
# Clone your fork
git clone https://github.com/YOUR_USERNAME/peek-deck.git
cd peek-deck
# Install dependencies
pip install -r requirements.txt
# Make changes and test
./run.sh all- Fork the repository
- Create a feature branch (
git checkout -b feature/my-widget) - Make your changes
- Test locally (
./run.sh all) - Commit with clear messages
- Push to your fork
- Open a Pull Request
- Issues: GitHub Issues - Report bugs or request features
- Discussions: GitHub Discussions - Ask questions, share ideas
- Examples: Check the pages/ folder for configuration examples
MIT License - Free to use, modify, and distribute.
Built with ❤️ for the open-source community