A comprehensive, customizable dashboard application built with Go and vanilla JavaScript. This dashboard provides system monitoring, weather information, GitHub integration, RSS feeds, calendar management, and much more.
- System Monitoring: Real-time CPU, RAM, and disk usage with historical graphs
- SMBIOS Integration: Detailed hardware information (BIOS, System, Baseboard, RAM modules)
- Weather Integration: Current conditions and forecasts with support for multiple providers
- GitHub Integration: Repository monitoring, pull requests, commits, and issues
- RSS Feed Reader: Subscribe to and read RSS feeds
- Calendar & Events: Month and week calendar views with event management
- Todo List: Task management with priorities
- Service Monitoring: Health checks for HTTP/HTTPS services with SSL certificate monitoring
- SNMP Support: Query SNMP devices on your network
- Quick Links: Customizable bookmark collection with favicon support
- Search: Global search with history
- Drag-and-Drop Layout: Fully customizable module arrangement with split columns
- Quick Module Actions: Drag to left edge to disable, drag to right edge to temporarily pin
- Theme System: Multiple themes with color scheme variations
- Go 1.25.5 or later
- Linux/macOS/Windows
go build -o homepage# Basic usage (creates default config file)
./homepage
# Custom port
./homepage --port 3000
# Custom IP and port
./homepage --listen 192.168.1.100 --port 8080
# Use custom config file
./homepage --config /etc/homepage/config.jsonTo access SMBIOS data (BIOS, System, Baseboard, RAM modules) without running as root, set the required capabilities on the binary:
sudo setcap cap_sys_rawio,cap_dac_read_search=ep homepageThis grants the binary the necessary permissions to read SMBIOS data from /dev/mem and /sys/firmware/dmi/tables/DMI without requiring root privileges.
Note: You need to run this command after each build, as the capabilities are lost when the binary is rebuilt.
On startup, the dashboard displays all accessible addresses:
Dashboard starting...
Listening on: 0.0.0.0:8080
http://192.168.1.100:8080
http://10.0.0.5:8080
http://localhost:8080
When using --listen to specify a specific IP:
Dashboard starting...
Listening on: 192.168.1.100:8080
http://192.168.1.100:8080
This includes all IPv4 addresses from active network interfaces, making it easy to access the dashboard from other devices on your network.
The application uses Cobra for command-line argument parsing with the following options:
--port: Port to listen on (overrides config file, default:8080)--listen: IP address to listen on (overrides config file, default:0.0.0.0)--config: Path to config file or directory (default: createshomepage.config)--debug: Enable verbose debug output during startup--log: Path to log file or directory for storing application logs
The application supports JSON-based configuration files for persistent settings:
File Format: JSON with the following fields:
{
"port": "8080",
"ip": "0.0.0.0",
"id": "homepage",
"debug": false,
"log": ""
}File Location:
- Specify a config file:
--config /path/to/my-config.json - Specify a directory:
--config /etc/homepage/(creates/etc/homepage/homepage.config) - Default: Creates
homepage.configin current directory
Configuration Priority:
- Load values from config file (if exists)
- Override with command-line flags (if provided)
- Use validation and defaults for missing values
Configurable Options:
port: Server port (default: "8080")ip: Server IP address (default: "0.0.0.0")id: Application identifier (default: "homepage")debug: Enable verbose debug output (default: false)log: Path to log file or directory (default: "")
Auto-Creation: If the specified config file doesn't exist, it's automatically created with default values.
# Use defaults (creates homepage.config if needed)
./homepage
# Specify custom port
./homepage --port 3000
# Specify custom IP and port
./homepage --listen 192.168.1.100 --port 8080
# Enable debug output
./homepage --debug
# Log to file
./homepage --log /var/log/homepage.log
# Log to directory (creates homepage.log)
./homepage --log /var/log/
# Use custom config file
./homepage --config /etc/homepage/config.json
# Use custom config directory (creates /etc/homepage/homepage.config)
./homepage --config /etc/homepage/
# Override config file with flags
./homepage --config /etc/homepage/ --port 9090 --listen 127.0.0.1All configuration is managed through the dashboard's Preferences system (accessible via the gear icon in the footer):
- Appearance:
- Theme selection (Nordic, Modern, Minimal, Forest, Ocean, Matrix, Blade Runner, Alien)
- Color scheme selection (varies by theme)
- Timers:
- Disk Refresh interval (5-3600 seconds, default: 15)
- RSS Refresh interval (60-86400 seconds, default: 300)
- Graphs:
- Show full bar height toggle (displays unused portion in dimmed color)
- Minimum bar width (2-50 pixels, default: 10)
- Data:
- Clear cached data (resets history graphs and module preferences)
- Reset module order (restores default layout)
- GitHub API Key: Optional token for higher rate limits (stored securely)
- Enable/disable individual modules
- Configure refresh intervals for modules with timers
- Manage multiple GitHub modules (repos, PRs, commits, issues)
- Manage multiple RSS feed modules
- Manage multiple disk modules (add/remove disks to monitor)
- Grid configuration (columns per row)
- Maximum dashboard width percentage
- Visual layout editor showing current module arrangement
- Drag-and-drop module reordering
- Location search and selection
- Weather provider selection (Open-Meteo, OpenWeatherMap, WeatherAPI.com)
- API key configuration for providers that require it
- Add/remove GitHub usernames or organizations
- Configure GitHub modules (repos, PRs, commits, issues, stats)
- Set item count per module (1-20, default: 5)
- Add/remove RSS feed URLs
- Configure feed display options (show/hide title, text, date)
- Set item count per feed (1-20, default: 5)
- Add/remove service endpoints to monitor
- Configure check intervals
- View service status and SSL certificate information
- Add/remove SNMP devices
- Configure OID queries and community strings
- Set refresh intervals
- Month view settings:
- Dim weekends toggle
- Week view settings:
- Work week only toggle (Monday-Friday)
- Week start day selection (Sunday, Monday, Saturday)
- Event management (add, edit, delete events)
- Manage todo items
- Set priorities (low, medium, high)
- Mark items as complete
- Add, edit, or delete quick links
- Automatic favicon fetching and caching
- View and filter search history
- Clear search history
- Export configuration (downloads all preferences as JSON)
- Import configuration (upload JSON to restore settings)
- List and manage saved configurations
- Delete saved configurations
- Application version information
- Links to source code
Preferences are stored in browser localStorage and can be exported/imported via the Config tab for backup and migration.
- System uptime
- Server time (local and UTC)
- Online status indicator (pulsing dot)
- Hostname display
- Client IP and hostname (if available)
- Real-time CPU usage percentage
- Historical usage graph
- Multi-core support
- Configurable refresh interval (default: 5 seconds)
- CPU model and manufacturer
- Architecture and features
- Cache information
- Clock speed
- Memory usage (used, total, available)
- Usage percentage
- Historical usage graph
- Configurable refresh interval (default: 5 seconds)
- SMBIOS memory module information
- Module size, speed, type
- Manufacturer and part number
- Serial numbers
- Multiple disk support: Monitor multiple disks simultaneously
- Disk usage by mount point
- Free and used space
- Historical usage graph (persisted across page loads)
- Configurable refresh interval via General preferences (default: 15 seconds)
- Add/remove disks via Preferences > Modules > Disk Modules
- BIOS/Firmware vendor
- Version
- Release date
- SMBIOS System Information
- Manufacturer, product name, version
- Serial number and UUID
- Wake-up type, SKU number, family
- SMBIOS Baseboard Information
- Manufacturer, product, version
- Serial number and asset tag
- Location in chassis, board type
- Feature flags
- Local IP addresses with PTR records (reverse DNS)
- Public IP address with PTR record
- Network interface information
- PTR caching: DNS PTR lookups are cached for 1 hour to reduce queries
- Automatic PTR lookups run once per hour after app starts
- Configurable refresh interval (default: 7200 seconds)
- Temperature, humidity, wind speed
- Feels like temperature
- Pressure, wind direction
- UV index, cloud cover
- Visibility, dew point
- Precipitation probability
- Weather condition icon
- Today's forecast (high/low, precipitation, sunrise/sunset)
- Tomorrow's forecast
- Extended forecast (next 3 days)
- Open-Meteo (default, no API key required)
- OpenWeatherMap (requires API key)
- WeatherAPI.com (requires API key)
- User repositories
- Organization repositories
- Repository statistics
- Commit activity
- Pull request status
- Issue tracking
- Configurable number of items per module (1-20, default: 5)
- Rate limit monitoring with caching to prevent excessive API calls
- Optional GitHub token support for higher rate limits
- Subscribe to multiple RSS feeds
- Feed item display with title, description, and date
- Image preview: Hover over titles to see feed images (from enclosure/media:content)
- Configurable number of articles per feed (1-20, default: 5)
- Show/hide title, text, date per feed
- Configurable refresh interval (default: 300 seconds)
- Multiple feed support with individual settings
- Month view with event display
- Navigation controls (previous/next month)
- Dim weekends option: Show Saturday and Sunday in dimmed color
- Event management via Preferences > Calendar tab
- Week view with events
- Event details and day-by-day breakdown
- Work week only option: Show only Monday-Friday
- Week start day: Configure week to start on Sunday, Monday, or Saturday
- Next 5 upcoming events
- Event details and dates
- Click events to view/edit in calendar
- Task list management
- Priority levels
- Next 5 todos display
- Task completion tracking
- Service health checks for HTTP/HTTPS endpoints
- Add/remove services via Preferences > Monitoring tab
- Per-service configuration:
- Service URL
- Check interval (default: 60 seconds)
- Monitoring features:
- Health status (online/offline)
- Response time tracking
- SSL certificate expiration monitoring (for HTTPS)
- Uptime tracking
- Visual status indicators in the module
- SNMP device queries
- OID-based queries
- Community string support (default: "public")
- Add/remove SNMP devices via Preferences > SNMP tab
- Configure per-device settings:
- Host address
- Port (default: 161)
- Community string
- OID to query
- Configurable refresh interval per device (default: 60 seconds)
- Customizable bookmark collection
- Add, edit, delete links via Preferences > Quicklinks tab
- Automatic favicon fetching and caching
- Links displayed with icons in module
- Quick access to frequently used sites
- Links saved in browser localStorage
- Global search functionality in header
- Multiple search engine support (Google, DuckDuckGo, etc.)
- Search history automatically saved
- Filter and search within search history
- Clear search history from Preferences > Search tab
- Quick access via header search box
GET /api/summary- Get summary of all modulesGET /api/system- Get system metrics (CPU, RAM, disk)GET /api/cpuid- Get CPU detailsGET /api/raminfo- Get SMBIOS RAM informationGET /api/firmware- Get BIOS/Firmware informationGET /api/systeminfo- Get SMBIOS System informationGET /api/baseboard- Get SMBIOS Baseboard informationGET /api/disks- List all available disk partitionsGET /api/disk?mount={mountPoint}- Get disk usage for a specific mount point
GET /api/ip- Get local and public IP addressesGET /api/favicon- Get favicon for a URL
GET /api/weather?lat={lat}&lon={lon}- Get weather dataGET /api/geocode?q={query}- Geocode city name to coordinates
GET /api/github- Get GitHub repositoriesGET /api/github/repos?name={name}&type={user|org}&token={token}- Get repos for user/orgGET /api/github/prs?name={name}&type={user|org|repo}&token={token}- Get pull requestsGET /api/github/commits?name={name}&type={user|org|repo}&token={token}- Get commitsGET /api/github/issues?name={name}&type={user|org|repo}&token={token}- Get issuesGET /api/github/stats?name={repo}&token={token}- Get repository statistics
GET /api/monitor- Get service monitoring statusPOST /api/monitor- Add/update monitored service
GET /api/snmp?host={host}&port={port}&community={community}&oid={oid}- Query SNMP device
GET /api/rss?url={feedUrl}&count={count}- Fetch RSS feed (count: 1-20, default 5)
GET /api/config/list- List saved configurationsGET /api/config/download?name={name}- Download configurationPOST /api/config/upload- Upload configurationDELETE /api/config/delete?name={name}- Delete configuration
GET /api/theme?template={template}&scheme={scheme}- Get theme CSS
GET /healthz- Health check endpoint
The dashboard includes multiple themes with various color schemes:
- Nordic - Clean, modern design with Nordic color palette
- Modern - Contemporary design with smooth gradients
- Minimal - Minimalist design with clean lines
- Forest - Nature-inspired green theme
- Ocean - Blue ocean-inspired theme
- Matrix - Cyberpunk matrix-style theme
- Blade Runner - Neon cyberpunk theme
- Alien - Sci-fi inspired theme
Each theme includes multiple color schemes:
- Default
- Dark
- Light (where applicable)
- Various accent color variations
- Themes are stored in
templates/*.css - Each theme can have multiple color schemes
- Themes use CSS variables for easy customization
- Theme selection is saved in browser localStorage
- Click the gear icon in the footer to open Preferences
- Navigate to the "Modules" tab
- Toggle modules on/off
- Configure refresh intervals for each module
- Drag and Drop: Click and drag modules by the grip handle (⋮⋮ icon) to reorder
- Layout Editor: Access via Preferences > Layout tab
- Visual representation of current layout
- Shows split modules as "ModuleA/ModuleB"
- Remove modules from layout
- Grid Configuration: Set number of columns per row (1-6)
- Max Width: Adjust dashboard maximum width percentage (50-100%)
-
Quick Disable:
- Drag a module to the left edge of the screen
- Background turns muted red with disable icon
- Module is disabled and removed from layout and preferences
- Can be re-enabled from Preferences > Modules tab
-
Temporary Pin:
- Drag a module to the right edge of the screen
- Background turns soft green with pin icon
- Module is pinned temporarily and:
- Stays fixed on screen while you scroll
- Can be dragged from the pin to a new location
- Has a close button (×) to unpin without moving
- If dropped in invalid area, stays pinned instead of disappearing
- Useful for repositioning modules while viewing other parts of the dashboard
-
Column Splitting: Create vertically-stacked modules in a single column:
- Drag a module over an existing module's column
- Hold for 5 seconds until the split overlay appears (shows top/bottom zones)
- Drop on the top or bottom zone
- Both modules now share the column height equally
- Split modules show as "ModuleA/ModuleB" in the layout editor
- Drag additional modules to empty split slots to fill them
- Empty split slots can receive drops directly
- Remove split modules individually from layout editor
- Open Preferences > Weather tab
- Search for your location using the search box
- Select from search results to set location
- Choose weather provider:
- Open-Meteo (default, no API key required)
- OpenWeatherMap (requires API key)
- WeatherAPI.com (requires API key)
- Enter API key if using a provider that requires it
- Location and provider settings are saved in browser localStorage
- Weather updates automatically based on module refresh interval (default: 1800 seconds)
- Open Preferences > GitHub tab
- Add GitHub usernames or organizations
- Optionally add GitHub token in General tab for higher rate limits
- Click "Add" to create GitHub modules (repos, PRs, commits, issues, stats)
- Configure each module:
- Select type (repos, PRs, commits, issues, stats)
- Set item count (1-20, default: 5)
- Modules are displayed on the dashboard with automatic refresh
- Open Preferences > RSS tab
- Click "Add" to add RSS feed URLs
- Configure each feed:
- Feed URL
- Number of articles to show (1-20, default: 5)
- Display options: Show/hide title, text, date (all checked by default)
- Feeds are displayed as modules on the dashboard
- Configure global RSS refresh interval in General > Timers (default: 300 seconds)
- Hover over article titles to preview images (if available in feed)
- Open Preferences > Monitoring tab
- Add service URLs (HTTP/HTTPS endpoints)
- Configure check intervals per service
- View service status in Monitoring module:
- Health status (online/offline)
- Response time
- SSL certificate expiration (for HTTPS)
- Uptime tracking
- Open Preferences > Quicklinks tab
- Add, edit, or delete links
- Links are saved in browser localStorage
- Favicons are automatically fetched and cached
- Quick access to frequently used sites from the dashboard
- Calendar displays current month with navigation controls
- Configure calendar settings in Preferences > Calendar tab:
- Dim weekends (month view)
- Work week only (week view)
- Week start day (Sunday, Monday, or Saturday)
- Add events via Preferences > Calendar tab or click on calendar dates
- Events are saved in browser localStorage
- View upcoming events in dedicated "Upcoming Events" module
- Add todos via Preferences > Todo tab or Todo module
- Set priorities (low, medium, high)
- Mark todos as complete
- Edit or delete todos from Preferences > Todo tab
- View next 5 todos in dedicated Todo module
- Todos are saved in browser localStorage
- Use the search box in the header
- Select search engine from dropdown (Google, DuckDuckGo, etc.)
- Search history is automatically saved
- Access search history by clicking search box
- Filter search history in Preferences > Search tab
- Clear search history from Preferences > Search tab
- Export configuration: Preferences > Config tab > Download
- Downloads all preferences as JSON file
- Includes: themes, module settings, layout, weather, GitHub, RSS, monitoring, calendar, todos, quicklinks
- Import configuration: Preferences > Config tab > Upload
- Upload previously exported JSON file
- Restores all settings and preferences
- Saved configurations: List and manage saved configuration files
- Delete configurations: Remove saved configuration files
- Configurations include all user preferences and module settings for easy backup and migration
homepage/
├── main.go # Main application code and API endpoints
├── config.go # Configuration file handling and validation
├── go.mod # Go module dependencies
├── go.sum # Go module checksums
├── README.md # This file - project documentation
├── TODO.md # Development todo list
├── configs/ # Saved configuration files
│ └── Default.json # Default configuration template
├── static/ # Static assets
│ └── js/ # JavaScript modules
│ ├── app.js # Application initialization and intervals
│ ├── core.js # Core utilities and helpers
│ ├── graphs.js # History graph rendering (CPU, RAM, Disk)
│ ├── layout.js # Layout system and drag-and-drop
│ ├── preferences.js # Preferences modal management
│ └── modules/ # Module-specific code
│ ├── calendar.js # Calendar and events management
│ ├── config.js # Configuration import/export
│ ├── github.js # GitHub integration (repos, PRs, commits, issues)
│ ├── monitoring.js # Service monitoring
│ ├── network.js # Network IP and PTR lookups
│ ├── quicklinks.js # Quick links management
│ ├── rss.js # RSS feed parsing and display
│ ├── search.js # Search functionality
│ ├── snmp.js # SNMP device queries
│ ├── system.js # System metrics (CPU, RAM, Disk, SMBIOS)
│ ├── todo.js # Todo list management
│ └── weather.js # Weather data fetching and display
└── templates/ # HTML and CSS templates
├── index.html # Main HTML template
├── index.html.old # Backup of previous template version
└── *.css # Theme CSS files
├── alien.css # Alien theme
├── bladerunner.css # Blade Runner theme
├── forest.css # Forest theme
├── matrix.css # Matrix theme
├── minimal.css # Minimal theme
├── modern.css # Modern theme
├── nordic.css # Nordic theme (default)
└── ocean.css # Ocean theme
- Add module configuration to
static/js/layout.js:
const moduleConfig = {
mymodule: {
name: 'My Module',
icon: 'fa-icon',
desc: 'Description',
hasTimer: true,
timerKey: 'mymodule',
defaultInterval: 60,
enabled: true
}
};- Create module JavaScript file in
static/js/modules/mymodule.js - Add API endpoint in
main.goif needed - Add module card HTML in
templates/index.html - Register module refresh function in
static/js/app.js
- Create CSS file in
templates/directory - Follow theme structure with CSS variables
- Add theme metadata comments:
/*
Template: mytheme
Scheme: default
Accent: #FF0000
Display: Default
*/- Theme will be automatically detected and available in preferences
Key Go dependencies:
github.com/spf13/cobra- Command-line argument parsing and CLI frameworkgithub.com/shirou/gopsutil/v3- System metrics (CPU, RAM, disk, network)github.com/earentir/gosmbios- SMBIOS data (hardware information)github.com/earentir/cpuid- CPU information and featuresgithub.com/gosnmp/gosnmp- SNMP device queriesgithub.com/miekg/dns- DNS lookups and PTR record queries
Contributions are always welcome!
All contributions are required to follow the
I will always follow the Linux Kernel License as primary, if you require any other OPEN license please let me know and I will try to accomodate it.