How I Automated My 100 Influences With n8n

300 WPM
Powered by Spdrdr
0 / 0 words0m 0s remaining
Key Points

    My brain is not a filing cabinet. It’s more of a something that resemble a cross between a compost heap and God’s Own Junkyard — things go in, get tangled up with other stuff, and eventually something useful grows out of it. Pinterest is where most of that composting happens. I see something, I pin it, I move on. Months later, it resurfaces inside a piece of work for a client and I couldn’t always tell you where it came from.

    One of those piles (there are many, some in notebooks, others stuck to the fridge) has always lived quietly on Pinterest, which is fine, so long as you’re careful to navigate to deluge of AI slop. I wanted the good bits on my own site — a running feed of what’s currently grabbing my attention, updating itself without me having to think about it.

    So I built the laziest possible version. I pin something to the board. Half an hour later, it shows up on j-kindred.com/influences. I don’t touch anything in between.

    Here’s the plumbing:

    flowchart TD
        A[Pinterest board] -->|RSS feed| B[Schedule Trigger<br/>every 30 min]
        B --> C[Filter: only .jpg items]
        C --> D{Already seen?}
        D -->|Yes| Z[Ignore]
        D -->|No| E[Save to Pin Collector]
        E --> L{Loop Over Items}
        L -->|Each pin| F[Download image]
        F --> G[Resize to 900x900]
        G --> H[Commit image to GitHub<br/>assets/img/influence/]
        H --> Q[Queue Instagram Story<br/>via Buffer]
        Q --> R[Ping Discord]
        R -->|Next pin| L
        L -->|All done| M[Fetch current<br/>_data/influence.yml]
        M --> N[Prepend new pins]
        N --> P[Commit updated<br/>_data/influence.yml]
        H --> K[Jekyll rebuilds the site]
        P --> K
    

    The source is a Pinterest board

    All of this starts with one board: Influences — Kindred Studio. Pinterest gives you an RSS feed for every public board — yours, mine, anyone’s. The URL pattern is /username/board-slug.rss. n8n reads mine every thirty minutes and hands the new items down the pipe. No API keys, no OAuth dance, no custom scraper. A URL and a schedule. That’s the whole trigger.

    A small filter after the read throws away anything that isn’t a .jpg. Pinterest occasionally surfaces video or link pins, and I don’t want those in the grid.

    Deduping is boring but essential

    Early versions of this workflow re-committed the same images every thirty minutes. GitHub got cross. The site got confused. My commit history started looking confused and pretty unmanageable.

    The fix is a small n8n data table called Pin Collector. Every pin has a unique Pinterest URL, and the workflow checks that URL against the table before doing anything else. Already there? Nothing happens. New? It gets inserted and moves on.

    Deduping feels like overhead until you’ve watched your Git history eat itself.

    Two trips through the loop

    Once new pins are saved to the table, n8n loops through them one at a time. Each pin makes one trip on its own. When the loop finishes, the workflow makes one more trip to update the manifest.

    Trip one: the image (per pin). n8n downloads the full-size file from Pinterest, resizes it to a max of 900×900 (only if it’s larger — anything smaller is left alone), and commits the file to assets/img/influence/ in my Jekyll repo on GitHub. The filename comes straight from Pinterest’s URL, which happens to be a stable hash. Free uniqueness.

    Trip two: the manifest (once, at the end). Once the loop finishes, n8n fetches the current _data/influence.yml from GitHub, prepends the new pins to the top, and commits the file back as a single edit. The commit message writes itself — something like Add 3 new influences, or however many landed that run. If nothing new came through, nothing gets committed.

    Earlier versions rebuilt the whole file from the data table every time — delete the old one, write a fresh one. It worked, but the commit history doubled up: a remove old influences commit next to a Create new influence manifest commit, every single run, even when nothing had changed. Appending is tidier. One commit. A message that actually tells you what changed. Silence when there’s nothing to say.

    Jekyll does the rest

    Each run sends a handful of commits to main — one per new image, then one for the manifest. GitHub Actions picks up the last one and kicks off a build. The influence page loops over _data/influence.yml, drops the files into a five-column grid, and the front-end does a bit of colour sampling so each tile bleeds its dominant hue into the background behind it. Five minutes from pin to published.

    Then it goes a bit further

    The workflow has two tails I added later because I was there anyway.

    One posts the new image straight into my Buffer queue as an Instagram Story. One pings a Discord channel so I can see the whole thing worked. Neither is clever. Both are the kind of small, finicky task that would never happen if I had to do them by hand.

    Why bother

    Because the alternative is a CMS — a login, a cropping tool, half an hour of friction every time I want to share something I noticed. My AuDHD brain doesn’t do well with that kind of ritual. By the time I’ve opened the tab, I’ve lost interest in the thing.

    This workflow meets me where I already am. I’m on Pinterest anyway. The pin takes one click. Everything downstream is somebody else’s problem — even if that somebody else is a machine I built.

    There’s a bigger point in here about using n8n for clients, which I’ll come back to in later posts. For now, the principle: if a task is friction for you, it’s not going to happen. Build the plumbing that removes the friction, not a nicer-looking version of the friction itself.

    Photo of James Kindred

    Hi! I'm James Kindred. I wrote this!

    With over 25 years in design, branding and startups, I help businesses craft compelling identities, develop engaging assets, and build results-focused growth plans. I am AuDHD and bring my unique thought process to every project, ensuring that your brand is more than a logo. It's a reason to believe.

    More on This Kind of Topic