Phase 0 Server & Repo Setup
- IN PROGRESS + DONE6 / 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
Infrastructure
-
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
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)