Claude AI Design: Blog Redesign with a Single Sentence Prompt
3 Designs, 1 Prompt – How Tailwind Constraints Make AI Design Concrete
Here's the translation: I'm a developer, not a designer. devmaker.net had a solid stack – Wagtail, Tailwind CSS, DaisyUI – but the design was what you get when a backend developer takes DaisyUI defaults and hopes it looks good enough. It was functional. It wasn't bad. But it also wasn't mine.
The question was: How do you, as a solo developer without a design background, achieve a professional, characterful design – without learning Figma, without paying a freelance designer, without spending weeks experimenting?
The answer was surprisingly short.
The tool: claude.ai/design
claude.ai/design is Anthropic's design tool, directly integrated into claude.ai. The key difference from other AI design tools: it can work with real project files. Instead of a text description, you provide your existing templates, your CSS configuration, your component system. The tool then understands what you already have – and works with it rather than against it.
For me, this meant uploading my Tailwind config, DaisyUI setup, and my existing Django/Wagtail templates. After that, the AI knows which classes are available, which components exist, and in what context the design needs to land.
"The Prompt"
Here is the translation: "This was my complete initial prompt:"
Improve this tech blog. It uses Tailwind CSS with DaisyUI.
One sentence. No moodboard. No color palette. No reference screenshot. Along with that, I uploaded the template files and the design system – the real work was embedded in these constraints, not in the prompt.
**The Three Follow-Up Questions**
Instead of diving straight in, Claude Design asked questions. Three targeted questions:
- Hi-Fi or Lo-Fi Design? → Hi-Fi
- Interactive Prototype? → Yes
- Theme preference? → (Selection from suggestions)
Here is the translation: This is the moment where the tool shows that it works professionally: It asks for what it needs, instead of hallucinating assumptions. A lo-fi wireframe and a fully developed hi-fi design are completely different deliverables – the question makes sense.
Three designs, one decision
Claude has presented three fully developed hi-fi concepts – all based on my existing Tailwind components and DaisyUI classes:
- V1 · Terminal Editorial – Editorial layout with CLI motifs, code snippets as hero element, serif typography for decks. Dark, technical, characterful.
- V2 · Mission Control – Dashboard aesthetics, dense tables, status pills, system sidebar. More app than blog.
- V3 · Magazine Stack – Indie zine style, large serif display font, numbered articles, drop caps. Editorial, but different.
"No generic Bootstrap output. No interchangeable layouts. Three real design directions with a clear identity."
Why Terminal Editorial?
Terminal Editorial won because it fits my blog the best: it feels like a tech blog from someone who actually lives in the terminal. CLI prompts as navigation, cat featured/ as a kicker, ./read --post as a CTA button – that's not decoration, that's identity.
V2 (Mission Control) would be interesting for a monitoring dashboard, but too APP-like for a blog. V3 (Magazine Stack) was visually strong, but the indie-zine style doesn't fit the pragmatic, direct tone of devmaker.net.
From Design to Code: Claude Code Takes Over
Here the workflow comes full circle: The finished design from claude.ai/design was handed directly to Claude Code. Claude Code adapted the existing Wagtail templates, applied Tailwind classes correctly – without inventing new ones – and kept the DaisyUI components intact.
What surprised me: The generated templates were clean. No copy-paste CSS chaos, no inline styles, no class explosion. For comparison – this is what the original homepage looked like:
Here is the translation of the text into English:
{# Before: Standard Swiper Carousel + Grid #}
<section class="mb-12">
<div class="swiper w-full p-0 shadow-md hover:shadow-xl">
<div class="swiper-wrapper p-0 m-0">
{% for article in page.get_latest_3_articles %}
{% article_carousel_cards article %}
{% endfor %}
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
</section>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 gap-8">
{% for article in page.get_latest_articles %}
{% article_cards article %}
{% endfor %}
</div>
**Note:** The text consists primarily of HTML/template code, which is language-agnostic and does not require translation. The only translatable element was the comment `{# Vorher: Standard Swiper-Carousel + Grid #}`, which has been translated to `{# Before: Standard Swiper Carousel + Grid #}`. All other parts of the code remain unchanged, as translating code syntax or class names would alter its functionality.
Here is the translation: After that – the terminal editorial hero with CLI kicker and code frame:
Here is the translation of the text into English:
{# After: Terminal Editorial Hero #}
<section class="hero-grid px-4 sm:px-6 lg:px-10 pt-10 sm:pt-14 pb-10">
<div class="hero-head min-w-0" data-cat="{{ hero.category.slug }}">
{# CLI-Kicker: cat featured/slug.md #}
<div class="kicker-prompt mb-4 flex items-center gap-2.5 flex-wrap">
<span>cat featured/</span>
<span class="text-base-content break-all">{{ hero.slug }}.md</span>
<span class="cursor"></span>
</div>
<h1 class="display-title text-[clamp(2.25rem,4vw,3.5rem)]">
<a href="{{ hero.get_absolute_url }}" class="hover:text-primary transition-colors">
{{ hero.title }}
</a>
</h1>
</div>
{# CTA in terminal style #}
<a href="{{ hero.get_absolute_url }}"
class="btn btn-primary rounded-md font-mono normal-case h-auto py-2.5">
./read --post {{ hero.slug }}
</a>
{# Code frame as fallback when no hero image #}
<figure class="code-frame">
<header class="code-frame__bar">
<span class="dot dot--r"></span>
<span class="dot dot--y"></span>
<span class="dot dot--g"></span>
<span class="path">~/{{ hero.slug }}/README.md</span>
</header>
<div class="code-frame__body">
<pre class="m-0"># {{ hero.title }}
{{ hero.dek|truncatewords:18 }}</pre>
</div>
</figure>
</section>
Please provide the text you would like me to translate. So far, I can only see the heading **"Lessons Learned"** — which is already in English. Please share the full text you would like me to translate.
- Constraints are the key. Providing Tailwind + DaisyUI as input prevented Claude from drifting into the generic. "Make a cool tech blog" without context would probably have produced an interchangeable Bootstrap result. The existing files were the real prompt.
- Asking back > Hallucinating. The fact that Claude Design asked questions instead of just diving in drastically increased the quality. Hi-Fi vs. Lo-Fi is not a minor detail – it's the difference between a wireframe and a finished design.
- Three options is the right number. Not too many to feel overwhelmed, not too few to have a real choice. Each one had a clear identity.
- Design → Code Handoff works. The transition from claude.ai/design to Claude Code was seamless. No manual translation steps, no loss of interpretation.
- The quality of the generated templates surprised me. Clean HTML, correct Tailwind classes, no anti-patterns. This wasn't "just good enough to get started" – it was directly usable.
Conclusion
Here is the translation: claude.ai/design is not a magic button that creates a good design out of nothing. But if you bring an existing design system with you – Tailwind, DaisyUI, Material UI, whatever – it gets concrete. The workflow combining a design tool and a coding agent is a real game-changer for solo developers without a design background.
The result is this page here. And I would not have been able to achieve this quality on my own.