Playground · Personal Project
Primo Posters is my own Etsy shop, selling minimalist digital-download posters. Every listing used to mean the same manual slog: export the design at four print ratios, drop the artwork into a stack of Photoshop mockup templates by hand, write the title, tags and description, then build the listing on Etsy piece by piece.
This pipeline automates the whole path from a finished Illustrator file to a draft Etsy listing. It's built with Claude Code driving real desktop apps (Illustrator and Photoshop via AppleScript), plus a Node.js orchestrator that watches for new designs, and Claude Code again, run headlessly, to write listing copy straight from the artwork itself.
It's grown past just the export pipeline: an audit script checks every live listing for inconsistent titles, tags and stale sizing; a bulk fixer applies the suggested corrections; and a sales report pulls real views, favorites and revenue per listing. Once a listing actually goes live, not at the draft stage, it also posts the gallery image straight to Instagram, Facebook and Pinterest, reusing the same AI-written title and description as the caption. A local dashboard runs the whole thing from one page, no terminal required.
One finished poster, built in Adobe Illustrator.
The orchestrator watches Design/ for a new or re-saved file and kicks off the pipeline automatically.
One Illustrator script exports a 300dpi JPEG for every aspect ratio: 11×14in, 4:5, 2:3, ISO.
Photoshop swaps the new artwork into every gallery/room mockup template via Smart Objects.
Claude Code, run headlessly, writes the title, tags, description and structured Etsy properties straight from the artwork.
Files, mockups and copy come together into a draft listing, ready to review and publish.
Instagram, Facebook & Pinterest, once published on Etsy. The gallery image and AI-written copy get posted automatically, not at the draft stage.
Bauhaus Circle Stripes is a real, live listing. See the shop at etsy.com/shop/PrimoPosters.
Got a question or a cool idea? Let’s talk.