Skip to main content
DesignKey Studio

Claude Code for Designers

· Part 2 of 3

Generating design variations — the TJUG case study

Real prompts, real output, real mistakes. We asked Claude Code to generate variations of a countdown card for the Tampa JUG site. This is every step of what came back.

18 min read · Part 2 of 3

The Tampa Java User Group’s website has a countdown card above the fold. It was fine. “Fine” is where good design goes to die. We asked Claude Code to do something about it — not once, but across three rounds of feedback, on a real production branch. What follows is the whole loop, with the prompts in plain English and the results in screenshots.

What to look for as you read

This part is long on purpose. The goal is not for you to memorize anything — it is for you to see how a real design-exploration session feels: iterative, messy in the middle, and cheap to course-correct. The prompts are blue, the model’s work is on a dark background, and the mistakes are called out explicitly.

Round 1 — the first ask

The starting brief was intentionally loose. This is how designers talk to each other, and Claude Code handles it the same way any thoughtful collaborator would — it makes choices where you did not constrain it, and shows you the result.

Round 1 · initial brief

Can you create a new branch and there create five variations of the countdown card widget to improve UI and UX, so that I could pick the one that is the best and I like? Feel free to do additional research on the internet from the UI/UX perspective if needed.
Claude Code · what it did

1. Branched off main into feature/countdown-card-variants.

2. Created a preview route at /preview/countdown with a sticky filter bar.

3. Built five distinct variants: Glass Split, Poster Billboard, Ticket Stub, Editorial Magazine, Minimal SaaS.

4. Wired live Meetup data so the cards tick in real time.

5. Pushed the branch and reported the preview URL.

Thirty minutes from prompt to five rendered variants on a private URL. That part worked. Now the uncomfortable part — four of the five had the same bug, and the designer spotted it immediately.

The crop bug — what it looked like

Meetup serves event posters at roughly 1:1. Claude assumed 16:9, or portrait, or just picked aspect ratios variant-by-variant based on the layout shape. The result: the top and bottom of every poster got clipped. The TAMPA JUG logo and the speaker name were invisible on most cards.

First pass screenshot showing all 5 countdown variants with the event poster image cropped or cut off
The first pass, captured exactly as the designer saw it. Look at the posters — every variant clips the top or the bottom of the speaker photo.

Round 2 · direct feedback

not great, I think that you can do a better job. btw you see that the poster image doesn’t look great and looks cut off.

The feedback was perfect, actually

Five words — “not great, do a better job” — plus one concrete observation about the poster crop. That is exactly the shape of feedback Claude handles best: one vibe signal plus one specific defect. No essays, no mood boards, no attempts at diagnosis. The model’s job is to diagnose.

Claude’s read was almost correct. It identified that it had used aggressive cropping (object-cover) on 1:1 containers, switched to containing the image (object-contain) with a blurred backdrop copy to fill any letterbox, and applied the fix to all five variants in one pass. Then it reworked the visual direction on each, because the feedback was also about taste.

Round 2 — five better variants

The second pass was a rework, not a touch-up. Claude threw away the first five and replaced them with directions it described as “genuinely different UX territories”: Luma-clean, Ambient Hero, Console Dashboard, Magazine, Glass Widget. The crop fix was universal. The first real keeper appeared:

V1 Luma — clean white event card with square poster on the left and stacked info on the right.
V1 — Luma-card style. Clean white surface, contained poster, modern event-feed feel. The designer's favorite of Round 2.
The round-2 feedback loop, diagrammed
1

Designer reviews

Spots the crop bug in screenshots.

2

Feedback sent

"Not great, poster is cut off."

3

Claude reworks

Universal crop fix + five new directions.

4

Designer reviews again

Five better options, ready to iterate on.

Roundtrip time: ~25 minutes. In a Figma-only workflow the same rework is a full afternoon.

Round 3 — scaling to fifteen, on brand

Five variants is enough for a gut-check. Fifteen is enough to surface directions nobody asked for — the ones that surprise everyone and sometimes turn out to be the right answer. The next brief added a constraint the first round had been missing: stay on brand.

Round 3 · scale-up brief

Can you create and add 10 more variations? Also make sure that the variations follow the brand colors and colors that are used on the home page.
Claude Code · what it did before writing any code

Spawning a codebase explorer to audit the home page for the actual palette.

Found: #1E45D3 (primary blue), #1E59EB (deeper blue), #0A1531 (navy), #25292E (text), #676767 (body), #CDD4E6 (border), #F5F7FA (alt background).

Also found: signature radial-gradient that defines the site’s hero card.

Generating ten new variants now, strictly to these tokens.

Notice the diagnostic step

Claude did not just start writing code. It spawned a secondary exploration agent to find the actual brand tokens on the home page, then used them as constraints. When you ask for “brand-consistent” work, this is the move you want to see. If the model skips it, reject the output and ask for the audit explicitly.

Two of the new variants in particular showed what brand-consistent variety can look like — one leaning into the signature radial gradient, another into a dramatic neon treatment that stays within the palette:

