Works – Artwork Catalog
The Works module is your inventory system for finished artworks. Here you manage not just the artworks themselves, but also all relationships to artists, exhibitions, and sales.
Concept
The artwork catalog distinguishes between:
| Concept | Description |
|---|---|
| Work | The actual artwork (code, print, installation) |
| Artist | Artist/creator |
| Exhibition | Exhibition, fair, event |
| Sale | Sale, edition, print run |
Data Structure
workspace/werke/
├── werke.json # Main catalog
├── index.json # Search index
├── artists/ # Artist sidecars
│ └── artist-001.json
├── exhibitions/ # Exhibition sidecars
│ └── exhibition-001.json
├── sales/ # Sales sidecars
│ └── sale-001.json
└── werke/ # Work sidecars
└── werk-001.jsonWorks
A work connects code (from Catalog) with metadata:
{
"id": "werk-001",
"title": "Entities #1",
"catalogItemId": "item-001",
"artist": "artist-001",
"year": 2024,
"medium": "Generative Animation",
"dimensions": "1920x1080px",
"edition": {
"total": 10,
"available": 7
},
"exhibitions": ["exhibition-001"],
"sales": ["sale-001", "sale-002"]
}Artists
{
"id": "artist-001",
"name": "Carsten Nichte",
"bio": "Generative artist from Hamburg",
"website": "https://carsten-nichte.de",
"social": {
"instagram": "@carstennichte",
"twitter": "@cnichte"
},
"werke": ["werk-001", "werk-002"]
}Exhibitions
{
"id": "exhibition-001",
"name": "Mosaic 2027",
"venue": "Kunsthalle Hamburg",
"startDate": "2027-03-01",
"endDate": "2027-05-31",
"type": "group",
"werke": ["werk-001", "werk-003"],
"notes": "Opening March 1st at 7 PM"
}Sales
{
"id": "sale-001",
"werkId": "werk-001",
"editionNumber": 1,
"buyer": "Collector XY",
"price": 500,
"currency": "EUR",
"date": "2024-06-15",
"certificate": true,
"delivery": "digital"
}Relations
The system manages bidirectional relationships:
Artist ──────┬──────► Work ◄──────┬────── Exhibition
│ │ │
│ ▼ │
└──────► Sale ◄──────┘Relations Manager
// All works by an artist
const werke = relationsManager.getWerkeByArtist('artist-001');
// All exhibitions for a work
const exhibitions = relationsManager.getExhibitionsByWerk('werk-001');
// Sales history
const sales = relationsManager.getSalesByWerk('werk-001');Search & Filter
| Filter | Example |
|---|---|
| By year | year:2024 |
| By medium | medium:animation |
| By status | status:available |
| By exhibition | exhibition:mosaic-2027 |
Export
Catalog Export
npm run export:catalog -- --format pdf --output ./catalog.pdfData Export
npm run export:werke -- --format csv --output ./werke.csv