From a294a8a9fb5904d4ad4538dff294bc471a1df85a Mon Sep 17 00:00:00 2001 From: RogueWave Date: Sun, 31 May 2026 02:48:38 +0000 Subject: [PATCH] chore(status): mark Phase 0 complete; add deploy-status.sh Server provisioning ran successfully: nginx + PostgreSQL + Redis live, UFW active (22/2222/80/443), TLS issued for feedthepyre.com (+www), pm2-pyre service enabled. Status dashboard updated (Phase 0 done; infra all green). Adds scripts/deploy-status.sh for friction-free status-page redeploys. Co-Authored-By: Claude Opus 4.8 (1M context) --- infra/status/index.html | 28 ++++++++++++++-------------- infra/status/status.json | 16 ++++++++-------- scripts/deploy-status.sh | 30 ++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 22 deletions(-) create mode 100755 scripts/deploy-status.sh diff --git a/infra/status/index.html b/infra/status/index.html index a17946f..fdee6f1 100644 --- a/infra/status/index.html +++ b/infra/status/index.html @@ -147,28 +147,28 @@

Overall MVP Progress

- 12% + 16%
-
-

6 of 50 phase deliverables complete

+
+

8 of 50 phase deliverables complete

Development Phases

-
+

Phase 0 Server & Repo Setup

- IN PROGRESS + DONE
-

6 / 8 complete

+

8 / 8 complete

  • VPS configured (pyre user, SSH key, root disabled, UFW, Fail2ban)
  • Claude Code installed
  • Repo initialized
  • pnpm workspace created
  • web/api/worker skeleton
  • -
  • Postgres + Redis running
  • -
  • nginx configured
  • +
  • Postgres + Redis running
  • +
  • nginx configured
  • Environment templates
@@ -281,7 +281,7 @@

Infrastructure

-

6 / 11 provisioned

+

11 / 11 provisioned

  • Node.js 22
  • pnpm
  • @@ -289,11 +289,11 @@
  • DNS (feedthepyre.com)
  • Monorepo scaffold + docs
  • pnpm install + typecheck clean
  • -
  • nginx
  • -
  • PostgreSQL
  • -
  • Redis
  • -
  • PM2
  • -
  • TLS (Let's Encrypt)
  • +
  • nginx
  • +
  • PostgreSQL
  • +
  • Redis
  • +
  • PM2 (installed + boot service)
  • +
  • TLS (Let's Encrypt)
diff --git a/infra/status/status.json b/infra/status/status.json index 6a78791..434d4e7 100644 --- a/infra/status/status.json +++ b/infra/status/status.json @@ -8,15 +8,15 @@ { "id": 0, "name": "Server & Repo Setup", - "state": "in_progress", + "state": "done", "items": [ { "label": "VPS configured (pyre user, SSH key, root disabled, UFW, Fail2ban)", "done": true }, { "label": "Claude Code installed", "done": true }, { "label": "Repo initialized", "done": true }, { "label": "pnpm workspace created", "done": true }, { "label": "web/api/worker skeleton", "done": true }, - { "label": "Postgres + Redis running", "done": false }, - { "label": "nginx configured", "done": false }, + { "label": "Postgres + Redis running", "done": true }, + { "label": "nginx configured", "done": true }, { "label": "Environment templates", "done": true } ] }, @@ -119,10 +119,10 @@ { "label": "DNS (feedthepyre.com)", "done": true }, { "label": "Monorepo scaffold + docs", "done": true }, { "label": "pnpm install + typecheck clean", "done": true }, - { "label": "nginx", "done": false }, - { "label": "PostgreSQL", "done": false }, - { "label": "Redis", "done": false }, - { "label": "PM2", "done": false }, - { "label": "TLS (Let's Encrypt)", "done": false } + { "label": "nginx", "done": true }, + { "label": "PostgreSQL", "done": true }, + { "label": "Redis", "done": true }, + { "label": "PM2 (installed + boot service)", "done": true }, + { "label": "TLS (Let's Encrypt)", "done": true } ] } diff --git a/scripts/deploy-status.sh b/scripts/deploy-status.sh new file mode 100755 index 0000000..4d5cdac --- /dev/null +++ b/scripts/deploy-status.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# ============================================================================= +# Regenerate the PYRE dev-status page and deploy it to the nginx webroot. +# ============================================================================= +# Usage: bash scripts/deploy-status.sh +# +# Workflow: edit infra/status/status.json -> run this -> the live page at +# https://feedthepyre.com updates. +# +# After a ONE-TIME `sudo chown -R pyre:pyre /var/www/feedthepyre`, this runs +# WITHOUT sudo (nginx/www-data still serves the world-readable files fine). +# Until then, run it with sudo. +# ============================================================================= +set -euo pipefail + +REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +WEBROOT="/var/www/feedthepyre/status" + +node "${REPO_DIR}/scripts/gen-status.mjs" + +if [[ -d "${WEBROOT}" && -w "${WEBROOT}" ]]; then + install -m 0644 "${REPO_DIR}/infra/status/index.html" "${WEBROOT}/index.html" + install -m 0644 "${REPO_DIR}/infra/status/status.json" "${WEBROOT}/status.json" + echo "Deployed status page -> ${WEBROOT}" +else + echo "ERROR: ${WEBROOT} is missing or not writable by '$(whoami)'." >&2 + echo "Run this script with sudo, OR make updates sudo-free once with:" >&2 + echo " sudo chown -R pyre:pyre /var/www/feedthepyre" >&2 + exit 1 +fi