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:3000Production-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):
| Path | Command | Writes |
|---|---|---|
| Existing site | pnpm snapshot | local/site.json (+ guild/store) |
| Chain | pnpm snapshot:chain | local/chain.json |
| Import UI | /import | Replay today; live feed next |
| Hand edit | JSON fixtures | Shapes 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-runSnapshot 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.
- Paste minting wallets (up to ten). Pick Ethereum and/or Base.
- Watch six discovery passes: deployed contracts, ownership logs, held contracts, owner check, shared mints, works and media.
- Review series with on-chain evidence. Confirmed start on; co-authored and “probably not yours” start off.
- 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:
| Feature | Route | Notes |
|---|---|---|
| Works / series | /works… | Core catalogue |
| CV | /cv | Print-ready |
| Import | /import | Owner tool |
| Docs (in install) | /docs | Same guide, in-app |
| Collectors | /collector… | SIWE + chain holdings |
| Insights | /insights… | From chain snapshot |
| Shop | /shop… | Server-priced cart |
| Update app | /update | Owner; code not data |
| Catalogue API | GET /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.
| Variable | What | |
|---|---|---|
| RAISONNE_SITE_URL | Public HTTPS origin | Canonical, SIWE host |
| RAISONNE_SESSION_SECRET | ≥32 chars | Sign-in cookie |
| RAISONNE_OWNER_ADDRESSES | Owner wallets | Artist tools |
| ALCHEMY_API_KEY | Chain reads | Optional |
| RAISONNE_TOOLS | 1 = import + design-system | Prod tools |
| RAISONNE_CMS_URL | Snapshot source | Optional |
| STRIPE_* | Checkout | Shop module |
| RAISONNE_UPDATE | 1 allows /update apply | Prod |
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.