# CI Observer Compact Dump ## Current Production (authoritative) - Server path: `/webapps/ci-observer-dashboard-prod` - Container: `ci-observer-dashboard-prod` - Port: `8089 -> 8088` - Deploy branch: `main` - Health check: `curl -s http://127.0.0.1:8089/api/config` ## Stack - FE: HTML + CSS + Vanilla JavaScript - BE: Python + FastAPI - FE-BE bridge: REST API (`/api/runs`, `/api/filters`, `/api/config`) - Data layer: SQLite + GitHub Actions API ## Required Env - `GITHUB_TOKEN` - `GH_REPOS` - `GH_WORKFLOWS` (required for polling in current logic) - `REFRESH_SECONDS` - `DASHBOARD_TITLE` ## Key Features in main - Metadata-rich run cards (event, actor, author, commit SHA, message, date, duration) - Repo short name display (without org prefix) - Race-style clock (`HH:MM:SS.cc`) + date in same panel - Light mode toggle (hanging bulb), default dark, preference in localStorage - Light mode contrast tuned for pass/fail (medium) ## Recent Important Commits on main - `689a78c` merge: metadata cards + race clock - `a719b7d` docs: runbook + architecture + stack overview - `d33f96e` merge: light mode toggle + contrast tuning ## Standard Production Update ```bash cd /webapps/ci-observer-dashboard-prod git checkout main git pull docker compose up -d --build ``` ## Troubleshooting Fast Path - UI loads but no runs: - check `.env` (`GH_WORKFLOWS` not empty) - `docker compose up -d --build` - FE change not visible: - browser hard refresh `Ctrl+Shift+R` ## Test Workflow Pattern - Create isolated test folder: `/webapps/ci-observer-dashboard-` - Use separate port (e.g. 8090) - Validate, then merge to `main`, deploy prod, cleanup test folder ## Canonical Docs - `docs/OPERATIONS_RUNBOOK.md` - `docs/ARCHITECTURE.md` - `docs/STACK_OVERVIEW.md` - `ci-observer-handover/AGENTS.md`