For the past few weeks I’ve been quietly running a side project that has nothing to do with Swift, Rust, or calm software: a visual brand on Pinterest called Kuroneko Art. In the last 30 days it crossed one million impressions and 14,800 saves. This post is about why I started it, and what a developer’s approach to a content channel looks like.
The problem: no pricing power
Before Pinterest, I spent months submitting AI-assisted illustrations to stock image platforms. The results were sobering: tens of thousands of uploads across several platforms, and monthly earnings that wouldn’t cover a decent coffee.
The issue isn’t that any single image sells poorly. It’s structural: on a stock platform you have no pricing power. The platform owns the audience, sets the price, and decides whether your work is even shown. If they don’t sell it, there is nothing you can do. Uploading more only makes you busier, not better positioned.
The conclusion I reached: stop renting distribution. Build an audience I own, even a small one.
The bet: Pinterest is a search engine, not a social network
Pinterest gets grouped with social media, but it behaves much more like visual SEO. People come with intent — “dark anime wallpaper”, “japanese aesthetic” — and content surfaces through search and recommendation for months after publishing. Nothing depends on being followed; my account has all of 140 followers, and that number barely matters. Saves are the real currency: each save teaches the algorithm who else should see the image.
For a solo maker, that’s the same compounding logic that made me choose Astro and SEO for this blog. Publish durable assets, let search do the distribution.
Engineering the boring parts
The part I actually enjoyed: treating channel operations like software.
- Watermarking — a small Python script stamps every image with the brand seal before upload, consistent scale and position.
- Publishing — a documented, semi-automated flow handles titles, descriptions, board routing, and AI-content labeling, then writes every pin back to a ledger file in git.
- Analytics archiving — snapshots of impressions, saves, and clicks are pulled on a schedule into CSVs, so decisions are made from data in the repo, not from squinting at a dashboard.
None of this is sophisticated. But it means publishing 10 images costs minutes, not an evening, and every decision leaves a paper trail.
Honest labels
Everything on the account is AI-assisted artwork with human curation, and it’s labeled as such on Pinterest. The curation is the actual work: deciding what fits the brand, what meets the quality bar, and what a board should feel like. The audience follows the taste, not the tool — hiding the tool would just be borrowing trust I’d have to pay back later.
What’s missing: the landing page
A million impressions produced embarrassingly few outbound clicks — because there was nowhere to click to. Pins had no destination links, and the profile pointed at this very developer blog, which is a confusing landing page for someone who came for anime wallpapers.
So the funnel finally has a proper endpoint: art.kuroneko-cmd.dev — a single-page gallery of the most-saved work, built with Astro in an afternoon, deployed on Vercel. Pinterest traffic now lands on a page that matches its intent, and this blog stays what it is: field notes on building things.

Takeaways
- Distribution compounds. A searchable channel (SEO, Pinterest, YouTube) keeps paying long after the work is done. Feeds don’t.
- Own the endpoint. Any channel you don’t control should point at something you do control.
- Engineer the repetition. If a channel requires daily manual chores, you will quit. Scripts and ledgers are what make consistency cheap.
The experiment continues — next up is wiring destination links and actually measuring the funnel. If you’re curious about the visual side, the gallery lives at art.kuroneko-cmd.dev.