V7 Split Gradient — brand radial-gradient panel left with oversized date, white panel right with poster.
V7 — Split Gradient. Uses the site's signature radial gradient but as a featured panel, not the whole card.
V9 Radial Hero — signature brand gradient background with event poster contained on the right.
V9 — Radial Hero. A more confident, hero-scale take on the same brand gradient.
V12 Neon — deep navy card with glowing brand-blue countdown digits and a poster frame.
V12 — Neon Glow. Same colors, completely different energy. Stayed in-palette while being visually the most dramatic of the set.

Round 4 — the detail pass

With fifteen variants on the table, the feedback shifts from vibe to detail. Some variants still had crop issues (Claude had applied the fix to some, not all). One was off-brand despite the brand audit. One was an idea that sounded clever but felt redundant next to the others.

Round 4 · specific fixes

V2 — image can be wider. V8 — image is cut. V13 — irrelevant.

Three-word feedback is a superpower

“V8 image is cut.” Claude reads it, reopens the variant, diagnoses the unclosed 1:1 crop issue, fixes it, and moves on. You do not need to write a ticket. You do not need to propose a solution. You name the variant, name the defect, send.

V2 Ambient Hero

Before

Poster anchored at ~400px max-width, felt small in a big dark card.

After

Grew to 560/640/720px across breakpoints. Now anchors the hero as intended.

V8 Announcement Strip

Before

Poster thumbnail still used the aggressive cropping.

After

Contain + blurred backdrop at 64px — no clipping even at strip-scale.

V13 Calendar Tile

Before

Felt redundant next to the other date-forward variants.

After

Removed. Blueprint became V13, Notification became V14.

The picking moment — V8 wins (surprise)

Here is the counter-intuitive part. The five most visually ambitious variants — Neon, Ambient Hero, Split Gradient, Glass Widget, Magazine — were beautiful, but beautiful is not always the answer. What the site actually needed was a low-friction prompt above the top nav that tells returning visitors about the next meetup and lets them dismiss it. That is V8.

V8 Announcement Strip — horizontal low-profile banner with poster thumb, title, inline countdown, RSVP button, and dismiss X.
V8 — the pick. An announcement strip with a 64px poster, inline countdown, RSVP button, and a dismiss X in the corner.

Round 5 · the next step

Can we add V8 on the landing page so that it sticks to the top above the top nav, and only gets displayed if there is an event scheduled on Meetup?

This is the moment the exercise stopped being exploration and started being production. Claude re-scoped the task automatically — made the root layout async so the server could check for an upcoming event, created a new EventAnnouncementBanner client component that hydrates from SSR and re-checks via the API, wrapped the banner and the header in a shared sticky container, and swapped overflow-x-hidden for overflow-x-clip because the old value silently breaks position: sticky inside it. That last detail is the kind of thing a junior developer misses. Claude did not.

The Tampa JUG home page with the announcement strip sticking above the navigation bar.
The shipped banner on the Tampa JUG home page. Only appears when Meetup has an upcoming event; dismissal persists in localStorage until a new event is scheduled.

The session, by the numbers

0

Variants generated

Across three rounds, all on brand.

~0 hrs

Total designer time

Including breaks, snapshots, and writing up.

0

Prompts sent

Plus three short "fix this" corrections.

0

Component shipped

V8, now live above the TJUG nav.

Compare to a Figma-only exploration

Fourteen exploratory variants, designed, built, wired to live data, and iterated on feedback — in a single afternoon. The same work in Figma is a week of static mockups that would then need a developer sprint to realize. This is the leverage the tool is offering.

Five prompt patterns that earned their keep

If you replay the session from the outside, the prompts that moved things forward fall into five patterns. Copy and adapt — these are the shapes we now reach for by default.

1

The open-ended ask

When to use: You want five to ten directions without pre-constraining taste.

Create [N] variations of [component]. Stay on brand. Render them on a preview page so I can compare.
2

The vibe + defect

When to use: First-pass feedback where something is off and you also spotted a concrete bug.

Not great — [one-word vibe judgment]. Also, [concrete defect] is visible in [variant].
3

The brand guard

When to use: Scaling up a batch and you want to lock palette drift.

Add [N] more variations. Use only the colors from [reference page]. Reject anything that introduces a new hue.
4

The three-word fix

When to use: Late-round cleanup where you know exactly what is broken.

V[n] — [defect in three to five words].
5

The production handoff

When to use: Exploration is done; it is time to wire the winner into the real site.

Add V[n] on the [page] so that it [placement]. Only display it when [condition].

More copy-ready prompts on the cheat sheet

The cheat sheet has seven patterns with full-length examples — generating variations, matching a Figma frame, auditing for accessibility, and more. Bookmark it; reach for it the first few sessions.

Next up

Part 3 — From 14 variants to a shipped component

Picking a winner, wiring it into production, and the pull-request discipline that makes AI-generated work safe to merge. Includes the PR review checklist we run before anything ships.