Glimpsy (Early Development Stage)
A self-hosted personal homelab dashboard built with Flask. Monitor your services, search the web, optionally pull AI-summarized news, and keep a calendar — all in one customizable glass-style UI.
Features
Dashboard
- Site monitoring — Track URLs with live latency and uptime stats. Checks push over Socket.IO while the dashboard is open; history is kept for 31 days.
- Drag-and-drop layout — Hold Shift (or long-press on touch) to reorder search, news, calendar, and site cards.
- Floating windows — Open monitored sites in overlay windows without leaving the dashboard.
Search
- Web search — Google, DuckDuckGo, or a self-hosted SearXNG instance.
- AI search (optional) — Multi-step research using Ollama: plans queries, searches the web, reads sources, and streams an answer with thinking steps and history.
Daily news (optional)
- Fetches and summarizes articles by topic (Technology, Politics, Crimes, AI, Gaming) via SearXNG + Ollama.
- Live article feed over Socket.IO with configurable pacing and daily refresh.
Calendar (optional)
- Month view with events, upcoming list, and per-user event storage.
- Uses the browser’s local timezone for “today” and upcoming filters.
Appearance
- 9 built-in themes — Default, Pure Black, Nord, Dracula, Tokyo Night, Catppuccin, Evergreen, Ember, Dusk.
- Accent color and per-site badge colors.
- Background effects — Matrix, Grain Field, Floating Orbs, Shooting Star (or none).
- Glass panels — Adjustable card opacity and blur from Admin settings.
Requirements
- Python 3.10+
- Linux (production install script targets Arch with
pacman) - Optional integrations:
- Ollama — AI search and news summaries
- SearXNG — AI search and news fetching
Quick start (development)
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py
Open http://127.0.0.1:5000/. On first visit you’ll be prompted to create the admin account (only one user is supported).
Note:
python app.pyruns Flask-SocketIO directly with the Werkzeug dev server. Use this for local development only.
Production install
Glimpsy ships with a systemd service and installer that deploys to /opt/glimpsy:
sudo ./install.sh
The installer will:
- Install Python system dependencies (Arch:
python,python-virtualenv) - Copy application files to
/opt/glimpsy - Create or refresh a virtualenv and install pip dependencies
- Enable and start
glimpsy.service
The service runs Gunicorn with a gthread worker (required for Socket.IO):
gunicorn --workers 1 --worker-class gthread --threads 8 --bind 0.0.0.0:5000 app:app
Check status:
systemctl status glimpsy
curl -I http://127.0.0.1:5000/login
Reverse proxy (nginx)
An example nginx config is included at nginx/conf.d/glimpsy.nakildias.com.conf. It proxies HTTP/WebSocket traffic to the app and is intended for a separate homelab nginx host.
# Edit upstream IP/port, then on your nginx server:
sudo cp nginx/conf.d/glimpsy.nakildias.com.conf /etc/nginx/conf.d/
sudo certbot --nginx -d your.domain.example
sudo nginx -t && sudo systemctl reload nginx
Socket.IO works through the proxy when Upgrade and Connection headers are forwarded (included in the example config).
First-time setup
- Visit the dashboard — if no user exists, go to
/registerand create the admin account. - Open Admin Settings (
/settings/admin) to configure: - Dashboard title and components (search, news, calendar)
- Theme, accent, background effect, glass opacity/blur
- Monitor check interval and probe timeout
- Ollama / SearXNG URLs for AI features
- Hold Shift on the dashboard to enter edit mode and add monitored sites.
Configuration
Settings are stored in settings.json beside the app. The SQLite database (database.db) holds users, monitored sites, check history, news briefings, calendar events, and AI search history.
| Setting | Description |
|---|---|
monitor_interval |
Seconds between site checks while the dashboard is open (3–300, default 60) |
monitor_timeout |
Per-site HTTP probe timeout in seconds (not the refresh interval) |
search_engine |
google, duckduckgo, or searxng |
ai_enabled |
Enable AI search and news summarization |
ollama_url / ollama_model |
Local Ollama instance |
searxng_url |
SearXNG base URL |
news_enabled / news_topics |
Daily news feed |
calendar_enabled |
Dashboard calendar widget |
background_effect |
none, matrix, grain, orbs, shooting_star |
card_opacity / card_blur |
Glass panel appearance (10–90%, 0–24px) |
Override the Flask secret key with the GLIMPSY_SECRET_KEY environment variable, or set it in Admin settings.
Project structure
Glimpsy/
├── app.py # Flask app entry point
├── config.py # Settings defaults and helpers
├── themes.py # Theme definitions (CSS variables)
├── extensions.py # Flask-SocketIO instance
├── routes/ # HTTP blueprints (auth, dashboard, API, settings)
├── services/ # Monitor, news, AI search, database, Socket.IO handlers
├── templates/ # Jinja2 HTML templates
├── static/js/ # Dashboard client scripts
├── nginx/conf.d/ # Example reverse proxy config
├── install.sh # Production deploy script
├── launcher.sh # Gunicorn launcher used by systemd
└── services/glimpsy.service
How monitoring works
- Opening the dashboard establishes a shared Socket.IO connection (WebSocket with polling fallback).
- The server registers the client and runs checks on a background loop at
monitor_interval. - Results are pushed as
monitor_statusevents; the UI updates latency and uptime in place. - If the socket drops, the client falls back to HTTP (
/api/monitor/status) until it reconnects.
Enable verbose client logging by setting MONITOR_DEBUG = true at the top of static/js/monitor.js.
Tech stack
- Backend: Flask, Flask-SocketIO (threading mode), Gunicorn, SQLite, Requests
- Frontend: Tailwind CSS (CDN), vanilla JavaScript, Socket.IO client, SortableJS, Marked
- Auth: bcrypt password hashing, Flask sessions
License
Private / personal homelab project. Use and modify as you see fit.
Warning
This software is not production ready and should be for personal use only for now.