Settings
Schema and implementation notes
Current Prisma-backed schema snapshot for DDAI operator surfaces and demo workflow entities.
generator client {
provider = "prisma-client"
output = "../src/generated/prisma"
}
datasource db {
provider = "sqlite"
}
enum LeadStatus {
NEW
QUALIFIED
SCRAPED
DEMO_DRAFT
PUBLISHED
SENT
ENGAGED
}
enum Channel {
WHATSAPP
EMAIL
HYBRID
}
enum RenderMode {
IFRAME
SCREENSHOT
RECONSTRUCTED
}
enum DemoPageStatus {
DRAFT
PUBLISHED
}
enum KnowledgeStatus {
DRAFT
READY
}
enum AgentStatus {
DRAFT
READY
}
enum JobType {
SCRAPE
TRAIN
BUILD_DEMO
PUBLISH
}
enum JobStatus {
QUEUED
RUNNING
COMPLETED
FAILED
}
model Lead {
id String @id @default(cuid())
businessName String
contactName String?
email String?
phone String?
whatsappNumber String?
websiteUrl String?
niche String?
city String?
source String?
notes String?
status LeadStatus @default(NEW)
qualified Boolean @default(false)
preferredChannel Channel @default(WHATSAPP)
scrapes ProspectScrape[]
knowledgeBases KnowledgeBase[]
chatAgents ChatAgent[]
demoPages DemoPage[]
deliveryEvents DeliveryEvent[]
engagements EngagementEvent[]
demoJobs DemoJob[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model PersonaTemplate {
id String @id @default(cuid())
name String
vertical String?
tone String?
objective String?
qualificationSteps Json?
guardrails Json?
avatarUrl String?
knowledgeBases KnowledgeBase[]
chatAgents ChatAgent[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ProspectScrape {
id String @id @default(cuid())
leadId String
scrapeStatus String
iframeAllowed Boolean @default(false)
siteQualityScore Int?
homepageTitle String?
summary String?
servicesJson Json?
faqsJson Json?
screenshotUrl String?
embedModeRecommended RenderMode @default(SCREENSHOT)
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model KnowledgeBase {
id String @id @default(cuid())
leadId String
version Int @default(1)
status KnowledgeStatus @default(DRAFT)
systemPrompt String?
highlights Json?
retrievalMode String?
personaTemplateId String?
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
personaTemplate PersonaTemplate? @relation(fields: [personaTemplateId], references: [id], onDelete: SetNull)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ChatAgent {
id String @id @default(cuid())
leadId String
provider String?
externalAgentId String?
widgetId String?
status AgentStatus @default(DRAFT)
handoffMode String?
personaTemplateId String?
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
personaTemplate PersonaTemplate? @relation(fields: [personaTemplateId], references: [id], onDelete: SetNull)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model DemoPage {
id String @id @default(cuid())
leadId String
slug String @unique
title String
headline String
subheadline String
bulletsJson Json?
primaryCtaLabel String
primaryCtaUrl String
secondaryCtaLabel String?
secondaryCtaUrl String?
bookingUrl String?
renderMode RenderMode @default(IFRAME)
websiteUrl String?
screenshotUrl String?
status DemoPageStatus @default(DRAFT)
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model DemoJob {
id String @id @default(cuid())
leadId String
jobType JobType
status JobStatus @default(QUEUED)
owner String?
startedAt DateTime?
completedAt DateTime?
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model DeliveryEvent {
id String @id @default(cuid())
leadId String
demoPageId String?
channel Channel
eventType String
recipient String?
metadata Json?
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
}
model EngagementEvent {
id String @id @default(cuid())
leadId String
demoPageId String?
eventType String
sessionId String?
metadata Json?
lead Lead @relation(fields: [leadId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
}
model IntegrationSetting {
id String @id @default(cuid())
provider String @unique
configJson Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}