Skip to main content

Sample data or a starter template is available for empty states

ab-002340 · saas-onboarding.first-run.sample-data-or-template
Severity: highactive

Why it matters

A brand-new account with zero content looks broken. Users cannot evaluate the product when every screen is empty, so they abandon before creating enough data to see value — the cold-start problem the user-experience taxon warns about. Sample data or starter templates short-circuit that: a new account lands with 1-2 example projects already populated, the UI immediately looks alive, and the user can explore real workflows before committing the effort to create content from scratch.

Severity rationale

High because the empty-state cold start is the most common cause of first-session abandonment on content-based SaaS products.

Remediation

Seed each new account with 1-2 example records on signup. Create src/lib/seed.ts with a seedUserData(userId) function and call it from your post-signup handler so a fresh account lands with sample content already visible. Flag these as sample so you can offer a "clear sample data" action once the user creates their own.

export async function seedUserData(userId: string) {
  await db.project.createMany({
    data: [
      { userId, name: 'Example Project', template: 'starter' },
      { userId, name: 'Demo Dashboard', template: 'demo' },
    ],
  });
}

Detection

  • ID: saas-onboarding.first-run.sample-data-or-template

  • Severity: high

  • What to look for: Enumerate all seeding mechanisms: database seed scripts, "Use template" UI options, demo modes, sandbox environments, starter template galleries. Count the total number available to new users.

  • Pass criteria: New users can access at least 1 of: pre-populated sample data, a starter template they can clone/use, or a "demo" option. At least 2 example records or templates should be available.

  • Fail criteria: No sample data, template, or demo content mechanism exists. New users always start with a completely blank slate and must create everything from scratch to experience the product's value.

  • Skip (N/A) when: The application's purpose is inherently personal or sensitive (e.g., a personal diary, medical records system, private file storage) where sample data would be inappropriate or confusing.

  • Detail on fail: "No sample data seeding or starter templates found. New users see only empty states and must create all content from scratch before experiencing product value."

  • Remediation: Add seeding logic in src/lib/seed.ts called from the post-signup flow:

    export async function seedUserData(userId: string) {
      await db.project.createMany({
        data: [
          { userId, name: 'Example Project', template: 'starter' },
          { userId, name: 'Demo Dashboard', template: 'demo' },
        ],
      });
    }
    
  • Cross-reference: For database seeding patterns and data modeling, the Database Layer Audit covers schema design for user initialization.


Taxons

History