SEO: add 250 English-market city pages; auto-warm archives on deploy (#97)

The population-ranked global top-500 skewed to Asian megacities and missed
high-English-search-demand cities. gen_cities.py now tops up with the top ~250
cities from English-speaking countries (US/GB/CA/AU/NZ/IE/ZA) not already in the
global set, so US coverage goes 13->146, GB 2->42, CA 3->29, etc. (Seattle, Boston,
Manchester, Melbourne, Auckland, Dublin, ...). cities.json regenerated to 750.

Both deploy scripts now launch warm_cities.py automatically after the health check,
detached (dev: a systemd --user transient unit; prod: setsid/nohup), so the city
pages serve from cache without a manual step; idempotent, so only the first deploy
does the full warm. DEPLOY.md updated.
This commit is contained in:
Emi Griffith 2026-07-15 17:11:14 -07:00 committed by GitHub
parent 00d4c054c4
commit 906c0fd8c7

View file

@ -9,6 +9,17 @@ APP_DIR="${APP_DIR:-/opt/thermograph}"
BRANCH="${BRANCH:-main}" BRANCH="${BRANCH:-main}"
cd "$APP_DIR" cd "$APP_DIR"
# Pre-warm the ~750 city-page archives so /climate pages serve from cache and a
# search-engine crawl never bursts the archive API quota. Detached + backgrounded
# so it never blocks the deploy or health check; idempotent (skips already-cached
# cells), so it's cheap on every deploy after the first full warm.
warm_city_archives() {
mkdir -p "$APP_DIR/logs"
echo "==> Warming city-page archives in the background (logs/warm-cities.log)"
setsid nohup bash -c "cd '$APP_DIR/backend' && exec '$APP_DIR/.venv/bin/python' warm_cities.py --pace 2" \
</dev/null >"$APP_DIR/logs/warm-cities.log" 2>&1 &
}
echo "==> Fetching $BRANCH" echo "==> Fetching $BRANCH"
git fetch --prune origin "$BRANCH" git fetch --prune origin "$BRANCH"
git reset --hard "origin/$BRANCH" git reset --hard "origin/$BRANCH"
@ -31,6 +42,7 @@ url="http://127.0.0.1:${PORT}${BASE%/}/"
for i in $(seq 1 15); do for i in $(seq 1 15); do
if curl -fsS -o /dev/null "$url"; then if curl -fsS -o /dev/null "$url"; then
echo "==> OK: $url is serving" echo "==> OK: $url is serving"
warm_city_archives
exit 0 exit 0
fi fi
sleep 1 sleep 1