NanoBananaing Heroes
March 28, 2026
In our current age of AI coding, just because we can now does mean we should.
So, with that in mind, I decided this blog needed a brilliantly AI-focused publishing pipeline to generate new hero images when I didn’t already have one. Like this post!
I started a discussion with Claude about the brand and the site’s design. We decided we wanted vibrant, electric, colourful images that would stand out against the muted site background and pop in people’s feeds. We wrote a brief for Electric Dusk:
Cinematic still-life photographs of a single evocative object against a deep navy background (#0D1B2A), dramatically lit with electric coral (#FF6B4A) as the dominant warm glow, amber (#FFB845) on the brightest edges, and violet (#7B5EA7) fill light in the shadows. Each image is instantly recognizable as part of a series—product-photography quality, no text or people, pure object as visual metaphor. The overall mood is firelight in darkness: warm, dramatic, tactile.
Since Claude doesn’t have an image generation model, I fed that into NanoBanana, and we iterated to get to a more refined prompt that consistently got the look we wanted. Here’s an example:

That’s for the post The Code is not the Territory, which is a fairly abstract post about how we no longer need to care about the code our AIs generate. That’s an old maritime navigation device, which Claude suggested based on the post content. Claude turned this into a skill that it can run every time a new post is picked up without a hero image in the publishing automation.
Putting that all together, it now works like this:
- I write a post in Obsidian in my Drafts folder, on my MacBook or iPhone.
- When I’m happy with it, I move it into the Live Posts folder in the Obsidian Vault.
- That same Vault syncs to my Mac mini, where OpenClaw is running.
- An fswatch-daemon on that computer spots the new file and/or changes to existing files and then runs a script for publishing.
- If a new post is missing a hero image, OpenClaw reads it, then contacts me on a self-hosted Zulip instance in the appropriate channel/topic and suggests an object. We discuss it there, then it uses NanoBanana via the Gemini API to generate the image and display it to me. When approved, it updates the post.
- Finally, OpenClaw pushes the changes to GitHub (this blog runs on Astro), where Cloudflare picks up the push and publishes it live for all of you.
Yes, this is absolutely bonkers, completely unnecessary, and almost perversely overcomplicated and over-engineered. But now we can! So we should.
Subscribe to JayGoldman.com
Get occasional email updates when I write new posts or have things to share. Unsubscribe anytime.