Copy overhaul + qr designs

This commit is contained in:
2026-07-27 17:54:59 +02:00
parent 033bc7e29d
commit 70d97aa970
144 changed files with 23107 additions and 1699 deletions

View File

@@ -33,9 +33,11 @@ model User {
resetPasswordExpires DateTime?
// Retention email tracking
activationNudgeSentAt DateTime?
upgradeNudgeSentAt DateTime?
thirtyDayNudgeSentAt DateTime?
activationNudgeSentAt DateTime?
upgradeNudgeSentAt DateTime?
thirtyDayNudgeSentAt DateTime?
limitReachedNudgeSentAt DateTime?
firstScanNudgeSentAt DateTime?
// RevOps attribution
signupSource String?
@@ -69,18 +71,19 @@ model User {
onboardingCompletedAt DateTime?
// RevOps scoring
fitScore Int @default(0)
intentScore Int @default(0)
leadScore Int @default(0)
lifecycleStage String @default("cold")
fitScore Int @default(0)
intentScore Int @default(0)
leadScore Int @default(0)
lifecycleStage String @default("cold")
lastQualifiedAt DateTime?
lastScoredAt DateTime?
qrCodes QRCode[]
integrations Integration[]
accounts Account[]
sessions Session[]
lifecycleLogs UserLifecycleLog[]
qrCodes QRCode[]
designPresets QRDesignPreset[]
integrations Integration[]
accounts Account[]
sessions Session[]
lifecycleLogs UserLifecycleLog[]
}
enum Plan {
@@ -142,6 +145,7 @@ model QRCode {
scans QRScan[]
@@index([userId, createdAt])
@@index([userId, type, status])
}
enum QRType {
@@ -170,19 +174,19 @@ enum QRStatus {
}
model QRScan {
id String @id @default(cuid())
qrId String
ts DateTime @default(now())
ipHash String
userAgent String?
device String?
os String?
country String?
referrer String?
utmSource String?
utmMedium String?
utmCampaign String?
isUnique Boolean @default(false)
id String @id @default(cuid())
qrId String
ts DateTime @default(now())
ipHash String
userAgent String?
device String?
os String?
country String?
referrer String?
utmSource String?
utmMedium String?
utmCampaign String?
isUnique Boolean @default(false)
qr QRCode @relation(fields: [qrId], references: [id], onDelete: Cascade)
@@ -222,16 +226,32 @@ model SocialAsset {
createdAt DateTime @default(now())
}
/// Saved design presets. The point for an agency is not the star shape, it is
/// that client A looks identical across 500 codes.
model QRDesignPreset {
id String @id @default(cuid())
userId String
name String
style Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, name])
@@index([userId])
}
model UserLifecycleLog {
id String @id @default(cuid())
userId String
fromStage String?
toStage String
fitScore Int @default(0)
intentScore Int @default(0)
leadScore Int @default(0)
reason String?
createdAt DateTime @default(now())
id String @id @default(cuid())
userId String
fromStage String?
toStage String
fitScore Int @default(0)
intentScore Int @default(0)
leadScore Int @default(0)
reason String?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}