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.json

Works

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.pdf

Data Export

npm run export:werke -- --format csv --output ./werke.csv