Back to Demo
Sample Episode
This demonstrates the same polymorphic comment system working on podcast episodes. Notice how the identical component handles different entity types seamlessly.
Entity Type: EPISODE
Entity ID: cmd8necsz0007rs5klikruv1p
Episode Comments
The exact same comment system from the article page, now working on episodes. This showcases the true power of polymorphic design - one component, multiple contexts.
Polymorphic Comparison
Article Comments
<Comments
entity="ARTICLE"
entityId={article.id}
/>Same component, different entity type
Episode Comments
<Comments
entity="EPISODE"
entityId={episode.id}
/>Identical functionality, different context
Key Benefits:
- Reusable component across all entity types
- Consistent user experience
- Easy to maintain and extend
- Type-safe with TypeScript
Database Schema
// Polymorphic relationship in Prisma
model Comment {
id String @id @default(cuid())
entity CommentEntity // ARTICLE, EPISODE, etc.
entityId String // ID of the specific entity
userId String
text String
parentId String? // For threaded replies
// Relations
user User @relation(fields: [userId], references: [id])
parent Comment? @relation("CommentThread", fields: [parentId], references: [id])
replies Comment[] @relation("CommentThread")
}
enum CommentEntity {
ARTICLE
EPISODE
// Easy to extend with more types
}System Capabilities
Universal Integration
Works with any entity type
Two props integration
No code duplication
Advanced Features
Server-side rendering
Real-time updates
User permissions