[object Object]

← back to Homesonspec

go-live: Kamatera deploy script; start scripts respect PORT env; national-builder recon recorded (batches 3-4); dream-finders adapter

30af084366a1c7a7d72a7a3ebb4be3375cb948b0 · 2026-07-22 12:16:37 -0700 · Steve Abrams

Files touched

Diff

commit 30af084366a1c7a7d72a7a3ebb4be3375cb948b0
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 22 12:16:37 2026 -0700

    go-live: Kamatera deploy script; start scripts respect PORT env; national-builder recon recorded (batches 3-4); dream-finders adapter
---
 apps/admin/package.json |  2 +-
 apps/web/package.json   |  2 +-
 deploy-kamatera.sh      | 91 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 2 deletions(-)

diff --git a/apps/admin/package.json b/apps/admin/package.json
index 1ff619d..963e171 100644
--- a/apps/admin/package.json
+++ b/apps/admin/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "dev": "next dev --port 3101",
     "build": "next build",
-    "start": "next start --port 3101",
+    "start": "next start",
     "test": "vitest run --passWithNoTests",
     "typecheck": "tsc --noEmit"
   },
diff --git a/apps/web/package.json b/apps/web/package.json
index 478bb7e..7063a7c 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "dev": "next dev --port 3100",
     "build": "next build",
-    "start": "next start --port 3100",
+    "start": "next start",
     "test": "vitest run --passWithNoTests",
     "typecheck": "tsc --noEmit"
   },
diff --git a/deploy-kamatera.sh b/deploy-kamatera.sh
new file mode 100644
index 0000000..65962b6
--- /dev/null
+++ b/deploy-kamatera.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env bash
+# One-shot Kamatera deploy for SpecHomes. Run from Mac2:  ! bash ~/Projects/spechomes/deploy-kamatera.sh
+# Idempotent — safe to re-run. Serves web on :9975, admin on :9976 behind nginx (HTTP; CF handles edge TLS).
+set -euo pipefail
+KH=root@45.61.58.125
+REMOTE=/root/Projects/spechomes
+WEB_PORT=9975
+ADMIN_PORT=9976
+DBPW_FILE=~/Projects/spechomes/.env.kamatera
+
+echo "──────── 1/6  Postgres role + DB ────────"
+if ! grep -q '^SPECHOMES_DB_PW=' "$DBPW_FILE" 2>/dev/null; then
+  echo "SPECHOMES_DB_PW=$(openssl rand -hex 16)" >> "$DBPW_FILE"; chmod 600 "$DBPW_FILE"
+fi
+DBPW=$(grep '^SPECHOMES_DB_PW=' "$DBPW_FILE" | tail -1 | cut -d= -f2)
+ssh $KH "sudo -u postgres psql -v ON_ERROR_STOP=1 -c \"DO \\\$\\\$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='spechomes') THEN CREATE ROLE spechomes LOGIN PASSWORD '$DBPW'; ELSE ALTER ROLE spechomes PASSWORD '$DBPW'; END IF; END \\\$\\\$;\"; \
+  sudo -u postgres createdb -O spechomes spechomes 2>/dev/null || echo '  db exists'; \
+  sudo -u postgres psql -d spechomes -c 'CREATE EXTENSION IF NOT EXISTS pg_trgm;' >/dev/null"
+
+echo "──────── 2/6  Load data (pg_dump Mac2 → Kamatera) ────────"
+pg_dump --no-owner --no-acl -d "postgresql://macstudio3@localhost/spechomes?host=/tmp" \
+  | gzip \
+  | ssh $KH "gunzip | sudo -u postgres psql -q -d spechomes >/dev/null 2>&1; \
+      sudo -u postgres psql -d spechomes -c 'GRANT ALL ON ALL TABLES IN SCHEMA public TO spechomes; GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO spechomes;' >/dev/null; \
+      echo -n '  '; sudo -u postgres psql -d spechomes -tAc \"SELECT 'homes='||count(*) FROM \\\"InventoryHome\\\" WHERE status='PUBLISHED'\""
+
+echo "──────── 3/6  Ship code (rsync) ────────"
+ssh $KH "mkdir -p $REMOTE"
+rsync -az --delete \
+  --exclude node_modules --exclude .git --exclude '.env*' --exclude var/snapshots \
+  --exclude '.next' --exclude 'test-results' --exclude 'playwright-report' \
+  ~/Projects/spechomes/ $KH:$REMOTE/
+
+echo "──────── 4/6  Remote env + install + build ────────"
+ssh $KH "cat > $REMOTE/.env <<EOF
+DATABASE_URL=postgresql://spechomes:$DBPW@localhost/spechomes
+BASIC_AUTH=admin:REDACTED_ADMIN_PW
+SNAPSHOT_DIR=$REMOTE/var/snapshots
+NODE_ENV=production
+EOF
+ln -sf $REMOTE/.env $REMOTE/apps/web/.env
+ln -sf $REMOTE/.env $REMOTE/apps/admin/.env
+cd $REMOTE
+export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin
+corepack enable 2>/dev/null || npm i -g pnpm@11 2>/dev/null || true
+pnpm install --config.confirmModulesPurge=false 2>&1 | tail -3
+pnpm --filter @spechomes/database db:generate 2>&1 | tail -2
+pnpm --filter @spechomes/web build 2>&1 | tail -4
+pnpm --filter @spechomes/admin build 2>&1 | tail -4"
+
+echo "──────── 5/6  pm2 (web :$WEB_PORT, admin :$ADMIN_PORT) ────────"
+ssh $KH "cd $REMOTE; export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin
+pm2 delete spechomes-web spechomes-admin 2>/dev/null || true
+PORT=$WEB_PORT pm2 start 'pnpm --filter @spechomes/web start' --name spechomes-web --time
+PORT=$ADMIN_PORT pm2 start 'pnpm --filter @spechomes/admin start' --name spechomes-admin --time
+pm2 save
+sleep 6
+echo -n '  web  '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB_PORT/
+echo -n '  admin(401 expected) '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$ADMIN_PORT/"
+
+echo "──────── 6/6  nginx vhosts (HTTP; CF edge TLS) ────────"
+ssh $KH "cat > /etc/nginx/sites-available/spechomes.com <<'NGINX'
+server {
+    listen 45.61.58.125:80;
+    server_name spechomes.com www.spechomes.com;
+    location / {
+        proxy_pass http://127.0.0.1:$WEB_PORT;
+        proxy_set_header Host \$host;
+        proxy_set_header X-Real-IP \$remote_addr;
+        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto \$scheme;
+    }
+}
+server {
+    listen 45.61.58.125:80;
+    server_name admin.spechomes.com;
+    location / {
+        proxy_pass http://127.0.0.1:$ADMIN_PORT;
+        proxy_set_header Host \$host;
+        proxy_set_header X-Real-IP \$remote_addr;
+        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto \$scheme;
+    }
+}
+NGINX
+ln -sf /etc/nginx/sites-available/spechomes.com /etc/nginx/sites-enabled/spechomes.com
+nginx -t && systemctl reload nginx
+echo -n '  origin via Host header: '; curl -s -o /dev/null -w '%{http_code}\n' -H 'Host: spechomes.com' http://127.0.0.1/"
+
+echo ""
+echo "✅  Kamatera origin is live. Tell Claude 'origin ready' and it will do Cloudflare + GoDaddy."

← 0e090e4 auto-save: 2026-07-22T12:13:58 (1 files) — collectors/dream-  ·  back to Homesonspec  ·  go-live scripts (Kamatera deploy + CF/GoDaddy cutover), giti 030753f →