Skip to main content
Docs

9. Database Model

PostgreSQL via Drizzle-ORM. Schema in packages/db/src/schema/index.ts.

9.1 Relations (Foreign Keys)#

ParentChildCardinalityOn Delete
usersprojects1 : Nset null (ownerId)
projectspages1 : Ncascade (projectId)
pagespageTranslations1 : Ncascade (pageId)
projectsdeployments1 : Ncascade (projectId)
projectsmediaAssets1 : Ncascade (projectId)
pagespages1 : N (self)set null (parentId)
llmCachestandalonekeyed on mdHash

9.2 Tables in Detail#

users — Accounts

  • id (uuid), email (unique), passwordHash, displayName, createdAt, updatedAt

projects — Sites/Projects

  • id, ownerId → users
  • name, slug
  • designPack (string, default minimal)
  • languages (csv string, e.g. "de,en,fr")
  • defaultLanguage
  • projectType (landing | product | conference | docs | wiki | portfolio | courses | blog | blank)
  • docsConfig (jsonb — logo, topNavLinks, githubRepo)
  • componentVariants (jsonb — Layout Primitive Defaults)
  • Cloudflare fields: cfProjectName, customDomain, domainStatus, zoneTag, liveUrl, lastDeployedAt

pages — Markdown Pages

  • id, projectId → projects
  • title, slug (unique per Project)
  • sortOrder, isHomePage, parentId (self-ref for hierarchy), showInNav
  • mdContent (text)
  • mdHash (sha256 for cache invalidation)
  • generatedJson (ComponentMapping)
  • componentVariants (jsonb — Page-Level Content Primitive Overrides)

pageTranslations — Translated Content

  • id, pageId → pages, language
  • mdContent, mdHash, generatedJson
  • translatedAt, isManuallyEdited

llmCache — Mapping Cache

  • mdHash (unique key)
  • mappingJson
  • If a user regenerates an already mapped MD section → Cache-Hit, no LLM-Call

mediaAssets — Uploaded Files

  • id, projectId → projects
  • filename, storagePath, mimeType, sizeBytes, width, height, alt
  • status (pending | active) — pending = upload started but not confirmed; cleanup after 1h

deployments — Cloudflare Deploy Records

  • id, projectId → projects
  • cfDeploymentId — Cloudflare Pages ID
  • status (queued | building | success | failure | canceled)
  • url, completedAt, errorMessage
  • createdByUserId, filesUploaded, filesCached