← 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
M scripts/ig-grid-queue.jsonM server.js
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 →