[object Object]

← back to Wild Wallcoverings

marketing GO now triggers the reel build on click (Building->Built status); fix queue captions 21->20; drop archived Pharmacy Follies pin

d621a526d7c2929768ab22cc56e60b58cd153633 · 2026-07-23 12:37:05 -0700 · Steve Abrams

Files touched

Diff

commit d621a526d7c2929768ab22cc56e60b58cd153633
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 23 12:37:05 2026 -0700

    marketing GO now triggers the reel build on click (Building->Built status); fix queue captions 21->20; drop archived Pharmacy Follies pin
---
 scripts/ig-grid-queue.json |  4 ++--
 server.js                  | 33 ++++++++++++++++++++++++++++-----
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/scripts/ig-grid-queue.json b/scripts/ig-grid-queue.json
index 6c6a2d1..89aeca9 100644
--- a/scripts/ig-grid-queue.json
+++ b/scripts/ig-grid-queue.json
@@ -37,7 +37,7 @@
       "slot": 5,
       "design": "LINE CARD (center anchor)",
       "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/whimsical-wallcoverings-line-card.jpg?v=1784819162",
-      "caption": "Introducing Whimsical Wallcoverings — a new house line from Designer Wallcoverings. 21 original designs, drawn flat in a screen-print hand, digitally printed to order on demand. No minimums to dream on: every pattern samples at $4.25. Explore the full collection — link in bio.",
+      "caption": "Introducing Whimsical Wallcoverings — a new house line from Designer Wallcoverings. 20 original designs, drawn flat in a screen-print hand, digitally printed to order on demand. No minimums to dream on: every pattern samples at $4.25. Explore the full collection — link in bio.",
       "first_comment": "Explore the full collection: https://www.designerwallcoverings.com/collections/whimsical-wallcoverings",
       "posted_at": null,
       "media_id": null,
@@ -77,7 +77,7 @@
       "slot": 1,
       "design": "Tigris Nocturne - Onyx & Chalk",
       "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/astral-tiger-v1-nano.png?v=1784779133&width=1080&height=1350&crop=center&format=pjpg",
-      "caption": "A folk tiger pacing a field of stars. Tigris Nocturne opens the Whimsical Wallcoverings collection — 21 original designs drawn in our own studio and digitally printed to order. Onyx & Chalk, 24\" repeat. Samples $4.25 — link in bio.",
+      "caption": "A folk tiger pacing a field of stars. Tigris Nocturne opens the Whimsical Wallcoverings collection — 20 original designs drawn in our own studio and digitally printed to order. Onyx & Chalk, 24\" repeat. Samples $4.25 — link in bio.",
       "first_comment": "Shop Tigris Nocturne: https://www.designerwallcoverings.com/products/tigris-nocturne-onyx-chalk-whimsical-wallcoverings",
       "posted_at": null,
       "media_id": null,
diff --git a/server.js b/server.js
index eb5c753..7bba42b 100644
--- a/server.js
+++ b/server.js
@@ -89,14 +89,37 @@ const server = http.createServer((req, res) => {
     req.on('end', () => {
       try {
         const spec = JSON.parse(body);
-        fs.writeFileSync(path.join(ROOT, 'data', 'marketing-approved.json'),
+        const dataDir = path.join(ROOT, 'data');
+        const statusPath = path.join(dataDir, 'marketing-status.json');
+        fs.writeFileSync(path.join(dataDir, 'marketing-approved.json'),
           JSON.stringify({ ...spec, approved_at: new Date().toISOString() }, null, 2));
         // write the reel lineup the builder reads
-        fs.writeFileSync(path.join(ROOT, 'data', 'reel-lineup.json'), JSON.stringify(spec.reel, null, 2));
-        fs.writeFileSync(path.join(ROOT, 'data', 'marketing-status.json'),
-          JSON.stringify({ done: false, status: 'Approved — awaiting Claude to build + post.' }));
+        fs.writeFileSync(path.join(dataDir, 'reel-lineup.json'), JSON.stringify(spec.reel, null, 2));
+        // GO triggers the reel BUILD immediately (local, $0). Social posting stays gated.
+        const n = Array.isArray(spec.reel) ? spec.reel.length : 0;
+        fs.writeFileSync(statusPath, JSON.stringify({ done: false, status: `Building ${n}-design reel...` }));
         res.writeHead(200, { 'Content-Type': 'application/json' });
-        res.end(JSON.stringify({ ok: true }));
+        res.end(JSON.stringify({ ok: true, building: true }));
+        // spawn the reel build; update status on completion (ASCII-only status strings)
+        const { exec } = require('child_process');
+        const outName = '$HOME/Videos/whimsical-wallcoverings-launch-reel-$(date +%Y%m%d-%H%M%S).mp4';
+        const cmd = `export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"; cd ${ROOT} && ` +
+                    `REEL_OUT="${outName}" bash scripts/build_launch_reel.sh > /tmp/wildwc-reel-build.log 2>&1`;
+        exec(cmd, { shell: '/bin/bash', maxBuffer: 1 << 20 }, (err) => {
+          let st;
+          if (err) {
+            st = { done: true, ok: false, status: 'Reel build FAILED - see /tmp/wildwc-reel-build.log' };
+          } else {
+            let reelLine = '';
+            try {
+              reelLine = (fs.readFileSync('/tmp/wildwc-reel-build.log', 'utf8')
+                .split('\n').find(l => l.startsWith('reel:')) || '').replace('reel:', '').trim();
+            } catch {}
+            st = { done: true, ok: true,
+              status: `Reel built OK: ${reelLine || '~/Videos'} - social posting still gated (awaiting your go).` };
+          }
+          try { fs.writeFileSync(statusPath, JSON.stringify(st)); } catch {}
+        });
       } catch (e) { res.writeHead(400); res.end(String(e)); }
     });
     return;

← c76ea89 Correct Threads status: post 18106202063518711 NOT live (doe  ·  back to Wild Wallcoverings  ·  README: honest collection-membership status (archived+off-st 4684eeb →