← 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
M apps/admin/package.jsonM apps/web/package.jsonA deploy-kamatera.sh
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 →