Content
Content, Asset, Site — typed publishing with SEO and multi-language support.
Content management with typed documents, media assets, and site configuration.
Content
Typed documents — pages, posts, articles, guides — with SEO fields, scheduling, and visibility controls.
import { Noun } from 'digital-objects'
export const Content = Noun('Content', {
title: 'string!',
slug: 'string##',
excerpt: 'string',
body: 'string',
site: '-> Site.content',
type: 'Page | Post | Article | Guide',
categories: 'string',
tags: 'string',
status: 'Draft | Published | Scheduled | Archived',
publishedAt: 'datetime',
scheduledAt: 'datetime',
author: '-> Contact',
seoTitle: 'string',
seoDescription: 'string',
ogImage: 'string',
noIndex: 'string',
canonicalUrl: 'string',
featuredImage: '-> Asset',
readingTime: 'number',
viewCount: 'number',
visibility: 'Public | Private | Members',
publish: 'Published',
archive: 'Archived',
schedule: 'Scheduled',
})| Verb | Event | Description |
|---|---|---|
publish | Published | Make publicly visible |
archive | Archived | Remove from public view |
schedule | Scheduled | Schedule for future publication |
Asset
Files — images, videos, documents, audio, archives.
export const Asset = Noun('Asset', {
name: 'string!',
filename: 'string!',
url: 'string!',
type: 'Image | Video | Document | Audio | Archive | Other',
mimeType: 'string!',
extension: 'string',
size: 'number!',
width: 'number',
height: 'number',
alt: 'string',
caption: 'string',
duration: 'number',
thumbnail: 'string',
tags: 'string',
uploadedBy: '-> Contact',
source: 'string',
license: 'string',
})Site
Site configuration — determines how Content renders.
export const Site = Noun('Site', {
name: 'string!',
subdomain: 'string##',
title: 'string',
description: 'string',
tagline: 'string',
logo: 'string',
favicon: 'string',
primaryColor: 'string',
accentColor: 'string',
status: 'Draft | Published | Maintenance',
visibility: 'Public | Private | Password',
ogImage: 'string',
content: '<- Content.site[]',
defaultLanguage: 'string',
supportedLanguages: 'string',
timezone: 'string',
})