# Database Seeding {#database-seeding}


Ever Gauzy includes database seeders to populate demo data, default configurations, and test fixtures.


## Seed Commands {#seed-commands}


```bash
# Seed all demo data
yarn seed:all

# Seed specific modules
yarn seed:module:all

# Seed with specific database
DB_TYPE=postgres yarn seed:all
```


## Seed Data Categories {#seed-data-categories}



### Default Seed Data {#default-seed-data}


Always required for the platform to function:

| Data              | Description                                           |
| ----------------- | ----------------------------------------------------- |
| **Roles**         | Default role set (SUPER_ADMIN, ADMIN, EMPLOYEE, etc.) |
| **Permissions**   | Default permission-to-role mappings                   |
| **Languages**     | Supported languages (en, es, fr, ru, bg, etc.)        |
| **Countries**     | Country list for address/region selection             |
| **Currencies**    | Currency definitions (USD, EUR, GBP, etc.)            |
| **Feature Flags** | Default feature flag states                           |


### Demo Seed Data {#demo-seed-data}


Populated in demo/development environments:

| Data                  | Description                             |
| --------------------- | --------------------------------------- |
| **Demo Tenant**       | Default tenant ("Ever Technologies")    |
| **Demo Users**        | Admin, Employee, and Candidate accounts |
| **Demo Organization** | Sample organization with settings       |
| **Demo Employees**    | Sample employee records                 |
| **Demo Projects**     | Sample projects with tasks              |
| **Demo Time Logs**    | Sample time tracking data               |
| **Demo Invoices**     | Sample invoices and estimates           |
| **Demo Expenses**     | Sample expense records                  |


## Demo Credentials {#demo-credentials}


The demo seed creates the following accounts:

| Email               | Password | Role        |
| ------------------- | -------- | ----------- |
| `admin@ever.co`     | `admin`  | SUPER_ADMIN |
| `employee@ever.co`  | `123456` | EMPLOYEE    |
| `candidate@ever.co` | `123456` | CANDIDATE   |



> [!WARNING]
> These are demo credentials. Change them immediately in production deployments.




## Seed Architecture {#seed-architecture}


Seeders are located in `packages/core/src/lib/`:

```
packages/core/src/lib/
├── role/seed/                 # Role seeds
├── role-permission/seed/      # Permission seeds
├── tenant/seed/               # Tenant seeds
├── user/seed/                 # User seeds
├── employee/seed/             # Employee seeds
├── organization/seed/         # Organization seeds
├── time-tracking/seed/        # Time tracking seeds
├── tasks/seed/                # Task seeds
└── ...
```


### Seed Service Pattern {#seed-service-pattern}


Each seeder follows a common pattern:

```typescript
@Injectable()
export class EmployeeSeedService {
  constructor(
    private readonly employeeService: EmployeeService,
    private readonly userService: UserService,
  ) {}

  async run(tenant: ITenant, organization: IOrganization): Promise<void> {
    const employees = [
      { firstName: 'John', lastName: 'Doe', ... },
      { firstName: 'Jane', lastName: 'Smith', ... },
    ];

    for (const employee of employees) {
      // Create user
      const user = await this.userService.create({
        email: `${employee.firstName.toLowerCase()}@ever.co`,
        ...employee,
      });

      // Create employee record
      await this.employeeService.create({
        userId: user.id,
        tenantId: tenant.id,
        organizationId: organization.id,
        ...employee,
      });
    }
  }
}
```


## Configuration {#configuration}



### Enable/Disable Seeding {#enabledisable-seeding}


```bash
# Seed demo data on startup (development only)
DEMO=true

# Clean database before seeding
DB_RESET=false
```


### Seeding on Application Start {#seeding-on-application-start}


When `DEMO=true`, the application seeds demo data during bootstrap:

```typescript
// In bootstrap module
if (configService.get("DEMO")) {
  await seedService.executeDemoSeed();
}
```


## Custom Seeds {#custom-seeds}


To create custom seed data:

1. Create a seed service in your module:

```typescript
@Injectable()
export class CustomSeedService {
  async run(tenant: ITenant, org: IOrganization): Promise<void> {
    // Your custom seed logic
  }
}
```

2. Register it in the seed orchestrator:

```typescript
@Module({
  providers: [CustomSeedService],
})
export class SeedModule {}
```


## Related Pages {#related-pages}


- [Database Overview](https://sourcey-gauzy.pages.dev/database/database-overview/index.md) — general database info
- [Demo & Testing](https://sourcey-gauzy.pages.dev/getting-started/demo-and-testing/index.md) — demo environment setup
- [Migrations](https://sourcey-gauzy.pages.dev/database/migrations/index.md) — schema management
