Lab

The Cozy Bow Company, an almost-autonomous Etsy shop

An AI print-on-demand shop where every stage runs on its own, except the one where I approve each design from my phone.

Visit the Etsy shop ↗
A light pink sweatshirt laid flat on a red plaid blanket, printed with a highland cow in a Santa hat and the words "Merry Mama"
Status Live
Started September 2026
Role Producer, creative director, and builder
Stack Claude Code · Codex CLI (GPT Image) · Runway · Seedance 2.5 · Kling O3 Pro · Real-ESRGAN (Upscayl) · Apple Vision · Cloudflare Workers · Cloudflare D1 · Cloudflare R2 · Cloudflare Access · Printify API · Etsy Open API v3

The brief

A seasonal print-on-demand shop (sweatshirts, tees and mugs) in one consistent “coquette cozy” style: soft bows, pearls and hearts on cozy Christmas and winter motifs. It’s a side project, so it has to run on very few hours. Everything is automated except the creative call: I approve or deny every design.

I wrote the plan on September 27. The first listing went live the next day, and the shop passed 80 live listings in its first week.

A grid of 24 approved designs: highland cows, nutcrackers, gingerbread, snowmen, a pink vintage truck, ghosts and fall critters, all in blush pink and cream with bows
Designs I approved in the first week. One style guide is appended to every prompt, so they read as one shop.

How it works

Most of this was built with Claude Code as the engineer, from one shared instruction file and a running task list. Here is the pipeline, stage by stage:

  1. Concepts. One line each: subject, phrase, lettering, season. A banned-terms list blocks films, characters, brands and celebrities.
  2. Design generation: Codex CLI. The original plan was to pay for OpenAI’s image API. Instead, a script runs the official Codex command-line tool on my ChatGPT plan, which has GPT Image built in. One concept per run, transparent PNG out, prompt saved next to the image. After 19 images it had used 1% of the weekly limit.
  3. My review queue. Designs go to a small phone app on Cloudflare (Worker, D1 database, R2 storage, locked behind Cloudflare Access). More on this below.
  4. Print files: Real-ESRGAN. Approved art is cleaned up and upscaled 4× on my Mac (Real-ESRGAN through Upscayl’s engine) to a 300 DPI print file.
  5. Automated QA: Codex vision. A second Codex pass reads every lettered design back against the exact phrase and looks for stray marks.
  6. Products: Printify API. One draft each for sweatshirt, tee and mug, with real base costs pulled back in.
  7. Photos. AI generates a blank scene (an empty sweatshirt on a plaid blanket, a mug by the fire), then code places the exact print file on it, with the fabric’s shading. Each photo has to pass a placement check against Printify’s own mockup before it’s uploaded. Apple Vision finds the mug in each scene so the print can be wrapped around it.
  8. Listing copy: Codex. Title, 13 tags and description, checked in code against Etsy’s limits, my SEO rules, the banned-terms list, and the AI disclosure line every listing must carry.
  9. Publishing. A scheduled Cloudflare Worker publishes up to 8 listings a day through Printify, then sets the Etsy-only fields (shipping profile, attributes, section) through Etsy’s API. It also logs daily views per listing.
Five listing photos for the Merry Mama design: a close-up of the print, a sweatshirt on a model with her face cropped out, a flat lay, a details card, and a mug by a fireplace
One design's photo set. Every scene is AI-generated blank; the print is the real file, placed in code. The model is AI-generated.

Video

The newest piece. Etsy allows one short video per listing, so I built a recurring model, Claire, from a written brief and had Runway turn it into a character sheet. She’s AI-generated, and every clip with her says so.

An AI-generated character sheet of a woman with long wavy hair and a pink bow, in a pink sweatshirt and jeans, shown front, back, side and close-up
Claire's character sheet. AI-generated; I approved it before any video used her.

The finished clip came from a Runway workflow I built: character sheet plus living-room reference into Seedance 2.5, rendered silent. The video models’ own audio was poor, so a script lays sound effects from Runway’s generator (fire, mug, sip) on at set times and burns in the “AI model” label. It’s live on the Merry Mama sweatshirt listing.

The listing video. AI-generated model, Seedance 2.5 via Runway, sound mixed in code.

Where I sign off

The approval step is required, not a nice-to-have. Etsy requires the seller to be the creative author of AI-assisted designs, so every approve, deny and regenerate note goes into a log that’s never edited or deleted. That log is the authorship record.

Phone screenshot of the review app showing a highland cow design on a light pink swatch, with Deny, Regenerate and Approve buttons
The review app: one design at a time, previewed on the real garment colors.

Approve, deny, or regenerate with a note. The note goes back to Codex, which rewrites the concept and makes a new version; the app shows it next to the old one. My first review pass: 4 approved, 1 denied, 3 sent back.

I also sign off on Claire’s look, every video, prices, and anything that changes the public shop.

What broke

  • Letting AI redraw the design. My first lifestyle photos had the model draw the product with the design on it. The design drifted: the face, the scarf, the letter shapes. That’s why every scene is now generated blank and the real print is placed in code.
  • The style went glossy. The first batch drifted semi-realistic even when the prompt said “doodle.” A written style guide, appended to every prompt, got the next test to 8 of 8 on-style.
  • Off-center prints. A shadowed sleeve threw one print about 11% off-center. Scenes now have to pass a symmetry check, and a separate check compares each photo’s placement against Printify’s mockup.
  • Silent failures. Etsy quietly drops alt text sent with an image upload, so none of my photos had any until I caught it. A database sync reported success while syncing nothing.
  • Too much, too fast. I published 45 listings on launch day. Etsy flags sudden bursts of AI-heavy listings, so the publisher now caps at 8 a day.
  • Listings don’t sell themselves. By the end of week one there were 85 live listings. The pipeline built the shop; it didn’t bring anyone to it. So the next build was Pinterest pins, made by the same pipeline.
  • Video models have opinions. Seedance refused Claire’s face as a “public figure,” so her reference clips were made in Kling instead. Seedance also redrew the cow on her sweatshirt in a simpler style; my automated check failed it. I approved it anyway, because it still reads as the same design. In an earlier test that started from a frame with the exact print, the art held up in every frame but the camera drifted.
An earlier test: the first frame has the exact print composited in, then Seedance animates it. The art holds; the camera doesn't.

What’s next

Script the video recipe so every design gets a listing video, start Etsy Ads, and run the weekly numbers to put budget behind the listings people actually click on. In January the whole pipeline pivots to Valentine’s Day and Mother’s Day.

← All Lab projects