# Sample data or a starter template is available for empty states

- **Pattern:** `ab-002340` (`saas-onboarding.first-run.sample-data-or-template`)
- **Severity:** high
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-002340
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-002340)

## 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.

```ts
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:** `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:

  ```ts
  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: user-experience

HTML version: https://auditbuffet.com/patterns/ab-002340
