| name | pinterest-marketing |
| description | Creates BabyPickr Pinterest pin images and posting copy for blog articles: 1000x1500 branded graphics, multiple pin angles per post, product rankings, curiosity hooks, and SEO-friendly titles/descriptions/tags/topics. Use when the user mentions Pinterest, pin images, pin marketing, social graphics for blogs, or wants posting copy for BabyPickr content. |
BabyPickr Pinterest marketing
Read this skill before creating or revising Pinterest pins for any BabyPickr blog.
Canonical reference: marketing/pinterest/best-strollers-disney-world/
Generator: marketing/pinterest/{slug}/generate-pins.mjs
Posting copy: marketing/pinterest/{slug}/pins-copy.txt
Output checklist
Every blog pin campaign should deliver:
- PNG files at 1000 x 1500 px (2:3, Pinterest standard) in
marketing/pinterest/{slug}/
- Copy file
pins-copy.txt in the same campaign folder with per-pin: Title, Description (includes hashtags), Topics
- Generator script
generate-pins.mjs in the same campaign folder so pins can be re-rendered after copy tweaks
One folder per blog. Never drop new pin PNGs or copy into the flat marketing/pinterest/ root. Each campaign gets its own {slug}/ subfolder.
PNG only for handoff. Generators build layout as an in-memory SVG string and export PNG via sharp. Do not write .svg files to disk; Pinterest only needs PNG (or JPEG).
Run the generator yourself after changes:
node marketing/pinterest/{slug}/generate-pins.mjs
Design sweet spot
Pinterest users scroll fast. The best BabyPickr pins combine:
| Layer | Purpose |
|---|
| Disney/topic visual cue (top 20–30%) | Signals "this is about Disney World" (or the blog topic) in under 0.5 seconds |
| Infographic below | Rankings, situation picks, or one sharp hook earns the click |
Do
- One headline readable in 1 second
- Curiosity gap ("Which stroller won #1?", "See which strollers actually fit")
- Product photos with #1 / #2 / #3 or situation badges
- 3–6 pin variants per article (Pinterest rewards multiple creatives)
- Use blog hero image when the post has one (
lib/blog/heroImages.ts, public/blog/)
- Pull product images from
data/*.ts imageUrl fields (cache in marketing/pinterest/{slug}/assets/)
Do not
- Bullet lists of article topics (reads like a table of contents, low CTR)
- Full-photo blog-cover pins with tiny text overlay
- Text-only infographics with no product visuals
- Fear headlines users have learned to ignore ("Could ruin your trip") — prefer believable curiosity ("Most parents miss this rule")
- Long subheads on mobile ("12 Parent-Tested Picks Ranked" → "Top 12 Parent-Tested Picks")
Pin angle library
Create multiple pins per blog. Pick angles that match the article's strongest hooks.
| Type | Headline pattern | Best for |
|---|
| Ranked | Best {Topic} 2026 + Top N Parent-Tested Picks | Primary pin; bottle-style #1/#2/#3 with product images |
| By situation | Best {Topic} by Situation | Decision shortcuts (Best Overall, Best for Flying, Best for Newborns, Best Double…) |
| Curiosity / rule | Most Parents Miss This {Rule} | Size limits, banned gear, gate policies |
| Story hook | {Brand} Rejected Our {Product} | Wagons, oversized doubles, policy surprises |
| Money | Rent or Bring? / Families Save Up To $X | Cost comparison posts |
| Travel cluster | Flying to {Place}? … Fit Overhead Bins | Flying keyword intent; less topic imagery OK (airport/carry-on cue instead) |
Posting order: Ranked → By Situation → Story/Curiosity → Money → Travel. Stagger 2–3 days apart on the same board. All pins link to the same blog URL.
Brand tokens (pins)
Match BabyPickr site colors from app/globals.css:
| Token | Hex | Use |
|---|
| Brand green | #388E3C | Badges, accents, footer |
| Green dark | #2D6A4F | Footer gradient |
| Ink | #1A1A2E | Headlines |
| Muted | #4B5563 | Supporting text |
| Background | #F2F7F2 | Pin canvas |
| Gold / silver / bronze | #D4A017 / #9CA3AF / #B87333 | #1 / #2 / #3 rank circles |
| Warn red | #C62828 | Banned / rule alerts (sparingly) |
Typography in SVG: Georgia (headlines), Arial/Helvetica (badges, body).
Footer (all pins): Green bar + BabyPickr + www.babypickr.com/blog/{slug} (display only)
Destination URL (Pinterest link field): Always https://www.babypickr.com/blog/{slug} from config/seo-metadata.ts → SITE_ORIGIN. Apex babypickr.com redirects to www on Vercel; canonicals, sitemap, and JSON-LD all use www.
Technical workflow
1. Gather content from the blog
- Slug, title, hero image path, top picks (
pickMeta ranks and badges)
- Product ids → names and
imageUrl from data/{category}.ts
- FAQ hooks, money stats, rules (only use verified claims from the article)
2. Build generator script
Pattern: Node + sharp (already in devDependencies). Build layout as an SVG string in memory, embed images as base64, export PNG only.
marketing/pinterest/
├── best-strollers-disney-world/ # one folder per blog slug
│ ├── generate-pins.mjs
│ ├── pins-copy.txt
│ ├── pin-1-ranked.png
│ ├── pin-2-….png
│ └── assets/ # cached product JPEGs for this campaign
├── best-jogging-strollers-runners/
│ └── …
└── …
When starting a new campaign, create marketing/pinterest/{slug}/ first, then add the generator, copy file, and pin outputs there.
Reuse helpers from marketing/pinterest/best-strollers-disney-world/generate-pins.mjs:
heroStrip() — top 25% hero with fade to background
productCard() — rank + image + badge
situationRow() — badge + image + product name
footer() — BabyPickr bar
On Windows, do not use inline node -e "..." for complex SVG (PowerShell escaping breaks). Always use a .mjs file.
3. Write copy file
Use this structure for each pin:
Title: (100 chars max; front-load keywords)
Description: (500 chars max; paragraph + blank line + hashtags — paste whole block into Pinterest)
Topics: (Tagged topics — search Pinterest’s dropdown and pick closest matches; not free text)
Include at top of file:
- Destination URL:
https://www.babypickr.com/blog/{slug} (import SITE_ORIGIN from @/config/seo-metadata in app code; hardcode same origin in .mjs generators)
- Suggested board name
- Global tags + topics (shared across pins)
- Posting order
4. Verify before handoff
Copy writing rules
- Title: Keyword + year when relevant + hook ("Top 12 Picks", "by Situation", question form)
- Description: Lead with search intent, name 2–3 products, mention what's inside the guide, end with BabyPickr; add a blank line, then 8–12 hashtags (broad + specific)
- Tagged topics: Pinterest’s dropdown only. Search for the closest match to each suggestion below (e.g. “Parenting”, “Running”). Skip any that don’t appear; pick 2–5 relevant ones per pin.
Avoid em dashes and double hyphens in copy (same as blog voice).
Category-specific notes
| Blog type | Hero | Pin emphasis |
|---|
| Stroller travel (Disney, flying) | Theme park / hero photo | Rankings + rules + rent vs buy + flying |
| Bottles / feeding | Product flat lay or kitchen | Ranked #1/#2/#3 (proven high CTR) |
| Cribs / car seats / monitors | Nursery or product | Ranked + situation ("small apartment", "compact car") |
| Registry / checklist | Neutral lifestyle | Budget tiers, "what you actually need" |
When a blog has no hero yet, add one to lib/blog/heroImages.ts and public/blog/ before designing topic-cue pins.
Reference: Disney World pin set
Folder: marketing/pinterest/best-strollers-disney-world/
Six pins for best-strollers-disney-world:
| File | Angle |
|---|
pin-1-ranked | Hero + #1 Libelle / #2 YOYO3 / #3 Minu V3 + "Which stroller won #1?" |
pin-2-31-inch-rule | Hero + "Most Parents Miss This Disney Rule" |
pin-3-rent-or-buy | Hero + Rent vs Bring + "$200" |
pin-4-flying | Travel header (no castle) + 3 carry-on strollers |
pin-5-wagon-rejected | Hero + "Disney Rejected Our Wagon" + allowed picks |
pin-6-by-situation | Hero + 4 situation rows |
Copy: pins-copy.txt in the same folder.
When adding pins for a new blog, create marketing/pinterest/{slug}/, copy the Disney generator structure, and swap products, headlines, and hero path.
Additional resources