DEV Community

Cover image for The Illusion of the One-Day Build: Why I Deleted Half My AI-Generated Landing Page
0x41414141
0x41414141

Posted on

The Illusion of the One-Day Build: Why I Deleted Half My AI-Generated Landing Page

I built a SaaS landing page. Then I deleted half of it.

Not because it was ugly. It wasn't. It had all the classics: scrolling logo clouds, "10,000+ brands served", glowing testimonials from Sarah Chen ("This changed everything for our team!"), a pricing table with a Free tier and an Enterprise plan, urgency banners, floating CTAs, and a "Loved by builders worldwide" section.

The problem? Every single one of those was made up.

The Trap of Plausible Fiction

I built Mayasura, an open-source brand-building platform, using AI sub-agents to go from zero to shipped in a day. The sub-agents did exactly what I asked: build a professional SaaS app. They used standard SaaS landing page templates. They filled in plausible-looking social proof. They made the numbers sound reasonable.

The app was real. The code worked. The landing page was pure fiction.

After the sprint, I ran a principles audit and created a strict rule: No fake data, anywhere. Not in the landing page, not in demo content, and not as placeholder analytics.

Then I went in to enforce it.

Auditing the Artificial: What I Actually Deleted

Here is exactly what I had to strip out from a single landing page:

  • 6 AI-generated testimonials: Complete with names, job titles, and photos (they were icons, but the intent was clear).
  • 4 fake stats: Claims like "10,000+ brands", "50,000+ products", "1,000,000+ visitors", and "99% satisfaction".
  • The LogoCloud component: A row of made-up company logos.
  • The SocialProof component: A generic "brands worldwide" counter.
  • The BeforeAfter cost comparison: Pitted against competitors whose pricing I had never even checked.
  • The ComparisonTable: A feature list versus "Competitor A" and "Competitor B" with completely fabricated checkmarks.
  • Pricing tiers: A Free, Pro, and Enterprise layout for a project that has absolutely no monetization plan.
  • The UrgencyBanner: Screaming "Limited early access!" for a product with no waitlist.
  • Excessive CTAs: FloatingCTA, ScrollCTAModal, and StickyMobileCTA resulting in three variants of "Start Free Trial" for a tool that doesn't have a trial.
  • Fake avatar row: Sitting right in the hero section.
  • "No credit card required": A completely unnecessary banner for a product you self-host.

Total: 1,462 lines deleted from the landing page alone.


Need a developer who values clean architecture and honest design?
If you are looking for a high-performance website, an SEO-optimized platform, or a custom multi-tool web application built with modern frameworks like React.js, Next.js, Node.js, Astro, Svelte, Tailwind CSS, TypeScript, and wordpress let's talk. [Contact me to create a better website today.]


The Underlying Issue with AI Seed Data

Here is the actual lesson. When you use AI to build a product fast, it will fill every blank with plausible fiction. That is exactly what you are asking it to do.

The AI doesn't know you have zero users yet. It models "professional SaaS product" and generates professional SaaS copy to match. It isn't lying; it is just pattern-matching. The problem is that the established pattern includes social proof, and social proof is made up by definition when you are on day one.

The dangerous part is how convincing it looks. The testimonials were not obviously fake. "Sarah Chen, Brand Manager at Elevate Creative" sounds real. The stats used round numbers exactly like real statistics do.

If I had deployed this without the audit, I would have shipped a technically real product paired with a fraudulent pitch page.

Replacing Fabrication with Fact

The new rule was simple: only put things on the page that are true.

The massive numbers became 16 templates, 34 fonts, 16 color palettes, and 7 consumer channels. Those are exact numbers pulled directly from the codebase. I can defend each one.

The pricing section became a self-hosting guide. If there is no pricing, don't pretend there is. Show a quick-start terminal block instead.

The testimonials became nothing. There are no testimonials yet, and an empty section is infinitely more honest than a fake one.

