[object Object]

← back to Designer Wallcoverings

Wire Kravet feed into daily cadence (com.steve.kravet-feed)

d38a5433b2dbe5e5ab97891e087f6dca5b9069dd · 2026-06-11 11:44:32 -0700 · SteveStudio2

kravet-feed-cadence.sh: SFTP-download deswallco.zip → unzip → kravet-feed-import for the
SKU-aligned tables (kravet_catalog, gp_baker, gaston_daniela). launchd daily + RunAtLoad,
single-flight lock. Catalog-only, no Shopify push. Creds from gitignored .kravet-creds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Files touched

Diff

commit d38a5433b2dbe5e5ab97891e087f6dca5b9069dd
Author: SteveStudio2 <stevestudio2@SteveStudio2s-Mac-Studio.local>
Date:   Thu Jun 11 11:44:32 2026 -0700

    Wire Kravet feed into daily cadence (com.steve.kravet-feed)
    
    kravet-feed-cadence.sh: SFTP-download deswallco.zip → unzip → kravet-feed-import for the
    SKU-aligned tables (kravet_catalog, gp_baker, gaston_daniela). launchd daily + RunAtLoad,
    single-flight lock. Catalog-only, no Shopify push. Creds from gitignored .kravet-creds.
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 shopify/scripts/kravet-feed-cadence.sh | 57 ++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/shopify/scripts/kravet-feed-cadence.sh b/shopify/scripts/kravet-feed-cadence.sh
new file mode 100755
index 00000000..423bd4c3
--- /dev/null
+++ b/shopify/scripts/kravet-feed-cadence.sh
@@ -0,0 +1,57 @@
+#!/usr/bin/env bash
+# Kravet feed daily cadence — runs INDEPENDENT of any Claude Code session.
+# launchd: com.steve.kravet-feed (RunAtLoad + daily). Single-flight lock.
+#
+# Pulls the authorized Kravet SFTP feed (ftp.kravet.com:22, creds in .kravet-creds),
+# unzips item_info.csv, and refreshes cost/MAP/sell + basic specs in the Kravet-family
+# catalog tables whose SKU format matches the feed. Catalog-only — NO Shopify push,
+# no customer-facing writes (safe to run unattended).
+set -u
+export PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin
+DIR="$HOME/Projects/Designer-Wallcoverings/shopify/scripts"
+LOG="$DIR/cadence/data/kravet-feed.log"
+LOCK="/tmp/kravet-feed.lock"
+CREDS="$DIR/.kravet-creds"
+mkdir -p "$DIR/cadence/data"
+
+if ! mkdir "$LOCK" 2>/dev/null; then echo "$(date '+%F %T') still running — skip" >> "$LOG"; exit 0; fi
+trap 'rmdir "$LOCK" 2>/dev/null' EXIT
+cd "$DIR" || exit 1
+echo "$(date '+%F %T') ===== kravet feed tick =====" >> "$LOG"
+
+[ -f "$CREDS" ] || { echo "$(date '+%F %T') missing .kravet-creds — abort" >> "$LOG"; exit 1; }
+# load SFTP creds (KRAVET_SFTP_HOST/USER/PASSWORD/FILE)
+set -a; . "$CREDS"; set +a
+export KRAVET_SFTP_PASSWORD
+
+# 1) download the feed zip via SFTP (expect drives the password prompt)
+rm -f /tmp/deswallco.zip /tmp/item_info.csv
+expect >> "$LOG" 2>&1 <<'EXP'
+set timeout 120
+set pw $env(KRAVET_SFTP_PASSWORD)
+set host $env(KRAVET_SFTP_HOST)
+set user $env(KRAVET_SFTP_USER)
+set file $env(KRAVET_SFTP_FILE)
+spawn sftp -o StrictHostKeyChecking=accept-new -o ConnectTimeout=20 $user@$host
+expect {
+  "assword:" { send "$pw\r" }
+  timeout { puts "SFTP-CONNECT-TIMEOUT"; exit 1 }
+}
+expect { "sftp>" { send "lcd /tmp\r" } "assword:" { puts "SFTP-AUTH-FAILED"; exit 2 } timeout { exit 1 } }
+expect "sftp>" { send "get $file\r" }
+expect "sftp>" { send "bye\r" }
+expect eof
+EXP
+
+if [ ! -s /tmp/deswallco.zip ]; then echo "$(date '+%F %T') download failed — abort" >> "$LOG"; exit 1; fi
+unzip -o /tmp/deswallco.zip -d /tmp >> "$LOG" 2>&1
+[ -s /tmp/item_info.csv ] || { echo "$(date '+%F %T') unzip produced no item_info.csv — abort" >> "$LOG"; exit 1; }
+
+# 2) import into the catalog tables whose SKU format matches the feed (validated 2026-06-11).
+#    Sister brands w/ divergent SKU formats (lee_jofa, brunschwig, clarke_clarke, mulberry,
+#    threads, baker_lifestyle) need per-brand SKU normalization first — added later.
+for T in kravet_catalog gp_baker_catalog gaston_daniela_catalog; do
+  echo "$(date '+%F %T') import $T" >> "$LOG"
+  node kravet-feed-import.js --csv /tmp/item_info.csv --table "$T" --commit >> "$LOG" 2>&1
+done
+echo "$(date '+%F %T') tick done" >> "$LOG"

← 2d60072d vendors.js: add Kravet (costExpr cost_price) — cost loaded f  ·  back to Designer Wallcoverings  ·  Add Schumacher to cadence vendors (Designer Net, cost=priceU d5d9d6f5 →