Stop looking like every other amateur SaaS.
AI slop cleanup
Anyone can vibe-code a landing page now. So a lot of SaaS looks the same: indigo glow, glass cards, emoji lists, fake “AI-powered” badges. Buyers skim past you. Investors have seen this movie. The danger is not ugly pixels. It is looking interchangeable.
Send the screenshots
WhatsApp or email — live URL plus the first screens buyers see: home, pricing, the app shell.
Book the cleanup call
Send the URL. We say if you blend in.
Live site or staging. We mark where you look like every other vibe-coded SaaS, and whether a cleanup pass is worth it before you raise, launch ads, or pitch the next customer.
Is this a rewrite?
How is this different from vibe-coding rescue?
What do we get after a cleanup?
What should I bring?
So what?
Looking generated is a sales problem.
Before AI, a mediocre site still meant someone paid a designer or fought CSS for a week. Now a founder prompts Cursor on Saturday and ships Sunday. Fine for a prototype. Fatal when you are asking for money next to three competitors who prompt the same model.
If the UI screams default, they assume the product is default too.
You disappear in a tab full of twins
Same gradient, same type pairing, same feature grid. Buyers flip tabs and cannot tell which one was you.
Trust dies before the demo
Operators have been burned by AI wrappers. Visual slop is the filter. You never get to the pitch.
The next prompt puts it back
Cleanup is not a weekend paint job. Someone has to own the look or Cursor paints indigo on Monday again.
The gallery
These defaults are why everyone looks the same.
Twenty-seven tells. Same fake product throughout — Harbor, a dock board — so you can compare. Left is what the model ships. Right is after someone edited. If your site matches the left column, buyers have already seen you somewhere else.
01 The indigo→violet gradient
That #6366f1→#a855f7 wash on buttons, glows, and hero backgrounds.
✨ AI-POWERED
Orders that ship themselves
Harbor reads your PO inbox and books the truck.
Launch Harbor →Purchase orders
Match POs to inventory
Harbor flags shortfalls before the dock call.
Open HarborWhy it looks generated. It is the Tailwind demo wash. Nobody picked it for Harbor; the model reached for the sample palette and called it done.
What to do instead. One brand color, flat. Keep gradients for progress or depth, not as a default “premium” coat of paint.
02 Gradient headline text
bg-clip-text on the H1 so the letters turn into a rainbow.
Fill every order on time
Harbor fulfillment
Fill every order on time
Harbor fulfillment
Why it looks generated. Harder to read, and every Cursor landing page does it. The words lose; the rainbow does the talking.
What to do instead. Solid ink on the title. Loud size and weight beat a fade that fights the contrast.
03 Warm cream “human” palette
Amber-50 / stone-100 / orange sold as cozy.
◐
Your cozy dock desk
Warm, friendly, and human — just like brunch.
Start cookingReceiving desk
Scan a pallet ID; Harbor updates the receipt line.
Open receivingWhy it looks generated. Prompt said warm and friendly. Model opened the caramel jar. Now every “human” AI app shares the same beige.
What to do instead. Write warmer copy. Keep the UI mostly neutral, with one warm accent only if the brand needs it.
04 Rainbow semantic chips
Every status gets its own candy pill — blue queued, green picked, amber held, red failed, purple “new.”
Wave lines
Wave lines
- PO-1842Queued · aisle B
- PO-1843Picked
- PO-1844Held · wait on ASN
- PO-1845Failed — short pick
Why it looks generated. Bootstrap leftovers on every row. Five loud hues, zero brand, and the eye has nowhere to land.
What to do instead. Status as plain text next to the PO. Bold the line that failed. No pill costume for “queued.”
05 Ambient dark glow
Midnight navy with a spotlight blob behind every card.
Today
412
lines shipped ▲ 9%
Today
412
lines shipped · +9%
Why it looks generated. The dark-mode “make it fancy” move. Adds zero information; just fog behind surfaces that did not need drama.
What to do instead. One flat background. Thin border or a small shadow if a card needs to sit above the page.
06 Serif swap mid-sentence
Italic display serif dropped into a sans headline for drama.
Cut pick time by 38% this quarter
Cut pick time by 38% this quarter
Why it looks generated. Looks clever for five seconds, then like two people arguing in one line. The mix reads accidental.
What to do instead. Same family the whole way. Stress a word with bold or break the line, not a second typeface.
07 Display serif as “premium”
Playfair / Lora on dashboards and UI body copy.
Open POs
86
Past due · 11
Open POs
86
Past due · 11
Why it looks generated. Model thinks serif equals expensive. On a dock board it reads like a wedding invite taped to a forklift.
What to do instead. A readable sans you actually chose. Save serif for long prose if you ever need it.
08 Strike / highlight for emphasis
Line-through or highlighter on words that are not edits.
The last WMS you will ever need
Warehouse ops for mid-size distributors
Why it looks generated. The sentence was weak, so the model doodled on it. Strike and highlight pretend the line already had a point.
What to do instead. Rewrite the sentence until it stands alone. Strike is for deletes; underline is for links.
09 Redundant eyebrow kickers
FEATURES above a list of features, on every section.
✦ Features
What Harbor does
✦ Benefits
Why teams switch
✦ Pricing
What it costs
Receiving
Scan ASNs; Harbor writes the receipt.
Picking
Wave by aisle; short picks surface first.
Why it looks generated. Adds nothing. Just the template breathing above a heading that already said the same word.
What to do instead. Kill it. Keep a kicker only when it adds a date, a category, or a real step number.
10 Full sentence at display size
A whole pitch at 72px with the tracking crushed.
We help ambitious supply teams orchestrate fulfillment at unprecedented velocity
Ship the short picks first
Harbor ranks lines by dock time, not by who yelled loudest.
Why it looks generated. Display size is for a few words. A full pitch that big is hard to read and looks unsure of the point.
What to do instead. Three big words on the line. Put the rest in a normal subline people can actually scan.
11 Bold sprinkled through prose
Random mid-sentence strong tags in every paragraph.
Our revolutionary platform helps ambitious warehouses move faster with AI-native workflows built for scale.
Harbor is a pick-and-ship board for distributors. It syncs with your ERP and updates lines when a carton seals.
Why it looks generated. If everything is bold, nothing is. The model highlighted words because it could not pick a point.
What to do instead. Zero or one bold hit per paragraph. Usually zero; let the sentence carry the stress.
12 AI copy rhythm
“Not just X — it’s Y.” “Say goodbye to…” Cute three-word stacks.
It's not just a WMS — it's a movement.
Say goodbye to chaos. Hello to flow.
Fast. Beautiful. Yours.
Harbor runs your dock board. Scan a pallet, confirm the wave, print the label — under two seconds on a 2020 laptop.
Works offline in the freezer aisle.
Why it looks generated. Smooth and empty. I have deleted this paragraph a hundred times on client sites that needed a real claim.
What to do instead. Say what it does, with a number if you have one. Talk like you would to a sharp peer.
13 Emoji on every line
Rocket / lock / sparkle before each bullet.
🚀 Why you'll love Harbor
⚡ Blazing pick paths
🔒 Secure by default
🎉 Delightful for crews
Why yards switch
Pick path under 90 seconds on average
Role checks stay on the server
Works with gloves — large tap targets
Why it looks generated. Borrowed friendliness. A dock tool does not need to wink; the icons are filler where a verb should be.
What to do instead. Drop them. Keep an emoji only when it is a real status people already understand (rare).
14 Glowing status dots
Pulsing green ● Ready with a halo.
Why it looks generated. On or off is a tiny fact. The pulse and halo are costume jewelry around a one-word state.
What to do instead. Flat dot and a word. No pulse. Skip the dot entirely if nothing is actually live.
15 Accent-bar list rows
Every bullet in a rounded box with a left color bar.
- Fast. Wave builds in under a minute.
- Clear. Short picks rise to the top.
- Quiet. No more radio pile-ups.
Why it looks generated. Docs callouts pasted onto a marketing list. When every row shouts important, none of them are.
What to do instead. A normal list. Save a callout box for one real aside, not every bullet on the page.
16 Icon tile feature grids
Rounded chips with a gear / bolt / globe above each feature.
Fast. Average pick confirmed in 1.4s.
Safe. Ownership checked before a carton leaves.
Simple. One board — no second app for the dock.
Why it looks generated. Looks designed in a thumbnail. The icons rarely match the words and eat space the copy needed.
What to do instead. Title and one sentence. Add an icon only when it carries meaning you would miss without it.
17 Glass cards and pill CTAs
Frosted pricing card, soft violet glow, gradient pill button — the Cursor-era SaaS default.
Harbor Pro
Popular$49/mo
Unlimited yards, glass dashboards, priority sync.
- ✓ Real-time dock board
- ✓ AI wave suggestions
Harbor Pro
$49/mo
Unlimited yards and 90-day history.
- Real-time dock board
- Wave suggestions from yesterday’s seals
Why it looks generated. Believable enough to ship, still a template: blur, glow, and a pill CTA instead of a surface you chose.
What to do instead. Opaque card, thin border, square-ish button. Price and features do the selling, not the frost.
18 Fog soft shadows
Huge blur, low opacity, shadow bigger than the card.
Wave card
floating in fog
Wave card
hairline + tight shadow
Why it looks generated. Looks floaty and maps to no real height. Everything sits in the same soft cloud above the page.
What to do instead. Use a 1px border or a tight shadow. Never larger than the thing casting it.
19 Nested radius mismatch
Same corner radius on the outer shell and the nested block. The gap pinches in the corners.
inner 24px inside outer 24px — corners fight
inner 14px = 24px − 10px gap — concentric
Why it looks generated. Inner radius should be outer minus the gap. Same token on both and the corner looks swollen or pinched.
What to do instead. Subtract once: inner = outer − gap. Or leave the inner surface square and stop nesting curves.
20 Clipped border on rounded wrappers
Radius on the wrapper, border on the child — corners vanish.
radius on shell · border on child — corners clipped
border + radius on the same element — stroke follows curve
Why it looks generated. Each line of code looks fine. The corner is broken anyway. Models do not look at the join.
What to do instead. Put border and radius on the same element so the stroke follows the curve cleanly.
21 Badge spam
New / Hot / Beta / Pro pills next to every title.
Why it looks generated. Fake buzz. After three pills I stop believing any of them, including the one that might be real.
What to do instead. Badge a real version or stock state. Marketing copy does not need a pill next to the title.
22 Blob mascot mark
Wobbly AI SVG creature as the product icon.
Harbor buddy
Harbor mark
Why it looks generated. Placeholder that never got replaced. First screen and you already look unfinished to a buyer.
What to do instead. A real mark. Refine a generated one until it is sharp, or ship a lettermark before a blob.
23 Hover scale on cards
Hover the door cards — Slop grows and lifts; Fix only changes the border.
Hover a card
hover → scale(1.25) + lift
Hover a card
hover → border color only · size stays
Why it looks generated. The card is not growing. You already know the cursor is there. Scale makes the UI feel like a toy.
What to do instead. Change background or border in about 150ms. Leave the size alone so the layout stays still.
24 Fake credibility stats
10k+ / 99.9% / 24/7 in the hero.
10k+
Warehouses
99.9%
Uptime
24/7
Support
Cartons sealed yesterday
2,416
Why it looks generated. Layout for social proof with no measurement behind it. One soft lie poisons the real numbers later.
What to do instead. One figure you can defend, or skip the row and say what actually shipped last quarter.
25 Ornamental 01 / 02 / 03
Huge low-opacity numerals on unordered feature sections.
Ingest
Innovate
Scale
- Connect ERP export
- Map SKUs to bin locations
- Run a dry-wave on one aisle
Why it looks generated. Numbers claim an order. Collaborate, Innovate, Scale has none; the digits are decoration.
What to do instead. Number install steps. For features, use headings and space instead of fake sequence.
26 Cards inside cards
Three borders deep until the content is a sliver.
Billing
Why it looks generated. Boxing is the only grouping move the model trusts. Nested boxes cancel out and waste width.
What to do instead. One surface. Space and a hairline divider inside. Extra box only for a real embed.
27 One spacing token everywhere
gap-4 / p-4 on related lines and unrelated blocks alike.
Yard profile
Site — Austin DC
Doors — 12
Danger zone
Delete yard
Yard profile
Site — Austin DC
Doors — 12
Danger zone
Delete yard
Why it looks generated. Spacing is how you show what belongs together. One value erases that and the page goes flat.
What to do instead. Tighten related lines. Open a bigger gap between groups so the clusters read as clusters.
How we keep you from blending back in.
Choose, then decorate
If you cannot say why a color or typeface is there, it came from the model. Delete it or own it.
One accent is enough
Pick a color. Use it rarely. The page should sound like one person wrote it.
Size and space do the ranking
Big thing is big. Body is body. Stop painting words and swapping fonts mid-line to fake emphasis.
Delete before you add
Most “design” passes are subtraction. Leave what has a job.
Numbers beat adjectives
“38% faster picks” beats “blazing fast” with a rocket emoji. Every time.
Stop spraying signals
Badges, icons, callouts mean something once. On every row they mean nothing.
Also broken under the hood?
Looking sharp does not mean it is safe to change.
If deploys scare you, or keys live in the client, that is the 14-day hardening sprint — different job.
See vibe-coding rescue