DEV Community

Alexander Mia
Alexander Mia

Posted on

I Got Sick of My Claude Code UI Slop, So I Crystallized It into a Go CLI

Every time I asked Claude Code to "build me a landing page," I got the same page back.

Centered hero. Inter font for everything. Maybe Space Grotesk if it felt artsy. A purple-to-blue gradient on the H1. A small pill badge floating above the headline ("New," "Beta," "Now with AI"). Three identical feature cards underneath, each with a Lucide icon on top, usually zap, shield-check, sparkles. A numbered 1-2-3 steps row. Glassmorphism on the nav. shadcn/ui everywhere. Dark mode with grey-on-darker-grey body text that fails contrast checks but "looks clean."

After about the twentieth one I started seeing it in my sleep. So I stopped complaining and built a tool.

uislop: a Go CLI that scores how AI-generated a page looks

It takes a URL, fetches the HTML and linked JS, runs a pile of regexes against it, and prints a single number between 0 and 100.

$ uislop https://some-ai-startup.ai
  font:Inter            hits=12  weight=2  add=24
  color:purple          hits=8   weight=3  add=24
  color:gradient        hits=14  weight=2  add=28
  css:shadcn            hits=4   weight=4  add=16
  icon:svg_lucide       hits=11  weight=2  add=22
  layout:centered       hits=7   weight=2  add=14
  layout:allCaps        hits=9   weight=1  add=9
  ----
87
Enter fullscreen mode Exit fullscreen mode

0 means "looks human-built or pre-2022." 100 means "this was vibe-coded last Tuesday."

Why Go? Same reason I defaulted my new projects to Go. One binary, runs anywhere, no virtualenv, no dependency drift. I can scp it to anything and grep the entire web.

The signals I crystallized

After eyeballing a few hundred AI startup landing pages, the patterns are weirdly consistent.

Fonts

  • Inter on literally everything
  • Space Grotesk when feeling fancy
  • Geist Sans / Geist Mono in the year-of-Vercel
  • Instrument Serif for one italic word in the H1 ("the only ~platform~ you need")
  • CameraPlainVariable served from cdn.gpteng.co, basically a Lovable fingerprint

Colors

  • VibeCode purple (#8b5cf6, #7c3aed)
  • Gradients on the H1, the CTA, the icon backgrounds, the nav border, everywhere
  • Dark mode with bg-zinc-950
  • Body text at text-zinc-400 over bg-zinc-900, 3.8:1 contrast, fails WCAG, "looks clean"
  • Soft colored glows behind every primary button

Layout

  • Centered hero with max-w-3xl text-center
  • Tiny pill badge above the H1 (rounded-full bg-primary/10)
  • Three feature cards, grid-cols-3 gap-8, each with an icon on top
  • Numbered 01 - Sign up / 02 - Get started / 03 - Win steps
  • All-caps section labels with tracking-wider
  • Stat banner row ("10k+ users," "99.9% uptime," "$0 cost")

The icons

Always Lucide. Always the same five: zap, shield-check, bot, sparkles, rocket. If a page has all five visible above the fold, it is a tell.

The CSS giveaways

  • shadcn primitives in the bundle
  • backdrop-blur-md bg-white/10 on the nav
  • Tailwind utility soup
  • cdn.gpteng.co in the asset URLs

What I learned shipping it

A few things surprised me.

  1. The signal is loud. I expected to need ML. Regex on the HTML and one pass of linked JS gets you to 90%+ accuracy on the obvious cases.
  2. Geist Sans skews the score harder than I thought. Half the false positives are real human-built sites that just happen to use Vercel's font.
  3. The pattern travels. Once you have the score, you start seeing it everywhere. Half the recent YC batch lands in the 80s.
  4. The cure for being part of the problem is to look at your own page. Mine scored 72. I shipped the tool anyway.

What this is and is not

It is not a tool to shame anyone. Shipping anything is hard. If shadcn + Lucide + purple gradient is what gets you to revenue, ship it.

It is a forcing function. When the default output of every model converges on the same aesthetic, "looks like everyone else" becomes the new "looks unstyled." The score is just a mirror.

One weird trick to drop your score: swap Inter for a real typeface, pick a color that is not on the violet wheel, and delete one feature card. Three minutes, ten points off.

Top comments (0)