2026-09-14 Glance Retune From Usage Evidence
What I set out to do
Retune the Glance start page (2026-07-22 Glance Dashboard Prototype) so its modules reflect what I actually pay attention to, starting with stock tickers that weren’t relevant, plus a survey of what Glance and its community widgets offer that I hadn’t used.
What I actually did
- Survey from evidence, not guesses. Mined Claude Code session history, the vault, the NetNewsWire subscription list and GitHub activity. Top interests by volume: LiteLLM/OpenRouter/SigNoz cost telemetry, open-weight model tracking, Nix, SillyTavern/ComfyUI, the media stack. No evidence at all for the BTC/ETH tickers.
- Home page.
- Markets are now SPY, QQQ, ^DJI, META, FFLEX (Fidelity Freedom Index 2060) and USD/CAD, with Yahoo links.
- New AI Spend tile: Claude Code cost since local midnight from the SigNoz
claude_code.cost.usagecounter, next to OpenRouter’s daily and monthly usage and credit balance. - Hacker News now shares tabs with HF daily papers (sorted by votes), HF trending models and arXiv cs.CL; Lobsters is gone.
- Blogs are drawn from NetNewsWire, and Simon Willison is capped at 3 posts so he doesn’t flood the list.
- Added r/NixOS, r/SillyTavernAI and r/comfyui.
- Release watches now follow the stack I patch and rebase: litellm, SillyTavern, ComfyUI, model-runner, claude-code, codex, prek, uv.
- Media page. Added a Plex monitor, a Sonarr 7-day calendar, Suwayomi per-series unread counts, and a
repositorywidget for the private media-stack repo. - Glance 0.8.6. Pinned via a nixpkgs override because nixpkgs is still on 0.8.5; it needs
buildGo127Module. This release fixed the reddit scrape, so the RSS fallback (and its 429s) could be retired. - Secrets.
glance-wrappernow takes onlyOPENROUTER_API_KEYfrom the shared secrets file (sourced in a subshell), getsGITHUB_TOKENfromgh auth token, and defaults every referenced variable to empty. - Rollout. Previewed on a second port with screenshots and fixed the layout: 5 reddit tabs overflowed the narrow column. Then
hm switch.just checkpasses. Not yet committed.
What was striking
- TDD found a real latent bug. The new
glance-configflake check runsconfig:validatethrough the exact launchd launch line against an empty HOME. It failed immediately onSONARR_API_KEY: any host missing the *arr env files would have lost the whole dashboard, not just two widgets. That’s the same failure class as the reddit vars in 2026-09-06 A Cached Cookie Hid the Reddit Break. - Dynamic SigNoz queries need no shim. Glance’s custom-api templates can build requests themselves (
newRequest | withStringBody | getResponse) withstartOfDay now, so a query with “today” bounds runs straight from YAML. - Komga turned out to be the wrong source for recent manga. It held one stale series. Suwayomi’s GraphQL API is where new chapters actually land.
Related
- Homelab Services Architecture
- 2026-07-22 Glance Dashboard Prototype
- 2026-09-06 A Cached Cookie Hid the Reddit Break
Follow-up: spend from the SigNoz dashboards, calendar gone
- Calendar removed. Glance’s
calendaris a month grid with no event source; wiring Google Calendar (OAuth refresh token) or an iCal service wasn’t worth it yet. - AI Spend Today now runs the dashboards’ own queries. It no longer calls the OpenRouter API.
- Claude Code uses the “Cost by Model” query. LiteLLM uses the “Total Cost” query (
gen_ai.cost.total_coston LLM-call spans), grouped by model. - Both are read from the dashboard JSON at eval time, so the tile can’t drift from the dashboards. A renamed panel fails the build.
- Provider keys used outside LiteLLM aren’t counted, which is accepted.
glance-wrapperno longer touches the shared secrets file.
- Claude Code uses the “Cost by Model” query. LiteLLM uses the “Total Cost” query (
- Two gotchas.
- The dashboard files are in the Terraform provider’s shape (snake_case keys, the spec nested under its signal), which
query_rangerejects withunsupported signal "". They need converting back first. builtins.toJSONsorts keys, soendprecedesstart. Plain%dplaceholders swapped the bounds, and SigNoz returned “start time must be before end time”. Go’s indexed verbs (%[1]d) fixed it. Replaying the rendered query bodies against SigNoz before switching caught this.
- The dashboard files are in the Terraform provider’s shape (snake_case keys, the spec nested under its signal), which