CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/prisma-best-practices

Prisma ORM patterns — schema design, migrations, type-safe queries, testing, error handling, and performance

96

1.28x
Quality

95%

Does it follow best practices?

Impact

100%

1.28x

Average score across 3 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

prisma-schema-design.jsonverifiers/

{
  "instruction": "Define Prisma schema with proper types, indexes, relations, and configuration",
  "relevant_when": "Agent uses Prisma ORM in a TypeScript project",
  "context": "Prisma schema should have generator client block, datasource with env('DATABASE_URL'), @updatedAt and @default(now()) on every model, @@index on all foreign key columns and filtered columns, Int for money (never Float), enums with UPPERCASE values for status fields, and onDelete: Cascade on child relations where appropriate.",
  "sources": [
    {
      "type": "file",
      "filename": "skills/prisma-best-practices/SKILL.md",
      "tile": "tessl-labs/prisma-best-practices@0.1.0"
    }
  ],
  "checklist": [
    {
      "name": "generator-block-present",
      "rule": "Agent includes a generator client block with provider = 'prisma-client-js'",
      "relevant_when": "Agent defines a Prisma schema file"
    },
    {
      "name": "database-url-from-env",
      "rule": "Datasource url uses env('DATABASE_URL'), never a hardcoded connection string",
      "relevant_when": "Agent defines a Prisma datasource block"
    },
    {
      "name": "updated-at-present",
      "rule": "Agent includes @updatedAt DateTime field on every model, including join/pivot tables",
      "relevant_when": "Agent defines Prisma schema models"
    },
    {
      "name": "created-at-present",
      "rule": "Agent includes createdAt DateTime @default(now()) on every model",
      "relevant_when": "Agent defines Prisma schema models"
    },
    {
      "name": "indexes-on-foreign-keys",
      "rule": "Agent adds @@index on every foreign key column (Prisma does NOT auto-index foreign keys)",
      "relevant_when": "Agent defines Prisma schema with relationships and foreign keys"
    },
    {
      "name": "indexes-on-filtered-columns",
      "rule": "Agent adds @@index on frequently filtered columns (e.g., status, category, createdAt)",
      "relevant_when": "Agent defines Prisma schema models that will be queried by specific fields"
    },
    {
      "name": "money-as-int-cents",
      "rule": "Money/price/cost fields use Int type storing cents, never Float (which causes rounding errors)",
      "relevant_when": "Agent defines fields for monetary values in Prisma schema"
    },
    {
      "name": "no-float-for-money",
      "rule": "Agent does not use Float type for any monetary value — must use Int (cents) or Decimal",
      "relevant_when": "Agent defines price, cost, amount, or total fields"
    },
    {
      "name": "enum-for-status",
      "rule": "Agent uses Prisma enum (not plain String) for fields with a finite set of values like status",
      "relevant_when": "Agent defines status, type, or category fields with known values"
    },
    {
      "name": "enum-values-uppercase",
      "rule": "Enum values are UPPERCASE (e.g., RECEIVED, PREPARING, CANCELLED)",
      "relevant_when": "Agent defines Prisma enum types"
    },
    {
      "name": "on-delete-cascade",
      "rule": "Child relation fields include onDelete: Cascade where parent deletion should remove children",
      "relevant_when": "Agent defines parent-child relations in Prisma schema"
    }
  ]
}

tile.json