I am a backend developer. Eight-plus years of Laravel, queues, schema design, and API contracts, and for most of that time my honest relationship with UI design was: copy something that looks fine, tweak it until it stops looking fine, ship it anyway. What changed that was not a burst of talent. It was installing two design skills into Claude Code, and here is the claim I actually want to defend: these skills did not make me a designer. They made design decisions inspectable. Numbers instead of vibes. And I can prove it with a commit message.

The Two Skills Doing the Work
My Claude Code setup has two design skills installed:
- frontend-design — aesthetic direction. Typography, layout, color, and the discipline of making choices that do not read as templated defaults. My project's permission allowlist literally contains
Skill(frontend-design)because I invoke it that often. - impeccable — the critic. It audits and polishes: visual hierarchy, accessibility, contrast, spacing, responsive behavior, focus states, tap targets, motion.
The division of labor matters. One skill proposes a direction; the other interrogates it. Running only the first gets you prettier output. Running both gets you output you can defend, which is the difference between decoration and design. I compared the strengths of the critic side in more depth in my review of the impeccable design skill.
The Proof: A Redesign With Receipts
In July 2026 I shipped a token-driven redesign of every blog surface on this site: index, category, tag, search, single post, cards, pagination. The commit message reads like a design audit because that is literally how the work happened. A few specifics, all of them things I would never have caught on my own:
The brand green failed contrast, and I had never checked. My brand color, #38D39F, had been carrying white text on buttons across the site for years. Measured: 1.9:1. WCAG minimum for normal text is 4.5:1. The skill did not say "consider accessibility"; it computed the ratio, declared the failure, and proposed a theme-dependent fix: a dedicated --blog-on-link token so the brand fill carries near-black ink where needed, landing at 10.0:1 in dark mode and 5.8:1 on interactive elements. The commit message states the design principle I have now adopted wholesale: contrast is measured, not assumed.
A shared partial was quietly broken in one theme. The blog's pagination partial is shared with my forum shell, which is hardcoded dark with no light-mode variants. In light mode, pagination links rendered at 1.79:1, essentially invisible, and nobody had ever reported it because nobody could see the links well enough to complain. The fix was a .theme-dark class that opts a subtree into the dark token ramp regardless of the page theme. Finding that required tracing which templates include which partials across two features. That is exactly the kind of cross-cutting audit a human skips and a skill does not.
Typography became a system instead of a pile. The redesign replaced ad-hoc sizes with a fluid clamp() type scale anchored at 390px, 768px, and 1440px viewports, and rebuilt the duplicated newsletter CTA as one component with a real 44px tap target and a visible focus ring. The old newsletter widget was hardcoded dark and rendered as a black slab on light-mode pages; it also carried a backdrop-filter blurring an opaque background, paying a compositing cost for an effect nobody could see. The skill flagged both.
The mechanism underneath all of it: a semantic CSS custom-property ramp (--blog-* tokens for surfaces, ink, lines, interactive states) exposed to Tailwind, so one set of classes renders correctly in both light and dark themes. Body copy targets AAA contrast; everything else targets AA. Those are testable claims, which is the whole point.
What Actually Changed in My Process
Before the skills, my design process was: build it, squint at it, adjust, repeat until deadline. Now it looks like this:
- Tokens first. Define the color ramp and type scale as custom properties before touching any template. Every later decision becomes a token choice, not a one-off.
- Direction pass with frontend-design: layout, hierarchy, and the explicit instruction to avoid defaults that make every AI-built page look identical.
- Critique pass with impeccable: contrast ratios computed, tap targets measured, focus states verified, both themes checked.
- Browser verification at three widths. Claude drives the actual browser and checks desktop, tablet, and mobile, the same rule I have always enforced on client WordPress work, except now it happens every iteration instead of once before launch.
The full pipeline from a design file to production code is its own topic; I documented it in my design-to-code workflow with Claude Code, and there is a broader tour in the designer's guide to Claude Code.
The Honest Limits
Three things the skills have not fixed:
- Taste is still mine. The skill can tell me 1.9:1 fails and propose alternatives. It cannot tell me whether the site should feel editorial or technical. When I give it no direction, I get competent, forgettable output.
- Brand identity needs a human anchor. The
#38D39Fgreen, the Instrument Sans / DM Serif Display / JetBrains Mono font stack: those were my decisions. The skills work within an identity far better than they invent one. - It will over-polish if you let it. Left unchecked, the critic pass keeps finding refinements forever. I stop at "measured claims verified"; chasing the last 5% is procrastination wearing a design hat.
Should Backend Developers Bother?
Yes, and here is the reframe that makes it work: stop thinking of it as "AI makes my UI pretty" and start thinking of it as "design review as part of the toolchain," the same way Pint formats my PHP and PHPStan catches my type errors. A measurable design defect (a 1.9:1 button, a 32px tap target) is now a build-quality issue in my workflow, caught before commit, not after a user complaint. Discoverability of features like skills is its own problem, which I wrote about in Claude Code features most developers never find.
The blog you are reading right now is the before/after, and at project scale the same loop does more work than it can on a single page. Several of the client sites and product UIs on my projects shipped through exactly this token-first, critique-second process.