← back to Social Profile Kits
README.md
99 lines
# social-profile-kits
Paste-ready X + Instagram asset kits for Steve's **152 brand domains** (10 hand-crafted flagships + 142 auto-expanded from `design-domains-live.txt`).
**Why this exists:** registering 151 social handles autonomously is TOS-blocked (X requires SMS per account; both platforms ban automation-driven signup). This directory is the realistic version — every piece of copy & spec needed so signup is mechanical paste-work for Steve or a VA. **Nothing in this directory contacts X or IG.**
## Two tiers
### Tier 1 — Hand-crafted flagships (10)
These have bespoke voice, brand-specific posts, and tuned image art-direction. Sign these up first.
| # | Domain | X handle (primary) | IG handle (primary) | Category |
|---|---|---|---|---|
| 1 | designerwallcoverings.com | @DesignerWalls | @designerwallcoverings | DW flagship |
| 2 | novasuede.com | @novasuede | @novasuede | DW canonical UX |
| 3 | philipperomano.com | @philipperomano | @philipperomano | DW premium label |
| 4 | corkwallcovering.com | @corkwallcover | @corkwallcovering | DW reference impl |
| 5 | silkwallpaper.com | @silkwallpaper | @silkwallpaper | DW vertical |
| 6 | glitterwalls.com | @glitterwalls | @glitterwalls | DW recent |
| 7 | losangelesfabrics.com | @LAFabricsCo | @losangelesfabrics | DW recent ship |
| 8 | nationalpaperhangers.com | @NatPaperHanger | @nationalpaperhangers | NPH (non-DW) |
| 9 | wallco.ai | @wallco_ai | @wallco.ai | newest brand |
| 10 | venturaclaw.com | @venturaclaw | @venturaclaw | Ventura Claw |
### Tier 2 — Auto-expanded (142)
Generated by `expand.mjs` from `~/Projects/_dw-batch/design-domains-live.txt`. Bios are category-aware (era / material / location / commercial / room / style / paint / fabric / wallcovering / wallpaper / walls / generic) with deterministic per-stem rotation so no two bios are identical.
| Detected category | Example domains | Bio voice |
|---|---|---|
| `era` | 1800swallpaper, 1920swallpaper, 1950swallpaper | "Authentic [decade]-era wallpaper, period-correct colorways..." |
| `material` | silkwallcoverings, raffiawalls, jutewallpaper | "Trade source for [material] wallcoverings, natural-fiber..." |
| `location` | carmelpaints, beverlyhillspaints, wallpapernyc | "[Location]-direct wallcoverings & finishes..." |
| `commercial` | asseeninhotels, commercialwalls, classawallcovering | "Class A vinyl, hospitality-spec, fire-rated..." |
| `room` | barwallpaper, apartmentwallpaper, kitchenwallpaper | "Wallpaper for the room you actually live in..." |
| `style` | chinoiseriewallpaper, blockprintedwallpaper, agedwallpaper | "[Style] patterns, designer-grade only..." |
| `paint` | carmelpaints, beverlyhillspaints | "Designer paint — curated palettes, low-VOC..." |
| `fabric` | cfafabrics, wallsandfabrics, restaurantfabrics | "Trade fabric source — drapery, upholstery..." |
| `wallcovering` / `wallpaper` / `walls` / `generic` | the long tail | "Designer wallpaper, trade-direct, free samples..." |
If a stem matches multiple categories, the first match wins (era > material > location > commercial > room > style > paint > fabric > wallcovering > wallpaper > walls > generic). Promote any Tier-2 domain to Tier 1 by editing its entry in `brands.json` to hand-tuned copy, then re-running `node generate.mjs`.
## Files per brand (under `<domain>/`)
| File | Purpose |
|---|---|
| `profile.json` | Single structured record — all fields |
| `x-bio.txt` | 160-char X bio, paste-ready |
| `x-display-name.txt` | 50-char X display name |
| `x-handle-candidates.txt` | Primary @handle + 3 fallbacks if taken |
| `x-first-3-posts.md` | Three draft tweets (each ≤280) |
| `ig-bio.txt` | 150-char IG bio, paste-ready |
| `ig-display-name.txt` | 30-char IG display name |
| `ig-handle-candidates.txt` | Primary @handle + 3 fallbacks |
| `ig-first-3-posts.md` | Three draft IG captions |
| `link-in-bio.json` | Structured link-tree for IG bio "Add link" feature |
| `image-specs.md` | Profile pic / header dimensions + art direction |
| `credentials-template.txt` | Empty cred record — NOT real password |
## Top-level files
- `brands.json` — manifest source-of-truth (152 entries). Edit to update copy or add brands, then re-run `node generate.mjs`.
- `generate.mjs` — idempotent generator. Run any time to refresh per-domain files.
- `expand.mjs` — auto-extender. Reads `design-domains-live.txt`, adds any missing domains to `brands.json` with category-aware templates, then invokes `generate.mjs`. Re-runnable: skips domains already in the manifest.
- `x-account-checklist.md` — one-page X signup walkthrough.
- `ig-account-checklist.md` — one-page IG signup walkthrough.
## Workflow
1. Steve (or VA) opens `<brand>/credentials-template.txt`, then runs `node ~/Projects/secrets-manager/cli.js get X_DEFAULT_PASSWORD` for the password.
2. Follows `x-account-checklist.md` to register the X account, paste-copying from `<brand>/x-*` files.
3. Follows `ig-account-checklist.md` to register the IG account, paste-copying from `<brand>/ig-*` files.
4. Per checklist: records the actual @handle claimed via `node ~/Projects/secrets-manager/cli.js add X_HANDLE_<DOMAIN_UPPER> @handle` so future automation has the inventory.
5. Once 5+ accounts exist with recorded inventory, ask Claude to wire up a posting layer (X Premium API at $200/mo, or per-account Meta Graph for IG).
## Adding more brands
**Option A (single brand, hand-crafted):** Edit `brands.json`, add an entry to the `brands` array, run `node generate.mjs`.
**Option B (bulk from a domain list):** Add the new domains to `~/Projects/_dw-batch/design-domains-live.txt`, run `node expand.mjs`. Existing entries are preserved; only new domains get auto-generated kits.
**Option C (promote auto → hand-crafted):** Find the auto-generated entry in `brands.json` (look for `"category": "auto:..."`), replace its `x.bio` / `ig.bio` / `first_posts` with hand-tuned copy, change category to a descriptive label, re-run `generate.mjs`.
## What's NOT in here
- Actual phone numbers (you provide at signup).
- Real password values (use secrets-manager).
- Image files (specs only — generate via DW's existing tooling or hand-art-direct).
- Account creation automation. Permanently out of scope — both platforms TOS-prohibit it.
## Standing rules honored
- Brand display = domain stem, no fake names (per `feedback_brand_no_fake_name`).
- Email = `info@<domain>` from Purelymail (per `feedback_purelymail_per_new_build`).
- Office address = Sherman Oaks address (per `reference_dw_office_address`).
- Password stored in secrets-manager (per global CLAUDE.md routing rule).
- No mass automation against X/IG (per `feedback_no_ig_dm_outreach` + classifier blocks).