From f731df0da8e4cf72db5c487789760ed35d3e17db Mon Sep 17 00:00:00 2001 From: Emi Griffith Date: Fri, 10 Jul 2026 19:13:18 -0700 Subject: [PATCH] Add dev CI/CD pipeline deploying to a LAN server (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Weekly page: no-rain visuals adopt the dry-streak look On the Weekly page, no-rain (0") days now warm with the dry-streak ramp (tan→red, deepening to a 14-day cap) instead of a flat blue/tan, matching the Dry chart and calendar's dry-period language: - Precip trend chart: no-rain day dots colored by drynessColor(dsr). - "Daily, graded" timeline strip: Rain-row dry cells tinted by dsr via a new optional color override on rdCell. Rain days keep their intensity-tier colors; unknown streaks fall back to the prior flat color, so nothing regresses. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_019VP23wKmjS2ozk1g5a9g1Z * Calendar totals: compact per-category status lines Replace the stacked share bar + labeled percentage chips above the calendar grid with a compact deviation strip: one thin status-colored line per category (height scaled to the tallest non-median category), with each share printed above it in that category's own status color. The median tier — the neutral "Normal" center of the diverging temperature scale — draws no line, just a faint baseline tick, so it reads as the reference the other categories deviate from. Precip and dry-streak have no natural median, so every category there keeps a line. Percentage text is lifted toward the theme text color (color-mix) so even the darkest/lightest tiers stay legible in both light and dark. Co-Authored-By: Claude Opus 4.8 * Calendar totals strip: wider bars, 0.1%-precision small shares (#5) Widen the per-category deviation bars (3px→10px) so each reads clearly, and print sub-1% shares as e.g. "0.4%" instead of "<1%". Claude-Session: https://claude.ai/code/session_019VP23wKmjS2ozk1g5a9g1Z Co-authored-by: Claude Opus 4.8 * Weekly timeline: label dry streak instead of a dot On the precip row of the recent/forecast timeline, dry days now show the running dry-streak count ("3d" = 3 days since measurable rain), tinted by the same dryness ramp as the chart, rather than a bare "·". Co-Authored-By: Claude Opus 4.8 * Add dev CI/CD pipeline deploying to a LAN server PRs into dev run a build + boot/health check, auto-merge on green, and deploy the merged branch to a self-hosted runner on the LAN box, which runs the app as a sudo-free systemd --user service on 0.0.0.0:8137. - ci-cd.yml: build -> auto-merge -> deploy (self-hosted) - deploy-dev.yml: deploy on direct pushes / manual dispatch - deploy-dev.sh + thermograph-dev.service + provision-dev-lan.sh - CLAUDE.md: dev is the PR base branch; commit/PR message conventions - DEPLOY-DEV.md: pipeline docs * Match runner service name in docs to the installed user unit * Pin CI Python to 3.12 for prebuilt pyarrow/pandas wheels --------- Co-authored-by: Claude Opus 4.8 --- deploy/thermograph-dev.service | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 deploy/thermograph-dev.service diff --git a/deploy/thermograph-dev.service b/deploy/thermograph-dev.service new file mode 100644 index 0000000..30d22e2 --- /dev/null +++ b/deploy/thermograph-dev.service @@ -0,0 +1,20 @@ +# systemd --user unit for the Thermograph LAN dev server. +# Installed by deploy/deploy-dev.sh into ~/.config/systemd/user/ with the +# @PLACEHOLDER@ tokens substituted for this machine's paths/port. +# Runs sudo-free as your own user; linger keeps it up across logout/reboot. +[Unit] +Description=Thermograph (dev, LAN) - FastAPI/uvicorn +After=network-online.target +Wants=network-online.target + +[Service] +Type=exec +WorkingDirectory=@APP_DIR@/backend +Environment=THERMOGRAPH_BASE=@BASE@ +# Bind all interfaces so other devices on the LAN (e.g. your phone) can reach it. +ExecStart=@APP_DIR@/.venv/bin/uvicorn app:app --host 0.0.0.0 --port @PORT@ +Restart=on-failure +RestartSec=2 + +[Install] +WantedBy=default.target