← back to Norma
IG reshare: fix robustness gap — track vendor list + hashtag map as config (were gitignored), add build-ig-data.js regen script
d165d00680ca266c065b703c5e469a86fee995dc · 2026-08-14 15:58:24 -0700 · Steve
Files touched
A agents/instagram-agent/build-ig-data.jsA agents/instagram-agent/data/account-hashtags.jsonA agents/instagram-agent/data/dw-vendors.txt
Diff
commit d165d00680ca266c065b703c5e469a86fee995dc
Author: Steve <steve@designerwallcoverings.com>
Date: Fri Aug 14 15:58:24 2026 -0700
IG reshare: fix robustness gap — track vendor list + hashtag map as config (were gitignored), add build-ig-data.js regen script
---
agents/instagram-agent/build-ig-data.js | 36 ++
agents/instagram-agent/data/account-hashtags.json | 184 ++++++++
agents/instagram-agent/data/dw-vendors.txt | 495 ++++++++++++++++++++++
3 files changed, 715 insertions(+)
diff --git a/agents/instagram-agent/build-ig-data.js b/agents/instagram-agent/build-ig-data.js
new file mode 100644
index 0000000..8fa13c8
--- /dev/null
+++ b/agents/instagram-agent/build-ig-data.js
@@ -0,0 +1,36 @@
+#!/usr/bin/env node
+/**
+ * build-ig-data.js — regenerate the reshare engine's data deps so the system is reproducible:
+ * - data/account-hashtags.json (deterministic, from account-themes.json + handles)
+ * - data/dw-vendors.txt (from dw_unified.vendor_registry via psql + the scrub filter)
+ * FileMaker Supplier enrichment is an optional overlay (the committed dw-vendors.txt already
+ * includes it); this rebuilds a solid baseline if the file is ever lost.
+ * node build-ig-data.js
+ */
+const fs = require('fs'); const path = require('path'); const cp = require('child_process');
+const HERE = __dirname; const DATA = path.join(HERE, 'data');
+// 1) account-hashtags.json — deterministic
+const themes = require('./account-themes.json').overrides;
+const accounts = require('./accounts');
+const map = {};
+for (const h of accounts.list().map((a) => a.handle)) {
+ const o = themes[h] || {}; if (o.skip) continue;
+ const kw = (o.keyword || h.replace(/wallpaper|wallcoverings?|walls|designs?|videos?/gi, ' ').replace(/[_-]+/g, ' ').trim());
+ const tags = new Set([h.replace(/[^a-z0-9]/g, '')]);
+ kw.split(/\s+/).filter((w) => w.length > 3).forEach((w) => tags.add(w.toLowerCase()));
+ tags.add('interiordesign'); map[h] = [...tags].slice(0, 4);
+}
+fs.writeFileSync(path.join(DATA, 'account-hashtags.json'), JSON.stringify(map, null, 1));
+console.log(`account-hashtags.json: ${Object.keys(map).length} accounts`);
+// 2) dw-vendors.txt baseline — vendor_registry + scrub (skip if psql/db unavailable)
+try {
+ const raw = cp.execSync(`psql "host=/tmp dbname=dw_unified" -tAc "SELECT DISTINCT lower(vendor_name) FROM vendor_registry WHERE vendor_name IS NOT NULL"`, { encoding: 'utf8' });
+ const JUNK = /^(custom|grasscloth|silk|velvet|linen|cork|vinyl|metallic|suede|mylar|woven|textile|textiles|fabric|fabrics|mural|murals|digital|specialty|natural|leather|paper|wood|sisal|jute|raffia|bamboo|glass|gold|silver|mica|stripes?|florals?|geometric|damask|solid|texture[ds]?|plaid|check|toile|paisley|contract|sterling|nci|tra|atrium|modern|classic|standard|premium|wallcoverings?|wallpapers?|walls|designs?)$/i;
+ const names = [...new Set(raw.split('\n').map((s) => s.trim().replace(/,? (inc|inc\.|llc|corp|company|co|international)\.?$/i, '').trim().toLowerCase())
+ .filter((s) => s.length >= 5 && !JUNK.test(s)))].sort();
+ // merge with existing (preserve FileMaker enrichment already on disk)
+ const existing = fs.existsSync(path.join(DATA, 'dw-vendors.txt')) ? fs.readFileSync(path.join(DATA, 'dw-vendors.txt'), 'utf8').split('\n').map((s) => s.trim()).filter(Boolean) : [];
+ const merged = [...new Set([...names, ...existing])].sort();
+ fs.writeFileSync(path.join(DATA, 'dw-vendors.txt'), merged.join('\n') + '\n');
+ console.log(`dw-vendors.txt: ${merged.length} names (registry + preserved enrichment)`);
+} catch (e) { console.log(`dw-vendors.txt: skipped (db unavailable: ${e.message.split('\n')[0]}) — kept existing file`); }
diff --git a/agents/instagram-agent/data/account-hashtags.json b/agents/instagram-agent/data/account-hashtags.json
new file mode 100644
index 0000000..594a425
--- /dev/null
+++ b/agents/instagram-agent/data/account-hashtags.json
@@ -0,0 +1,184 @@
+{
+ "asseeninhotels": [
+ "asseeninhotels",
+ "hospitality",
+ "interiordesign"
+ ],
+ "beverlyhillsvideos": [
+ "beverlyhillsvideos",
+ "metallic",
+ "gold",
+ "glamour"
+ ],
+ "borninbeverlyhills": [
+ "borninbeverlyhills",
+ "glamour",
+ "metallic",
+ "interiordesign"
+ ],
+ "chinoiseriewallpaper": [
+ "chinoiseriewallpaper",
+ "chinoiserie",
+ "interiordesign"
+ ],
+ "commercialwallcoverings": [
+ "commercialwallcoverings",
+ "commercial",
+ "vinyl",
+ "interiordesign"
+ ],
+ "customwallcoverings": [
+ "customwallcoverings",
+ "mural",
+ "interiordesign"
+ ],
+ "designerlaboratory": [
+ "designerlaboratory",
+ "modern",
+ "geometric",
+ "interiordesign"
+ ],
+ "designerwallcoverings": [
+ "designerwallcoverings",
+ "luxury",
+ "wallcovering",
+ "interiordesign"
+ ],
+ "fabric_fridays": [
+ "fabricfridays",
+ "fabric",
+ "interiordesign"
+ ],
+ "ffepurchasing": [
+ "ffepurchasing",
+ "woven",
+ "texture",
+ "interiordesign"
+ ],
+ "grassclothwallpaper": [
+ "grassclothwallpaper",
+ "grasscloth",
+ "interiordesign"
+ ],
+ "hollywoodwallcoverings": [
+ "hollywoodwallcoverings",
+ "hollywood",
+ "glamour",
+ "interiordesign"
+ ],
+ "hospitalitywallcoverings": [
+ "hospitalitywallcoverings",
+ "hospitality",
+ "vinyl",
+ "interiordesign"
+ ],
+ "interiordesignervideos": [
+ "interiordesignervideos",
+ "interior",
+ "design",
+ "interiordesign"
+ ],
+ "linenwallpaper": [
+ "linenwallpaper",
+ "linen",
+ "interiordesign"
+ ],
+ "metallicwallpaper": [
+ "metallicwallpaper",
+ "metallic",
+ "interiordesign"
+ ],
+ "patterndesignlab": [
+ "patterndesignlab",
+ "geometric",
+ "pattern",
+ "interiordesign"
+ ],
+ "philliperomanodesigns": [
+ "philliperomanodesigns",
+ "phillipe",
+ "romano",
+ "interiordesign"
+ ],
+ "restorationwallpaper": [
+ "restorationwallpaper",
+ "traditional",
+ "damask",
+ "interiordesign"
+ ],
+ "retrowalls": [
+ "retrowalls",
+ "retro",
+ "century",
+ "interiordesign"
+ ],
+ "roomsettings": [
+ "roomsettings",
+ "room",
+ "setting",
+ "interiordesign"
+ ],
+ "screenprintedwallpaper": [
+ "screenprintedwallpaper",
+ "screen",
+ "printed",
+ "interiordesign"
+ ],
+ "sheltermagazines": [
+ "sheltermagazines",
+ "editorial",
+ "interior",
+ "interiordesign"
+ ],
+ "suedewallpaper": [
+ "suedewallpaper",
+ "suede",
+ "interiordesign"
+ ],
+ "textilewallpaper": [
+ "textilewallpaper",
+ "textile",
+ "interiordesign"
+ ],
+ "thedesignerlibrary": [
+ "thedesignerlibrary",
+ "classic",
+ "damask",
+ "interiordesign"
+ ],
+ "thesetdecorator": [
+ "thesetdecorator",
+ "dramatic",
+ "scenic",
+ "interiordesign"
+ ],
+ "traditionalwhimsy": [
+ "traditionalwhimsy",
+ "traditional",
+ "whimsical",
+ "interiordesign"
+ ],
+ "velvetwallpaper": [
+ "velvetwallpaper",
+ "velvet",
+ "interiordesign"
+ ],
+ "wallpaperhistory": [
+ "wallpaperhistory",
+ "vintage",
+ "damask",
+ "interiordesign"
+ ],
+ "wallpaperinstallers": [
+ "wallpaperinstallers",
+ "textured",
+ "wallcovering",
+ "interiordesign"
+ ],
+ "wallpaperwednesdays": [
+ "wallpaperwednesdays",
+ "designer",
+ "wallcovering",
+ "interiordesign"
+ ]
+}
\ No newline at end of file
diff --git a/agents/instagram-agent/data/dw-vendors.txt b/agents/instagram-agent/data/dw-vendors.txt
new file mode 100644
index 0000000..2036bee
--- /dev/null
+++ b/agents/instagram-agent/data/dw-vendors.txt
@@ -0,0 +1,495 @@
+(cost push watermark)
+(unlinked)
+17 patterns
+17 patterns copy
+1838 wallcoverings
+4walls
+5th and malcolm
+aba interiors
+abnormal anonymous
+ada wall
+adelphia online
+aimee wilder
+alan campbell
+alaxi
+aldeco
+alfred peats
+alhambra
+all lines
+alpha work shops
+american silk mills
+anagylpta
+ananbo
+ananbo papiers peints panoramiques murals
+andrew martin
+ankasa textiles
+anna dove uk
+anna french
+anthology
+archetonic
+armani casa
+art house wallpaper
+arteriors
+as creation
+as creations
+ast fabrics
+astek
+atomic 50 ceilings
+atrium wallcoverings
+aux abris fine wallcoverings
+avant garde fabrics
+backdrop
+baker lifestyle
+barbara barry textiles
+barbarossa
+barnaby gates
+beacon hill fabrics
+bergamo fabrics
+beverly hills suede
+beware the moon
+birge and sons
+black edition
+blue mountain wallcoverings
+bn wallcoverings
+bn walls
+borastapeter
+borderline wallpaper and fabrics
+boris kroll
+boussac france
+bradbury & bradbury
+brand mckenzie
+braquenie fabrics
+brentano fabrics
+brewster
+brewster & york
+brewster wallcoverings
+brimar trim
+british walls
+brunschwig & fils
+bw glitter alternatives
+calico wallpaper
+callidus guild wallpaper
+calvin fabrics
+candice olson
+carl robinson wallpaper
+carlisle &
+carlisle & co (sangetsu)
+carlton house fabrics
+carlton v fabrics
+carlucci di chivasso
+carnegie
+caselio spain wallpaper and fabrics
+catchii
+catherine martin for mokum textiles
+cavern home
+celerie kemble
+charles barone wallcovering
+charles burger
+charles pollock fabrics
+chase erwin textiles
+chasing paper peel stick
+china glitter (dr china)
+china seas
+chivasso
+christian fischbacher
+christopher farr wallpaper and fabrics
+christopher highland
+clarence house
+clark and clark
+clarke and clarke
+cloth and paper
+cmo paris
+cole & son
+cole & son (sangetsu)
+cole & sons
+colefax & fowler
+colour & design
+command54
+concertex
+contrado
+coordonné
+coraggio textiles
+cowtan & tout
+crezana wallpaper
+cust hom wallpaper
+d.l. lyons creations
+daisy bennett
+david hicks designs
+david sutherland
+de gournay murals
+de novo wall commercial wallcoverings
+decor de paris
+dedar
+denovo wall
+designers guild
+designtex
+desima european textiles
+devon and devon
+divine savages
+dl couch
+dl couch commercial wallcoverings
+dolce & gabbana
+donghia
+dorell fabrics
+dupenny
+duralee
+dw bespoke studio
+dw printing services
+edelman leather
+eiffenger wallpaper
+eijffinger (sangetsu)
+elitis
+elizabeth dow
+ella doran
+elli popp
+elmo leather
+emiliana parati
+emma hayes
+engblad and
+erica wakerly
+erika wakerly
+et cie
+exclusive handprints
+eykon design resources - commercial wallcoverings
+fabicut
+fabricut
+fabulous imports
+fardis wallpaper uk
+farrow & ball
+fausel biskamp
+fentucci
+fentucci naturals
+ferm living
+fidelity wallcoverings
+filippo uecher
+filz felt
+flavor paper
+flie paper
+florence broadhurst
+folia fabrics
+fortuny fabrics
+fox linton
+franquemont
+fred cole
+french market
+fromental
+galbraith and paul
+gaston y daniela
+giardini wallcoverings
+gimmersta
+glant textiles
+glass bead (dw house brand - sourced)
+glitter wallcoverings
+glitter walls (multi-source)
+gloria alexander
+goodrich (sangetsu)
+gorman studio
+gp & j baker
+gracie
+graduate collection
+graduate collection uk
+graduate collection wallpapers
+graham & brown
+great plains
+greenland (sangetsu)
+greenland printing
+griffin and wong
+groundworks
+groves brothers
+hamilton weston wallpapers
+hannah nunn uk wallpaper
+happy menocal
+harlequin
+harlequin (sangetsu)
+hartman and forbes
+helvetia leather
+henry bosch
+hermes
+highland court fabrics
+hinson wallpaper and fabrics
+holland and sherry
+holly hunt
+holly hunt leather
+hollywood wallcoverings
+home couture
+houles paris
+house of hackney
+hygge & west
+hytex
+ian mankin
+iksel
+iliv uk textiles
+innovations
+innovations usa wallcoverings
+intex fabrics
+j & v italiano
+j m lynne
+j. samuel
+j.josephson (sangetsu)
+jab wallpaper and fabrics
+jaime brown
+james hare uk silk wallpaper and fabrics
+jane churchill fabrics
+jane shelton textiles
+jasper wallpaper
+jerry pair leather
+jf fabrics
+jim dultz
+jim thompson fabrics
+jocelyn warner
+johnstons of elgin
+judit gueth
+juju papers
+justin david
+kamism
+kasmir fabrics
+kelly wearstler
+kelly wearstler wallpaper
+kemra
+kerry joyce fabrics
+kirkby design
+kit miles wallpaper
+knoll
+koessel studios
+koroseal
+koroseal (sangetsu)
+koroseal wallcoverings west
+kravet
+la scala milano
+la scala milano (sangetsu)
+la walls
+lanark commercial wallpaper
+laura ashley
+lavinder designs
+lbi boyd
+leather craft
+led wallpaper by meystyle
+lee jofa
+leed walls
+lelievre wallpaper and fabrics
+lemon x laura berger
+len-tex wallpaper
+lilycolor
+lincrusta
+lincrusta embossed paintable dados, walls, frieze, borders
+lincrusta online
+linherr hollingsworth
+link outdoor fabrics
+lord twig
+lori weitzner
+lulu dk
+lulu dk fabrics
+maharam
+malabar fabrics
+malibu wallpaper
+manuel canovas
+marburg
+mariaflora
+marian jamieson lighting
+marimekko
+mark alexander
+mary mcdonald
+mason and wolf
+matthew williamson
+maya romanoff
+mayflower wallpaper
+mc escher
+michael jon designa
+milton & king
+mind the gap
+mine heart
+mini moderns
+miss print
+missoni
+mokum textiles
+momentum (source)
+moore and gils leather
+morris and
+motif designs
+mr perswall
+muffin and mani collection
+mulberry
+mulberry home wallpaper and fabrics
+mural source
+naturale 54
+neisha crosland
+new wall
+newcastle wallcoverings
+newmor
+newwall
+nicolette mayer
+nina campbell
+nobilis
+novasuede
+old world weavers
+olivia and popp
+olney wallcoverings
+omexco
+omexco (sangetsu)
+opuzen fabrics
+osborne & little
+outdoor fabrics
+outdura outdoor fabric
+p. kaufman fabrics
+p3tec (sangetsu)
+pacific hide and leather
+pallas textiles
+paper boy wallpaper
+paper mint france
+patty madden
+paul montgomery
+peg norriss
+pequette design
+phillip jeffries
+pierre frey
+pindler
+pindler fabrics
+pip studios uk
+pixels
+plains
+pointe (justin david)
+pollack fabrics
+pollack weitzner fabrics
+poppy print studio
+portofino italian wallpapers
+primo leathers
+princes and crows
+printy6
+quadrille
+questex commercial wallcovering
+radford
+ralph lauren
+raoul textiles
+rasch wallcoverings
+rebel studio
+rebel walls
+reid witlin
+relativity textiles
+richloom contract
+rifle paper
+rigo wallcovering
+rjf international
+robert allen fabrics
+robert crowder and
+roberto cavalli
+rodolph fabrics
+roger arlington fabrics
+rogers & goffigon
+ron redding
+rubelli fabrics
+s. harris
+s. harris fabrics
+sacha walckhoff
+sahco fabrics
+sancar
+sandberg
+sandeep
+sanderson
+sangetsu
+sangetsu (sangetsu)
+sara bergqvist
+sarah bartholomew
+scalamandre
+scantrends
+schumacher
+seabrook
+seabrook wallpaper
+sellers & josephson
+series wallcoverings
+sidney paul
+sister parish
+source one wallcovering
+spinneybeck leather
+spoonflower
+stacy garcia commercial wallpaper
+stark
+stout textiles
+stroheim
+studio ditte
+studio e
+studio printworks
+studio printworrks
+studio source
+studio zen wallcovering
+suncloth
+surface prints
+surface stick
+surfaces by david bonk
+svenskt tenn wallpaper
+swavelle hospitality
+tassinari and chatel
+tatiz outdoor fabrics from brazil
+tecnografica
+tempotest fabrics
+texam (sangetsu)
+texdecor (sangetsu)
+thibaut
+thomas lavin
+thomas lavin showroom
+threads
+threads by gp baker
+thybony
+timorous beasties
+today interiors
+todhunter earle
+tokiwa gold leaf
+tools for spreadsheets
+tower commercial vinyl
+tower commercial wallpaper
+townsend leather
+tracy kendall
+travers fabric
+trend wallcoverings
+tres tintas
+tretford
+trikes
+trikes los angeles
+trikes/wall fashion
+twenty two wallpaper
+twil karin
+u.s. vinyl manufacturing
+ulrich
+ultrasuede
+united fabrics
+vahallan
+vahallan (sangetsu)
+vahallan wallcovering
+valley forge fabrics
+van luit wallcoverings
+versa commercial wallcoverings
+versa design surfaces (sangetsu)
+versa designed surfaces
+versace
+vervain
+vescom commercial wallcoverings
+villa nova
+wallpaper nyc
+wallpaper republic
+wallquest
+washington wallcoverings
+watts 1874
+welter innovative wallpaper
+wemyss fabrics
+wilful ink
+william morris
+william yeoward
+winfield thybony
+witch & watchman
+wolf gordon
+york (jeffrey stevens source)
+york contract
+york wallcoverings
+york/brewster (phillipe romano source)
+zak and fox textiles
+zambaiti (sangetsu)
+zambaiti parati (sangetsu)
+zax leather
+zeuxis parrhasius
+zhigao faux leather
+zimmer & rhode fabrics
+zimmer + rohde
+zinc textile
+zintra (sangetsu)
+zoffany
+zuber
+zuber & cie — since 1797
← 86d4ac6 IG: robust 48h Phase-1 check reminder (launchd one-shot Aug
·
back to Norma
·
IG reshare: curate real populated community hashtags for all aca7fab →