- Modify Dockerfile to install curl without recommended packages for a leaner image. - Update Next.js configuration to set outputFileTracingRoot for better Docker compatibility. - Revise contact components to improve messaging and clarity, changing "Get In Touch" to "Contact Me" and enhancing descriptions for collaboration opportunities. - Clean up Prisma schema by removing unnecessary comments and restructuring the Project model for clarity.
106 lines
3.1 KiB
Plaintext
106 lines
3.1 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Project {
|
|
id Int @id @default(autoincrement())
|
|
title String @db.VarChar(255)
|
|
description String
|
|
content String
|
|
tags String[] @default([])
|
|
featured Boolean @default(false)
|
|
category String @db.VarChar(100)
|
|
date String @db.VarChar(10)
|
|
github String? @db.VarChar(500)
|
|
live String? @db.VarChar(500)
|
|
published Boolean @default(true)
|
|
imageUrl String? @db.VarChar(500)
|
|
metaDescription String?
|
|
keywords String?
|
|
ogImage String? @db.VarChar(500)
|
|
schema Json?
|
|
difficulty Difficulty @default(INTERMEDIATE)
|
|
timeToComplete String? @db.VarChar(100)
|
|
technologies String[] @default([])
|
|
challenges String[] @default([])
|
|
lessonsLearned String[] @default([])
|
|
futureImprovements String[] @default([])
|
|
demoVideo String? @db.VarChar(500)
|
|
screenshots String[] @default([])
|
|
colorScheme String @default("Dark") @db.VarChar(100)
|
|
accessibility Boolean @default(true)
|
|
performance Json @default("{\"loadTime\": \"1.5s\", \"bundleSize\": \"50KB\", \"lighthouse\": 90}")
|
|
analytics Json @default("{\"likes\": 0, \"views\": 0, \"shares\": 0}")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@index([category])
|
|
@@index([featured])
|
|
@@index([published])
|
|
@@index([difficulty])
|
|
@@index([createdAt])
|
|
@@index([tags])
|
|
}
|
|
|
|
model PageView {
|
|
id Int @id @default(autoincrement())
|
|
projectId Int? @map("project_id")
|
|
page String @db.VarChar(100)
|
|
ip String? @db.VarChar(45)
|
|
userAgent String? @map("user_agent")
|
|
referrer String? @db.VarChar(500)
|
|
timestamp DateTime @default(now())
|
|
|
|
@@index([projectId])
|
|
@@index([timestamp])
|
|
@@index([page])
|
|
}
|
|
|
|
model UserInteraction {
|
|
id Int @id @default(autoincrement())
|
|
projectId Int @map("project_id")
|
|
type InteractionType
|
|
ip String? @db.VarChar(45)
|
|
userAgent String? @map("user_agent")
|
|
timestamp DateTime @default(now())
|
|
|
|
@@index([projectId])
|
|
@@index([type])
|
|
@@index([timestamp])
|
|
}
|
|
|
|
model Contact {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
email String @db.VarChar(255)
|
|
subject String @db.VarChar(500)
|
|
message String
|
|
responded Boolean @default(false)
|
|
responseTemplate String? @map("response_template") @db.VarChar(50)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@index([email])
|
|
@@index([responded])
|
|
@@index([createdAt])
|
|
}
|
|
|
|
enum Difficulty {
|
|
BEGINNER
|
|
INTERMEDIATE
|
|
ADVANCED
|
|
EXPERT
|
|
}
|
|
|
|
enum InteractionType {
|
|
LIKE
|
|
SHARE
|
|
BOOKMARK
|
|
COMMENT
|
|
}
|