# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
title: String
organisationType: String // One of predefined options
location: Place
description: String // Multi-line, with allowed html tags
members: Contributor[]
artworks: ArtworkBase[]
collections: Collection[]
artists: ArtistBase[]
shows: ShowBase[]
publications: PublicationBase[]
places: PlaceBase[]
invitations: {}[] // ~ Invitation type
id: String
accountId: String
published: boolean
title: String // required, default: 'Untitled'
thumbnail: Attachment
preview: Attachment
year: String
credits: Contributor[]
category: String[]
tags: String[]
statisticsShort: {}
/**
* inherited from ArtworkBase
*
accountId: String
published: boolean
title: String - *required, default: 'Untitled'
thumbnail: Attachment
preview: Attachment
year: String
credits: Contributor[]
category: String[]
tags: String[]
statisticsShort: {}
*/
description: String // Multi-line, allowed html tags
source: {
type: 'video'|'html'
url: String
}
controls: Control[]
iterations: Iteration[]
shows: ShowBase[]
statistics: {}
Iterations are properties of an Artwork.
Based on Iteration Report by Guggenheim Conservation Department:
https://www.guggenheim.org/wp-content/uploads/2015/11/guggenheim-conservation-iteration-report-2012.pdf
id: String
name: String
thumbnail: Attachment
date: Date,
exhibitions: ShowBase[]
contributors: Contributor[]
supervisedBy: Contributor
installation: {
installedBy: Contributor[]
withArtist: boolean,
artistInfluence: Note
}
documentation: {
images: Attachment[]
video: Attachment[]
technicalDrawings: Attachment[]
notes: Note[]
artistInterview: Note
assistantInterview: Note
other: Attachment[]
},
evaluation: {
notes: Note[]
approvedByArtist: boolean
warnings: Note[]
}
comments: Record[]
publications: Publication[]
space: {
context: IterationComponent
floorPlan: IterationComponent
dimensions: IterationComponent
fakeWalls: IterationComponent
ceilingHeight: IterationComponent
ceiling: IterationComponent
wall: IterationComponent
floor: IterationComponent
acoustic: IterationComponent
lighting: IterationComponent
entranceExit: IterationComponent
visitorFlow: IterationComponent
displayPosition: IterationComponent
playerPosition: IterationComponent
projectionDistances: IterationComponent
screens: IterationComponent
imageSize: IterationComponent
imagePlacement: IterationComponent
projectionSurface: IterationComponent
}
exhibitionCopies: {
/* we probably don't need this..
Or maybe this is the place to store alterations to the Artwork.source.
Like other url, Number of screens etc. */
}
equipment: {
visual: DisplayEquipment
audio: AudioEquipment
playback: PlaybackEquipment
other: Equipment[]
}
otherComponents: field('IterationComponentList')
technicalSetup: {
looped: IterationComponent
timed: IterationComponent
synched: IterationComponent
controlled: IterationComponent
amperageInSpaceAtEquipment: IterationComponent
conditionedPower: IterationComponent
cabling: IterationComponent
settings: IterationComponent
other: IterationComponent
}
Collections are properties of an Account.
accountId: String
accountName: String
name: String
public: Boolean
artworks: ArtworkBase[]
curators: Contributor[]
description: String // Multi-line with allowed html tags
category: String[]
tags: String[]
id: String
title: String
date: {
start: Date
end: Date
}
thumbnail: Attachment
url: String
place: Place
category: String[]
tags: String[]
/**
* inherited from ShowBase
*
id: String
title: String
date: {
start: Date
end: Date
}
thumbnail: Attachment
url: String
place: Place
category: String[]
tags: String[]
*/
artists: ArtistBase[]
curators: Contributor[]
artworks: ArtworkBase[]
synopsis: String
description: String // Multi-line with allowed html tags
publications: PublicationBase[]
attachments: Attachment[]
name: String
type: String // one of predefined options e.g. 'museum'|'gallery'|etc.
url: String
shows: ShowBase[]
artists: Artist[]
address: {
streetHouse: String
zip: String
city: String
province: String
country: String
}
category: String[]
tags: String[]
/**
* inherited from PlaceBase
*
name: String
type: String // one of predefined options e.g. 'museum'|'gallery'|etc.
url: String
shows: ShowBase[]
artists: Artist[]
address: {
streetHouse: String
zip: String
city: String
province: String
country: String
}
category: String[]
tags: String[]
*/
contact:{
email: String
phone: String
}
description: String // Multi-line with allowed html tags
publications: PublicationBase[]
attachments: Attachment[]
userId: String
displayName: String
photo: Attachment
/**
* inherited from User
*
userId: String
displayName: String
image: Attachment
*/
artworks: ArtworkBase[]
shows: ShowBase[]
category: String[]
tags: String[]
statisticsShort: {}
/**
* inherited from ArtistBase
*
userId: String
displayName: String
image: Attachment
artworks: ArtworkBase[]
shows: ShowBase[]
category: String[]
tags: String[]
statisticsShort: {}
*/
url: String
cv: String // Multi-line with allowed html tags. Auto-formatted text
description: String // Multi-line with allowed html tags
publications: PublicationBase[]
inCollections: CollectionBase[]
statistics: {}
/**
* inherited from User
*
userId: String
displayName: String
image: Attachment
*/
role: String // One of the predefined options.
The role options depend on the context where Contributor type is used (inside Artwork, Iteration, Account etc.)
displayUrl: String
storageUri: String
type: String // image|video|file|...
ratio: Number
/**
* inherited from User
*
displayUrl: String
storageUri: String
ratio: number
*/
type: 'video' // @override
thumbnail: Attachment
duration: Number
Draft
order: Number
icon: String|Attachment
label: String
type: String // 'keyboard'|'mouse'|'function'|'custom'
value: {
keyCode: String
modifier: String // 'shiftKey'|'ctrlKey'|'altKey'|'metaKey'
type: String // 'keydown'|'keyup'|'keypress'
}
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
/**
* inherited from Record
*
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
*/
onBehalfOf: Contributor
/**
* inherited from Note
*
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
onBehalfOf: Contributor
*/
type: String /* One of predefined options */
quantity: Number
reason: String
decidedBy: Contributor
necessity: String // One of 'possible'|'recommended'|'important'|'critical'
/**
* inherited from IterationComponent
*
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
onBehalfOf: Contributor
quantity: Number
reason: String
decidedBy: Contributor
necessity: String // One of 'possible'|'recommended'|'important'|'critical'
*/
type: String // @override One of predefined options (equipment specific)
dimensions: [Number, Number, Number]
appearance: String // Multi-line
weight: Number
Taken partly from http://www.projectorcentral.com
/**
* inherited from Equipment
*
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
onBehalfOf: Contributor
quantity: Number
reason: String
decidedBy: Contributor
necessity: String // One of 'possible'|'recommended'|'important'|'critical'
dimensions: [Number, Number, Number]
appearance: String // Multi-line
weight: Number
*/
type: String // @override One of monitor|projector|oculus
resolution: [Number, Number]
pixelDensity: Number
brightness: Number
contrastRatio: Number
colorDepth: Number
colorProfile: String
modes3D: String
displayType: String
screenDimensions: [Number, Number]
screenDiagonal: Number
aspectRatio: String
responseTime: Number
lens: {
focalLength: Number
shift: boolean
throwRatio: Number
}
speakers: String
audibleNoise: Number
/**
* inherited from Equipment
*
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
onBehalfOf: Contributor
quantity: Number
reason: String
decidedBy: Contributor
necessity: String // One of 'possible'|'recommended'|'important'|'critical'
dimensions: [Number, Number, Number]
appearance: String // Multi-line
weight: Number
*/
type: String // @override One of loudspeakers|headphones|...
sensitivity: String
frequencyResponse: String
impedance: Number
/**
* inherited from Equipment
*
created: Date
modified: Date
author: Contributor
text : String
attachments : Attachment[]
onBehalfOf: Contributor
quantity: Number
reason: String
decidedBy: Contributor
necessity: String // One of 'possible'|'recommended'|'important'|'critical'
dimensions: [Number, Number, Number]
appearance: String // Multi-line
weight: Number
*/
type: String // @override One of desktop|handheld|single board|...
cpu:{
cores: Number
speed: Number
architecture: String
}
memory:{
amount: Number
type: String
}
graphics:{
memoryAmount: Number
memoryType: String
}
storage:{
amount: String
type: String
}
connectivity:{
bluetoothType: String
wifiType: String
ethernetType: String
}
os: String
osVersion: Number