A college student’s app was updated with “minor UI improvements” and came back as “the most slop-coded user interface I have seen” — the output of an AI agent handed a redesign. The essay is a field guide to the tells: the visual and textual habits large language models fall into when nobody with taste does a pass over the result before it ships.

The tells

  • Gradients in every available slot, with purple as the default. “Slop cannons LOVE purple for some reason.”
  • Colour that means nothing. No dominant/secondary/accent hierarchy — just a screen of hues that differ from each other for the sake of differing.
  • Pulsing badges. The college app’s digital ID has a pulsing “active” indicator, but the app logs you out when the ID is inactive, so the badge can never report anything. The same screen puts a “verified” badge next to the college logo: “If I were forging my digital ID, would I deliberately add ‘unverified’?”
  • “Fingernail cards” — small rounded cards with a thumbnail-sized notch. Not ugly alone; emitted by every model in every context, which is what makes them read as slop now.
  • Font defaults and decoration: Inter for most things, JetBrains Mono the moment a project smells technical, plus // separators wherever a word looks like jargon.
  • Prompts leaking into the product. Told to unify three campus apps, the agent shipped the slogan “one campus. one app.” Another project got “Built with Hugo. Written from Neovim” printed on it — “no one gives a shit where I write it from.” The README version: “Built with Modern CPP 20 features.”
  • No variation in design language: glassmorphism, or brutalism that looks identical across every project that tries it.
  • Copy written as a landing page instead of a tool — “Elevate”, “Seamless”, “Next-Generation”, “Supercharge”, “Unleash”, “Empower”, and “Welcome to your Dashboard, [Name] ✨”.

The author is not arguing against vibe coding; their own site is vibe coded and they think it looks fine. The complaint is narrower and harder to argue with. Slop is what happens when the agent’s first draft is the product. No single item on the list is fatal — a stray gradient, one redundant badge — and the slop feeling is the sum of them.

The 163-comment thread on Hacker News is mostly practitioner material: the prompt rules people use to suppress the tells, a mechanism for why the tells exist, and a live disagreement about whether any of it matters.

What the thread adds

  • minimaxir — the blunt countermeasure: “People don’t realize that you’re allowed to tell LLMs/agents ’no.’” Their examples: “NEVER use serif fonts.”, “Use this color palette with a white-dominant background”, “Remove all non-salient text from this app.” The framing is that “LLMs/agents are not your coworkers” and “you’re encouraged to be picky.” In a reply they add the distinction from the old “AI can’t do hands” problem: this one is fixable with a follow-up prompt.
  • jph — what those rules look like written down: lead with a newspaper-style summary, focus on reader benefits, then “No tech stack”, “No counts”, “No special formatting. Do not bold, not italic, not bullet lists”, “No passive voice.”
  • pointillism — where the rules live: “my agents.md says ‘If I see indigo-500 anywhere in your code I will fucking kill you.’”
  • weakfish — a name for the mechanism the essay calls chat context: “the robot over-indexing on some part of the prompt and leaving comments places.” Instruct it to prefer integration tests with TestContainers and it starts writing “Real services, no mocks” into every new test — “and yes, I have a line in my *.MD saying not to do that.” JoshTriplett supplies the pattern name for the human version: “SuspiciouslySpecificDenial.”
  • unholiness — a theory, offered as one: “lots of AI tells these days are leaks from the ai/writer connection into text for the reader.” Their reading is partly reinforcement learning against the wrong reader (“I did it! Pick me!”) and partly thinking tokens surfacing into finished text, with phrases like “Here’s the argument, in plain terms” and “It’s not just X, it’s Y” as the residue.
  • mjr00 — why a list of small things is the right unit: from music, “there’s no one single big trick that turns a song from bad to good: there’s 100 tiny small tricks that add up.” A casual listener just says “it doesn’t sound right” — the same feeling a user gets from fifty small misses.
  • vmg12 — a tell the essay misses: all-caps, with Anamon adding the bad kerning that usually comes with it.

Where the thread pushes back

  • zinoc — the Bootstrap analogy: the sudden spike of same-looking sites was annoying, but it was “a tremendous step forward in usability and accessibility, and well worth the initial wave of cookie cutter websites.” voidhorse replies that the analogy breaks: slop is “a set of accidental commonplace LLM tendencies, not designed for humans,” pointing at white space, legibility and contrast.
  • BeetleB — “As someone who didn’t like the UI trends pre-LLM either, I simply shrug. Trading one crap for another… I’m not sure the AI UIs are worse than the median that was out there.”
  • bichiliad — the first pass from an agent is sloppy, but this is fixable inside the loop: “I was surprised at how far I could get with some directed iterating.”
  • tptacek — a large part of the list is just what “me, a non-frontend person, building any kind of web frontend at all” looks like, “so I wouldn’t sweat it too much” — plus the correction that an inactive student is one who is enrolled but not currently attending classes.

The question the thread kept asking

How do you get a good interface out of a model in the first place, without hand-describing every element? uxhacker proposes forcing a process — “brand guidelines, followed by building wireframes, followed by merging the two together. Think of it like chain of thought but for something visual.” nacozarina names the gap from the other side: “More guidance is needed on how to efficiently prompt an LLM to generate a correct UI… The contrast with server-side code generation is stark.” The closest thing to a working answer in the thread is vallerie’s: have the agent put all user-visible text into a translation file, “and then go through and edit said prose as a human.”

HN handles are pseudonymous and the site publishes no per-comment scores, so the ordering here is HN’s own ranking, not a vote. This is a slice of a 163-comment thread, not a consensus.