Orkhan Mammadov

Open source · MIT

Build your own Raisonne

A self-hosted catalogue raisonne for one artist who works on-chain. Clone it, point it at your wallets, publish the record. Nobody takes a cut.

License
MIT
Stack
Next.js · fixtures · SIWE
Host
Your server
Tenancy
One artist per install

What you get

One install equals one artist. The site shows every series and work with the on-chain record behind it, and keeps the CV, exhibitions, press and practice around the work. Catalogue data is files under src/fixtures — not a required database. Wallet sign-in, collectors, insights and a shop are optional modules, off until you configure them.

A fresh clone renders a fictional Demo Artist (public-domain images). Your own records live in gitignored src/fixtures/local/ and never ship in the public repository.

Honesty rule: unknown edition size is labelled “Edition not recorded”, never invented as “Unique”. Truncated chain history is marked. Marketplace sales without a readable price count as transfers, not sales at zero.

Run it

Needs Node 20+ and pnpm.

git clone https://github.com/orkhan-art-web/raisonne-os.git
cd raisonne-os
pnpm install
cp .env.example .env.local   # optional
pnpm dev                     # http://localhost:3000

Production-shaped: pnpm build && pnpm start. Checks: pnpm exec tsc --noEmit, pnpm lint.

Fill the catalogue

Three honest paths in v0.1 (no full studio CMS UI yet):

PathCommandWrites
Existing sitepnpm snapshotlocal/site.json (+ guild/store)
Chainpnpm snapshot:chainlocal/chain.json
Import UI/importReplay today; live feed next
Hand editJSON fixturesShapes in src/lib/types.ts
RAISONNE_CMS_URL=https://x.art pnpm snapshot
ALCHEMY_API_KEY=… pnpm snapshot:chain
pnpm snapshot:chain -- --series=your-slug
pnpm snapshot:chain -- --dry-run

Snapshot never overwrites chain, contract, token id or attribution evidence the importer owns. It never copies collectors, orders, customers, commissions or provider keys.

Import art

Owner tool at /import (enable with RAISONNE_TOOLS=1 in production; on in development). Sign in with a wallet on RAISONNE_OWNER_ADDRESSES.

  1. Paste minting wallets (up to ten). Pick Ethereum and/or Base.
  2. Watch six discovery passes: deployed contracts, ownership logs, held contracts, owner check, shared mints, works and media.
  3. Review series with on-chain evidence. Confirmed start on; co-authored and “probably not yours” start off.
  4. Preview accepted works; summary closes the run.

Today the UI replays a recorded run at original timing so the product surface is real while the live stream lands. Same reducer either way.

Series and works

A series is the main container: slug, cover, story, optional contract. Kinds: series, one-of-one, shared-platform. Hidden series stay out of the public index, sitemap and API. Sub-series nest via parentSlug.

Routes: /works, /works/[series], /works/[series]/about, /works/[series]/[token]. Work identity in the API is chain:contract:tokenId.

Evidence signals: deployer, ownership-log, owner, token-creator, storefront-decode, minted-to — shown on series pages and in import review.

Features A–Z

Empty data or a switched-off module hides the nav entry. Highlights:

FeatureRouteNotes
Works / series/works…Core catalogue
CV/cvPrint-ready
Import/importOwner tool
Docs (in install)/docsSame guide, in-app
Collectors/collector…SIWE + chain holdings
Insights/insights…From chain snapshot
Shop/shop…Server-priced cart
Update app/updateOwner; code not data
Catalogue APIGET /api/catalogue…Read-only JSON

Full list and modules (settings.modules): showreel, ticker, partners, news, newsletter, drops, commissions, writings, immersive-rooms, collectors, insights, store.

Environment

Nothing required for the bare catalogue. Copy .env.example → .env.local. Never put secrets in fixtures.

VariableWhat
RAISONNE_SITE_URLPublic HTTPS originCanonical, SIWE host
RAISONNE_SESSION_SECRET≥32 charsSign-in cookie
RAISONNE_OWNER_ADDRESSESOwner walletsArtist tools
ALCHEMY_API_KEYChain readsOptional
RAISONNE_TOOLS1 = import + design-systemProd tools
RAISONNE_CMS_URLSnapshot sourceOptional
STRIPE_*CheckoutShop module
RAISONNE_UPDATE1 allows /update applyProd

Update and deploy

Data: pnpm snapshot / pnpm snapshot:chain. Code: pnpm update:check · pnpm update:raisonne · rebuild. Web apply needs owner session, clean git checkout of upstream, and RAISONNE_UPDATE=1 in production. Never touches src/fixtures/local/, .data/, or .env*.

Deploy sketch: Node 20+, pnpm, TLS in front, persist .data/ and fixtures local, set RAISONNE_SITE_URL, RAISONNE_TRUSTED_PROXY=1 behind your reverse proxy.