The competitor table became a FAQ with honest answers. For example, "Is this production-ready?" is answered with, "It's an open-source tool at v3.2. You can run it in production if you're comfortable self-hosting and maintaining it."

The urgency banners disappeared entirely because there is no urgency.

Cleaning Up the App Architecture

While I was under the hood, I applied the exact same principle to the application itself:

  • Random numbers in analytics charts: Replaced with deterministic fallbacks clearly labeled "Sample Data". If you don't have real data yet, say so.
  • Random view counts on blog posts: Removed. Blog views show zero until real people read them.
  • Lighthouse scores: Labeled "Estimated" because they were run in a local dev environment rather than production.
  • Analytics "realtime visitors": Labeled "(estimated)" because the number is approximated from session tracking rather than a pixel-perfect count.

Labeling estimates as estimates, showing zeroes when you have no data, and deleting claims you cannot back up isn't just about ethics. It is about maintenance. Every fake testimonial is a lie you have to remember. Every fake stat is a number you will eventually have to update or quietly leave stale. The longer you wait to clean it up, the more the technical debt compounds.

Catching Silent Bugs: The Slug Collision Fix

The audit also caught something non-obvious: there was no slug collision protection.

If two users created brands with the exact same name, they would get the identical slug. A path like /site/alpine-coffee would become ambiguous, and the last write would silently overwrite the previous one.

The fix was straightforward:

export async function generateUniqueSlug(
  base: string,
  existingIds: string[] = []
): Promise<string> {
  const sanitized = sanitizeSlug(base);

  // Check reserved slugs
  if (isReservedSlug(sanitized)) {
    return generateUniqueSlug(`${sanitized}-brand`, existingIds);
  }

  // Check for collisions, append -2, -3, etc.
  let candidate = sanitized;
  let counter = 2;
  while (await slugExists(candidate, existingIds)) {
    candidate = `${sanitized}-${counter}`;
    counter++;
  }
  return candidate;
}
Enter fullscreen mode Exit fullscreen mode

I also added a reserved slug list: admin, api, dashboard, site, shop, blog, chat, login, signup, health. These are all real routing paths that someone could easily accidentally claim as a brand slug.

Leaving this unchecked would have caused real bugs, not just embarrassment.

Lessons for Prompting and Shipping

What would I do differently next time? I would tell the AI up front: "This is a new project with no users. Do not generate social proof, testimonials, pricing, or fake statistics. Use real numbers from the codebase only."

That single prompt constraint would have saved a 2.25-hour cleanup session. The AI follows rules if you give it rules. The mistake was letting it fill in the blanks with default SaaS tropes.

The flip side is that AI-generated fake data is highly predictable and easy to find. It follows clear patterns like round numbers ending in 000 or identically structured testimonials. You can simply grep for them, delete them, and replace them with reality.

The audited version of the site ships smaller, loads faster, and I am not nervous about anyone reading it carefully.

The Final Product: Quiet, Short, and True

After the great deletion, the landing page features:

  • A hero section with real copy explaining exactly what the platform does.
  • Six feature cards describing tools that actually exist in the code.
  • A "How It Works" section detailing three verifiable steps.
  • A template showcase displaying real screenshots of included templates.
  • A "Deploy Anywhere" section listing verified platforms like Railway, Vercel, Docker, and standard self-hosting.
  • A FAQ with honest answers.
  • A footer with a GitHub link and an MIT license badge.

No pricing. No testimonials. No urgency. No fake logos.

It is shorter. It is quieter. Everything on it is true. Mayasura is an open-source brand-building platform. The code is on GitHub under MIT. There is no waitlist, no pricing, and no enterprise tier. It is just a Next.js app you can self-host.


Need a developer who values clean architecture and honest design?
If you are looking for a high-performance website, an SEO-optimized platform, or a custom multi-tool web application built with modern frameworks like Astro, Svelte, Tailwind CSS, and TypeScript, let's talk. [Contact me to create a better website today.]

Top comments (0)