{"slug":"macstudio1-dashboard","total":15,"limit":100,"offset":0,"since":null,"commits":[{"hash":"5ba78ec","date":"2026-05-18 20:09:18 -0700","author":"SteveStudio2","subject":"fix: render footer link as real anchor + define missing CSS vars (--metal-glow, --ink-mute)","body":""},{"hash":"1f0cb86","date":"2026-05-18 20:09:12 -0700","author":"SteveStudio2","subject":"chore: complete .gitignore with tmp/.DS_Store/dist/build/.next","body":""},{"hash":"b807de8","date":"2026-05-13 08:57:56 -0700","author":"Steve","subject":"snapshot: 2 file(s) changed, +1 new, ~1 modified","body":""},{"hash":"cf7ec96","date":"2026-05-08 01:06:19 -0700","author":"SteveStudio2","subject":"fix: drop TS-style :any annotations from server.js (was crashing on parse)","body":""},{"hash":"6a9b5d8","date":"2026-05-08 01:05:33 -0700","author":"SteveStudio2","subject":"feat: TEST button on Mac1 dashboard — single-prompt latency check","body":""},{"hash":"fda8505","date":"2026-05-08 00:54:45 -0700","author":"SteveStudio2","subject":"feat: BOOST button on Mac1 dashboard restarts ollama with NUM_PARALLEL=4 etc","body":""},{"hash":"19f97af","date":"2026-05-08 00:16:09 -0700","author":"SteveStudio2","subject":"feat: viewer counter on dashboard odometer — see if browser is actually polling","body":""},{"hash":"729b4e1","date":"2026-05-08 00:04:06 -0700","author":"SteveStudio2","subject":"feat: self-healing version check — dashboard auto-reloads on new build","body":"Server hashes public/index.html on boot + on file change (fs.watch).\nFront-end polls /api/version every 5s; when the hash changes from\nits loaded version, shows a brass-colored \"New build deployed —\nreloading...\" banner and force-reloads after 2s.\n\nRemoves the constant \"browser cached the old page\" friction. Now\nwhen I deploy a feature, the dashboard self-refreshes within 5 seconds\nand Steve sees the new sections immediately without manual reload.\n\nAPI:\n  GET /api/version    {version: <sha1[0:10]>, ts}\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"29b1797","date":"2026-05-07 23:53:22 -0700","author":"SteveStudio2","subject":"chore: build version stamp + scroll hint at top of dashboard","body":"Confirms which version Chrome is actually showing (v0.4 = tach strip\n+ LLM rows + ollama log + proc table). The sub-line \"scroll for engine\nbay + ticker tape\" tells the viewer those sections live below the fold\nin a Chrome --app window.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"92ad6cb","date":"2026-05-07 23:41:30 -0700","author":"SteveStudio2","subject":"feat: tach history strip — 60s CPU + RAM sparklines above the gauges","body":"Two slim SVG sparklines under a chrome-bezel \"TACH\" header, charting\nthe last 60 seconds of CPU% (red) and RAM% (turquoise). Filled\narea + outline + dot at the leading edge, on a dot-grid graph-paper\nbackground. Updates each gauge tick (~1.2s).\n\nPure client-side ring buffer (HIST_LEN=60), no API change, no\nserver load. Adds visual rhythm so editors can see throughput\npatterns instead of just instantaneous needles.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"78fa648","date":"2026-05-07 23:25:19 -0700","author":"SteveStudio2","subject":"feat: ticker-tape Ollama HTTP log feed below the gauges","body":"Live tail of /tmp/ollama.log (where the running ollama process writes\nits stdout/stderr per lsof). Parses GIN-format HTTP rows + structured\nevents into a ticker-tape feed:\n\n  - HTTP rows: gold timestamp, color-coded status pill (green 2xx /\n    amber 4xx / red 5xx), turquoise method, cream path, gold duration\n  - Event rows: italic gray, with level prefix\n  - Raw rows: dim fallback\n\nEndpoint:\n  GET /api/ollama/log?lines=N    parsed tail of /tmp/ollama.log,\n                                 falls back to ~/.ollama/logs/server.log\n\nRefreshes every 3s, scrolls newest-first, max-height 280px so it\nfits the dash.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"684c80b","date":"2026-05-07 23:23:26 -0700","author":"SteveStudio2","subject":"feat: rich LLM bay panel — per-model rows + ollama process stats + installed list","body":"Now-broadcasting panel expanded into a proper \"LLM bay\":\n- Per-model rows showing name (gold) / param size / quantization /\n  VRAM bytes / expires-in countdown (or \"pinned\" anchor symbol)\n- Foot strip with ollama PID / OLLAMA CPU% / OLLAMA RAM MB / process\n  uptime / installed model count + total disk\n- Detects pinned models (Ollama uses year-2318 sentinel for\n  keep_alive=-1) and shows them as \"pinned\" not a 3M-hour countdown\n\nAPI additions:\n- /api/status now includes ollama.installed[] from /api/tags merge\n- ollama_procs[] from ps grep ollama with cpu/rss/etime\n\nCurrently shows: qwen3:14b 14.8B Q4_K_M 10.09 GB pinned\n+ 6 installed models / 50.5 GB on disk\n+ ollama PID, CPU%, RAM MB, uptime\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"2afd088","date":"2026-05-07 23:21:32 -0700","author":"SteveStudio2","subject":"fix: no-store HTML so new sections appear on reload","body":"Browser was caching v0.1 HTML so the engine-bay processes table\ndidn't render after v0.2 deploy. Sets Cache-Control: no-store on\n.html responses.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"3ef920f","date":"2026-05-07 23:16:50 -0700","author":"SteveStudio2","subject":"feat: engine bay live process table below gauges","body":"- /api/processes endpoint runs ps -Ao with explicit columns,\n  parses to JSON {pid,user,cpu,mem,rss_mb,start,time,command}\n- table rendered below odometer w/ chrome trim + leather backing\n- sortable headers (click any col, second click reverses)\n  default sort: CPU% desc; numeric cols default desc on first click\n- hot rows (>=50% CPU or >=10% MEM) tinted red\n- 2.5s poll cycle independent of gauge ticks\n- Lobster Engine bay header in cream + gold counter\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>"},{"hash":"574b249","date":"2026-05-07 23:11:02 -0700","author":"SteveStudio2","subject":"feat: macstudio1-dashboard v0.1 — 57 Bel Air aesthetic","body":"Mac Studio 1 dashboard at http://100.94.103.98:9930 (or http://localhost:9930 on Mac1):\n\n- Three round chrome gauges: CPU %, MEMORY %, VRAM GB, with red needles + chrome bezels\n- Radio-panel Now Broadcasting: shows currently-loaded LLM (qwen3:14b right now), parameter size, VRAM bytes, expires-in countdown\n- Three push-button hyperdrive controls (chrome cigarette-lighter style):\n  HYPERDRIVE  high-power mode + pin all loaded models keep_alive=-1\n  MAX RAM     load every installed model into memory and pin\n  IDLE        unload all models + restore default power mode\n- Odometer strip: uptime / power mode / call count\n- 57 Bel Air color palette: turquoise, cream, chrome, red, leather brown, gold\n- Fonts: Lobster (script wordmark), Bowlby One SC (chunky), Special Elite (era typewriter), Bungee Shade (1957 badge)\n\nAPI endpoints:\n  GET  /api/status               1.2s polled - cpu/memory/ollama/power\n  POST /api/control/hyperdrive   sudo pmset powermode 2 + pin models\n  POST /api/control/max-ram      load every installed model with keep_alive=-1\n  POST /api/control/idle         pmset powermode 0 + unload models\n\nlaunchd jobs registered on Mac1:\n  com.steve.macstudio1-dashboard         server at boot\n  com.steve.macstudio1-dashboard-chrome  open Chrome --app=http://localhost:9930 8s after login\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n"}]}