AEAl-Andalus⺢Experience
Sign in · Join
AEAl-Andalus⺢Experience
ProjectsGalleryAboutArticlesDashboardAPI
© 2026 — Modular content systems☕buy me a coffee
Framework Study Guide
ChaptersCardsLegendRoadmapRoute Map
Chapters
00 · Root Layout01 · Server Page (page.tsx)01a · Special Files (not-found, error, loading)02 · Client Component (UI & Interaction)02a · Client Boundaries & Islands03 · Entity Actions (actions/*.ts)04 · Server Actions ("use server")05 · Context Provider (context/*.tsx)06 · API Route (app/(api)/<entity>/route.ts)07 · TypeScript + Prisma08 · Entity-First Feature Design09 · Deployment, Docker & Cloud10 · Next 16 + Prisma 7 Upgrade11 · Prisma 7 (SQLite-first, App Router)12 · TypeORM (Entities + Migrations)13 · Drizzle ORM (SQL-first)11 · CSS, Mobile-First Flex, Tailwind12 · Libraries, Accelerators & Production Shortcuts14 · Next.js 16: cache, PPR, proxy, AI
→ cards/07-types-prisma

Chapter

07 · TypeScript + Prisma

Prisma models storage; TypeScript models intent. Keep them related but distinct.

Mental Model

  • Prisma schema = DB truth. TypeScript types = app contracts.
  • Do not leak Prisma client types as public API; define app-facing types.
  • Relations and seeds reflect reality; types express usage.

File Classification

Layer: Data modeling
Runtime: Build / server
Prisma: ✅ In schema/actions
App types: ✅ In types/
JSX: ❌ Never
Cross-entity imports: ❌ Avoid

Canonical Example (Types vs Prisma)

// prisma/schema.prisma
model Project {
id String @id @default(cuid())
name String
createdAt DateTime @default(now())
}

// app/(index)/projects/types/index.ts
export type Project = {
id: string;
name: string;
};

Quick Rules

  • Prisma types stay near actions; app types live in types/.
  • Use Pick/Omit/Partial on app types, not Prisma client types.
  • Seeds mirror real relations; db push for proto, migrate for prod.