sailop
blogscanpricing
← Back to blog
March 16, 20267 min read

The Terminal Mockup Problem: Why Those 3 Dots Ruin Your Design

The red, yellow, and green dots on fake terminal windows are the number one visual tell that your site was built by AI. Here is why and what to use instead.

You have seen it a thousand times. A dark rectangle with three colored dots in the top-left corner: red, yellow, green. Inside, some monospace text pretending to be a terminal session. This fake terminal window appears on roughly 40% of AI-generated developer tool landing pages. It has become such a reliable AI tell that spotting one is almost as good as running a full design analysis. It is one of the 90+ AI design patterns that Sailop detects automatically.

Why AI Loves the Terminal Mockup

Language models generate terminal mockups frequently because the pattern appears constantly in their training data. Developer tool marketing pages from 2020 to 2025 used this pattern heavily, and it was absorbed into the statistical distribution that models draw from.

When you ask an AI to "show a code example" or "display CLI output," the terminal mockup is the highest-probability visual container. The three dots are the highest-probability decoration. The result:

<!-- What AI generates 80%+ of the time -->
<div class="bg-gray-900 rounded-lg overflow-hidden shadow-lg">
  <div class="flex items-center gap-2 px-4 py-3 bg-gray-800">
    <div class="w-3 h-3 rounded-full bg-red-500"></div>
    <div class="w-3 h-3 rounded-full bg-yellow-500"></div>
    <div class="w-3 h-3 rounded-full bg-green-500"></div>
  </div>
  <pre class="p-4 text-green-400 font-mono text-sm">
    $ npm install sailop
  </pre>
</div>

This pattern is so predictable that Sailop has a specific rule for it: component-terminal-mockup. It detects the three-dots-plus-pre structure and flags it immediately.

The Three Problems With Terminal Mockups

Problem 1: They Are Decorative Lies

The red, yellow, and green dots represent macOS window controls: close, minimize, maximize. But the element is not a window. It cannot be closed, minimized, or maximized. The dots are purely decorative, adding visual complexity without function. This is the definition of visual noise.

Worse, on a real macOS terminal, these dots are 12px circles positioned precisely 8px from the top-left corner. AI-generated mockups use 12px circles with 8px gaps, but they are never interactive. They are a skeuomorphic decoration that references an operating system that many of your users do not even use.

Problem 2: They Signal "Generic Developer Tool"

The terminal mockup says "this is a developer tool" the same way a stethoscope icon says "this is a healthcare app." It is a visual cliche that communicates category without communicating identity. When every developer tool uses the same terminal mockup, none of them stand out.

Compare two approaches:

Approach A: Terminal mockup with three dots
→ User thinks: "Another dev tool"

Approach B: Styled code block with syntax highlighting
→ User thinks: "This specific tool does this specific thing"

Approach B communicates function. Approach A communicates category. Your landing page should do the former.

Problem 3: They Waste Vertical Space

The terminal title bar with three dots consumes 40-50px of vertical space. That is 40-50px that shows nothing useful. On mobile, where vertical space is precious, this waste is even more impactful.

A well-designed code block communicates the same information in less space:

<!-- 50px wasted on fake title bar -->
<div class="terminal-mockup">
  <div class="title-bar">● ● ●</div>
  <pre>sailop check ./src</pre>
</div>

<!-- 0px wasted. Same information. -->
<pre class="bg-stone-900 text-stone-100 p-5 rounded-sm
  font-mono text-sm border border-stone-700">
sailop check ./src
</pre>

What Sailop Flags

Sailop's component rules detect terminal mockups through structural analysis:

sailop check ./src/components/CodeDemo.tsx

# [HIGH] component-terminal-mockup: Fake terminal window with
#   decorative dots detected. Use a styled <pre> or <code> block.
# [MEDIUM] component-green-text-dark-bg: Green-on-dark color scheme
#   matches AI terminal stereotype.

The rule checks for the combination of a dark container, a child div with three small colored circles, and a pre or code element. This structural pattern is unique enough to detect with high confidence.

