agentsclimarketplace

Db seed generator

Skill Nembie/claude-code-skills/skills/db-seed-generator

Reusable skills and intelligent agents for Claude Code. Production-grade, self-verifying, configurable.

Install
npx -y skills add Nembie/claude-code-skills --skill db-seed-generator

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Generate realistic database seed data from a Prisma schema. Use when asked to generate seed data, create test data, populate the database, seed the DB, or create fixtures.

SKILL.md

4.6 KB, as published. Nobody here has run it

DB Seed Generator

Before generating any output, read config/defaults.md and adapt all patterns, imports, and code examples to the user's configured stack.

Process

  1. Read schema.prisma and extract all models, fields, types, constraints, relations, and enums.
  2. Determine dependency order: models with no required relations first, then models that depend on them.
  3. Generate a prisma/seed.ts file with realistic fake data that respects all constraints.
  4. Output a ready-to-run seed file.

Dependency Ordering

Build a directed graph of model dependencies from @relation fields. Topologically sort so parent records are created before children.

User (no deps)           → create first
Organization (no deps)   → create first
Post (depends on User)   → create second
Comment (depends on User, Post) → create third

If circular dependencies exist, use a two-pass approach: create records with required fields first, then update with optional relation fields.

Data Generation Rules

Field Name Conventions

Generate realistic values based on field names:

PatternGenerated value
firstName"Elena", "Marcus", "Priya"
lastName"Rodriguez", "Chen", "Okafor"
name (on User)"Elena Rodriguez"
email"[email protected]"
phone"555-0101", "555-0102"
avatarUrl, imageUrl"https://example.com/avatars/1.jpg"
url, website"https://example.com"
title (on Post/Article)Realistic short sentences
content, body, description1-3 realistic sentences
slugDerived from title: "realistic-short-sentence"
price, amountRealistic numbers like 29.99, 149.00
quantity, countSmall integers: 1-100
createdAt, updatedAtDates spread over the last 90 days
publishedAtEither null or a date after createdAt
isActive, isPublishedMix of true/false
role (enum)Distribute across valid enum values
passwordPre-hashed placeholder: "$2b$10$..." — never plaintext

Constraints

  • @unique: Ensure every value is unique. Use index suffixes: "[email protected]", "[email protected]".
  • @id @default(cuid()): Omit from create calls — let the database generate them.
  • @default(now()): Omit or set explicit dates for predictable ordering.
  • @default(value): Omit to use the default, or set explicitly for variety.
  • Enums: Only use values defined in the enum.
  • Int, Float: Respect @db.SmallInt, @db.Decimal(10,2) etc.

Relations

  • One-to-many: Create the "one" side first, reference its ID on the "many" side.
  • Many-to-many (implicit): Use connect syntax after both sides exist.
  • Self-referencing: Create root records first (no parent), then children pointing to them.
  • Required relations: Always satisfy — never leave a required FK null.
  • Optional relations: Mix of connected and null.

Output Template

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {
  // Clear existing data (reverse dependency order)
  await prisma.comment.deleteMany();
  await prisma.post.deleteMany();
  await prisma.user.deleteMany();

  // Seed in dependency order
  const users = await Promise.all([
    prisma.user.upsert({
      where: { email: "[email protected]" },
      update: {},
      create: {
        email: "[email protected]",
        name: "Elena Rodriguez",
        // ... fields
      },
    }),
    // ... more users
  ]);

  // Use createMany for bulk inserts where relations allow
  await prisma.post.createMany({
    data: [
      { title: "...", authorId: users[0].id },
      // ...
    ],
  });

  console.log("Seeded: X users, Y posts, Z comments");
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(() => prisma.$disconnect());

Scale Parameter

When the user specifies a count (e.g., "seed 50 users"), generate that many records. Default to 5-10 records per model. Use createMany for bulk inserts where possible. Wrap large seeds in a prisma.$transaction().

Upsert Pattern

Use upsert on a unique field to make the seed idempotent — safe to run multiple times.

Reference

See references/seed-patterns.md for dependency ordering details, realistic data patterns, and performance tips.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.