Personal productivity dashboard with weather, stock market data, RSS feeds, and task management
Features β’ Getting Started β’ Configuration β’ API Setup β’ Usage β’ Troubleshooting
A production-ready Chrome extension that replaces your new tab page with a beautiful, functional dashboard. Features real-time weather updates, live stock market data, RSS feed aggregation, and an integrated task manager with drag-and-drop functionality.
- π Live Clock - Real-time clock with date display
- π€οΈ Weather Widget - Current weather with location-based data (OpenWeather API)
- π Stock Market Data - Live S&P 500, Dow Jones, and NASDAQ indices (Alpha Vantage API)
- π° RSS Feed Reader - Multi-feed aggregation with CORS proxy fallback
- β Task Manager - Drag-and-drop to-do list with Chrome sync storage
- π¨ Modern UI - Dark theme with gradient backgrounds and glassmorphism
- π§ Utility Panel - Quick access sidebar with local service links
- πΎ Data Persistence - Chrome storage sync across devices
- π Secure Config - API keys stored in gitignored config file
- Google Chrome browser (version 110+)
- OpenWeather API key (free tier)
- Alpha Vantage API key (free tier)
# Clone the repository
git clone https://github.com/shawnmcrowley/chrome_dashboard.git
# Navigate to project directory
cd chrome_dashboard
# Copy config template
cp config.example.js config.js
# Edit config.js with your API keys
# OPENWEATHER_KEY: Get from https://openweathermap.org/api
# ALPHA_VANTAGE_KEY: Get from https://www.alphavantage.co/support/#api-key- Open Chrome and navigate to
chrome://extensions/ - Enable Developer mode (toggle in top right)
- Click Load unpacked
- Select the
chrome_dashboarddirectory - Open a new tab to see your dashboard!
Edit config.js with your API keys:
const CONFIG = {
OPENWEATHER_KEY: 'your_openweather_api_key',
ALPHA_VANTAGE_KEY: 'your_alpha_vantage_api_key'
};Edit main.js to change your location:
// Line ~113
async function loadWeather() {
const data = await fetchWeatherForCity('Your City, State', 'ZIP_CODE');
// ...
}Modify US_INDICES in main.js to customize displayed markets:
const US_INDICES = [
{ symbol: 'SPY', name: 'S&P 500', multiplier: 10.0 },
{ symbol: 'DIA', name: 'Dow Jones', multiplier: 100.0 },
{ symbol: 'QQQ', name: 'NASDAQ', multiplier: 30.0 }
];Default feed is MakeUseOf. Add custom feeds in main.js:
const DEFAULT_FEEDS = [
'https://www.makeuseof.com/feed/',
'https://your-custom-feed.com/rss'
];- Visit OpenWeather API
- Sign up for a free account
- Navigate to API keys section
- Copy your API key
- Add to
config.js
Features Used:
- Current weather data
- Temperature (Fahrenheit)
- Weather conditions and icons
- Location name
- Visit Alpha Vantage
- Enter your email to receive free API key
- Copy the API key from email
- Add to
config.js
Features Used:
- Real-time stock quotes
- ETF data (SPY, DIA, QQQ)
- Price and percentage change
- 5 calls/minute, 100 calls/day limit
Note: The extension converts ETF prices to approximate index values:
- SPY Γ 10 β S&P 500 (~6,000)
- DIA Γ 100 β Dow Jones (~44,000)
- QQQ Γ 30 β NASDAQ (~15,000)
- Add Task: Type in input field and press Enter or click +
- Complete Task: Click checkbox to mark as done
- Reorder Tasks: Drag and drop tasks using the grip icon
- Delete Task: Click the X button
- Clear Completed: Remove all completed tasks
- Toggle View: Show/hide completed tasks
- Add Feed: Paste RSS URL and click + button
- View Articles: Scroll through feed items
- Open Article: Click article title to open in new tab
- CORS Handling: Automatic proxy fallback for blocked feeds
- Open Panel: Click sidebar icon (top right) or right-click page
- Context Menu: Right-click anywhere β "Open Utility Panel"
- Close Panel: Right-click β "Close Utility Panel"
- Quick Links: Access local services (Postgres, N8N, etc.)
All data syncs across Chrome browsers where you're signed in:
- To-do list items
- RSS feed subscriptions
- Last weather data (cache)
- Last market data (cache)
chrome_dashboard/
βββ icons/ # Extension icons (16x16, 48x48, 128x128)
βββ vendor/ # Local Bootstrap and icons
β βββ bootstrap/
β βββ bootstrap-icons/
βββ config.js # API keys (gitignored)
βββ config.example.js # Config template
βββ index.html # Main dashboard page
βββ main.js # Core application logic
βββ styles.css # Custom styles
βββ panel.html # Utility sidebar panel
βββ popup.html # Extension popup (optional)
βββ manifest.json # Chrome extension manifest
βββ service-worker.js # Background service worker
βββ .gitignore # Git ignore rules
βββ README.md # This file
Issue: Weather shows "--Β°" or "No API key"
Solutions:
- Verify API key in
config.js - Check OpenWeather API key is activated (can take 1-2 hours)
- Test API key:
https://api.openweathermap.org/data/2.5/weather?zip=19382,US&units=imperial&appid=YOUR_KEY - Check browser console (F12) for errors
Issue: Market data shows "Market data unavailable"
Solutions:
- Verify Alpha Vantage API key in
config.js - Check API rate limits (5 calls/min, 100 calls/day)
- Wait 12 seconds between page reloads (rate limiting)
- Mock data will display if API fails
Issue: Feeds show "Failed to fetch (CORS or invalid feed)"
Solutions:
- Verify RSS feed URL is valid
- Extension uses proxy fallback automatically
- Some feeds block all external access
- Try alternative feed URLs
Issue: Button or context menu doesn't open panel
Solutions:
- Reload extension in
chrome://extensions/ - Check manifest.json has
sidePanelpermission - Verify service-worker.js is running
- Check browser console for errors
Issue: Extension shows errors or doesn't load
Solutions:
- Ensure Chrome version 110+
- Check all files are present
- Verify manifest.json syntax
- Reload extension after changes
- Check service worker errors in extension details
Edit styles.css CSS variables:
:root {
--bg-1: #040607;
--bg-2: #071017;
--accent-teal: #60d9c9;
--accent-blue: #3aa6ff;
}Edit formatClockParts() in main.js for 24-hour format:
function formatClockParts(date) {
const hh = String(date.getHours()).padStart(2,'0');
const mm = String(date.getMinutes()).padStart(2,'0');
return { time: `${hh}:${mm}`, ampm: '' };
}Edit panel.html to add your own links:
<a href="http://localhost:YOUR_PORT" class="btn btn-sm btn-outline-light" target="_blank">
Your Service Name
</a>- API Keys: Never commit
config.jsto git (already in.gitignore) - Permissions: Extension only requests necessary permissions
- Data Storage: Uses Chrome's secure storage API
- HTTPS: All API calls use HTTPS
- No Tracking: No analytics or external tracking
- Local First: Data stored locally, synced via Chrome
Note: Chrome extensions run client-side, so API keys are visible in the browser. For production apps with sensitive keys, use a backend proxy server.
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Bootstrap for the UI framework
- OpenWeather for weather data API
- Alpha Vantage for stock market data API
- Chrome Extensions team for Manifest V3
- Open source community for inspiration
Shawn M. Crowley
- π§ Email: shawn.crowley@lycra.com
- π LinkedIn: @shawnmcrowley
- π¦ Twitter: @shawnmcrowley
- π GitHub: chrome_dashboard