Better Alternatives

Alternative 1: Clean Code Block

A simple pre element with thoughtful styling:

<pre class="bg-[hsl(28,8%,10%)] text-[hsl(35,20%,82%)] p-6
  rounded-sm font-mono text-sm leading-relaxed
  border border-[hsl(28,10%,20%)]">
<code>$ sailop check ./src --max-score 40
Score: 34/100 (Grade B)
All checks passed.</code>
</pre>

No dots. No fake title bar. Just the code with intentional color choices (warm-tinted dark background, not pure gray-900) and custom styling (rounded-sm, not rounded-lg).

Alternative 2: Inline Code With Context

Instead of isolating the command in a fake window, embed it in the flow of content:

<p class="text-lg">Install with
  <code class="bg-stone-100 px-2 py-0.5 rounded-sm
    font-mono text-sm">npm i -g sailop</code>
  and run
  <code class="bg-stone-100 px-2 py-0.5 rounded-sm
    font-mono text-sm">sailop check ./src</code>
  in your project root.
</p>

The code is part of the sentence. It reads naturally. There is no need for a visual container that pretends to be a window.

Alternative 3: Interactive Demo

If the code is important enough to be a focal point, make it interactive:

<div class="bg-stone-50 border border-stone-200 p-6 rounded-sm">
  <label class="text-sm font-medium text-stone-500">
    Try it on your project
  </label>
  <div class="mt-2 flex items-center gap-3">
    <code class="flex-1 bg-white border border-stone-300
      px-4 py-2 font-mono text-sm rounded-sm">
      sailop check ./src --max-score 50
    </code>
    <button class="px-4 py-2 bg-stone-800 text-white text-sm
      rounded-sm" onclick="navigator.clipboard.writeText(
      'sailop check ./src --max-score 50')">
      Copy
    </button>
  </div>
</div>

A copy button is functional. Three colored dots are decorative. Users want to copy the command. They do not want to pretend they are looking at a macOS window.

Alternative 4: Screenshot of Real Output

If you want to show what the tool actually looks like, use a real screenshot. Not a mockup. A real screenshot of a real terminal running the real command. Authenticity communicates more than any CSS recreation.

The Broader Pattern

The terminal mockup problem is a specific instance of a broader issue explained in our complete guide to anti-AI design: AI reaches for skeuomorphic decorations instead of functional design. The three dots are decorative. The hover-scale-shadow effect is decorative. The gradient background is decorative. They add visual complexity without adding information.

Sailop's rules consistently favor function over decoration:

  • Use a
     instead of a terminal mockup (functional)
  • Use translateY(-1px) instead of scale(1.05) + shadow (subtle)
  • Use a solid color instead of a gradient (clear)
  • Use a border instead of a shadow (structural)

Every time you replace a decoration with a function, the design gets more honest. And honest design is unique design, because AI defaults are almost always decorative. Learn how to detect AI-generated code in 30 seconds using the Sailop CLI, or see how to build a unique landing page without looking AI-generated.

npm install -g sailop
sailop check ./src --dimension components

Remove the three dots. Add a copy button. Ship something functional instead of decorative. Start scanning at sailop.com.

Try Sailop

Scan your frontend for AI patterns. Generate a unique design system. Ship code that looks intentional.

Free scannpm i -g sailop
Share this article
Share on X
Previous
Sailop vs ESLint: Why Design Needs Its Own Linter
Next
What is AI Slop? The 7 Dimensions of Generic Design
On this page
Why AI Loves the Terminal MockupThe Three Problems With Terminal MockupsProblem 1: They Are Decorative LiesProblem 2: They Signal "Generic Developer Tool"Problem 3: They Waste Vertical SpaceWhat Sailop FlagsBetter AlternativesAlternative 1: Clean Code BlockAlternative 2: Inline Code With ContextAlternative 3: Interactive DemoAlternative 4: Screenshot of Real OutputThe Broader Pattern
Sailop 2026All articles