Danila KhodjaefandClaude Opus 5 f2a256132c Give every movement its own period interior.
Movement halls routed 24 of the 26 movements through 8 generic detail kinds,
four of which (modern, industrial, atelier, museum) rendered nothing at all,
and `salon` was a single ceiling ring shared by eight movements.

`details` is now a 26-value MovementDetailKind, one per movement, each built
from the architecture of the same period as the movement itself. Gothic and
Byzantine are unchanged and stay in MovementHallDetails.tsx as the reference
implementations; the rest live under components/hall-details/, split by era,
over shared wall-flush primitives.

hall-details/geometry.ts records the budget the Gothic and Byzantine
components established, since frames hang 0.23 m proud with a 0.7 m clear
margin at each wall end: relief limits above and below the frame line, corner
pockets for freestanding masses, doorway and title-band clearance, and a cap
of two added lights per hall. Halls now pass their computed windows down so
upper-wall panels, arches and roundels step around the openings.

Also holds the pale interiors back from blowing out: gallery wall tints are
authored around 0.50-0.56 luminance instead of near-white, and the 19 halls
that read too bright take lightScale 0.30, matching the basilica.

Verified by rendering all 26 interiors offline at two hall sizes and
measuring the scene graph: nothing through walls, floor or ceiling, maximum
0.17 m intrusion into the hang zone, at most two added lights per hall.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:44:05 +03:00
2026-08-03 22:50:07 +03:00
2026-07-27 13:25:43 +03:00
2026-08-03 22:50:07 +03:00

Art Gallery

Interactive virtual art gallery: zoomable historical timeline (classic left→right, vertical, or Tree of Art lineage chart — shareable via ?layout=) with era click-to-zoom, major event markers (vertical guides into the movement flow), branching art-movement streams (click a movement name to enter its 3D movement gallery — photorealistic period interiors with painted walls, stone, and wood textures; chronological wings with up to ~55 works each, side-wall windows, wing navigator), one 3D hall per artist (parquet floor, movement-tinted walls, black/gold frames by review status, corridor layout for large catalogs, museum-style exit doors, golden influence lamps, canvas placeholders for missing works, influence-linked exits), painting detail with art-history annotations, prev/next catalog browsing and fullscreen lightbox, curator-gated debug-mode image audit on painting detail and artist bio (Checked / Fix it / More / Clear / Upload; painting detail also Remove entry), optional Show more auto-opens the search picker, Checkup page, preserved gallery camera on return, and Wikipedia-sourced artist biographies. Anonymous visitors browse freely; curators sign in via Curator login in the header.

Documentation

Document Purpose
Documentation/basics.md Architecture, layout, user flow
Documentation/ui-interaction-and-component-standards.md UI interaction, navigation, and component standards
Documentation/movement-tree.md Tree of Art start page — tree layout rules
Documentation/FAC.md Command cheat sheet — start/stop, import, deploy
Documentation/environments.md Dev/prod URLs, DB split, deploy, sync
Documentation/setup.md Install, env, npm scripts
Documentation/DB_structure.md PostgreSQL tables
Documentation/API.md REST endpoints
Documentation/data-and-images.md Catalog, bios, seeding, image pipeline

Stack

  • Backend: Node.js, Express, PostgreSQL
  • Frontend: React, Vite, Three.js (@react-three/fiber, @react-three/drei)

Setup

  1. Copy .env.example to .env and set database credentials (DB_NAME=gallery_dev after one-time split). Set SESSION_SECRET, CURATOR_USERNAME, and CURATOR_PASSWORD for curator login (see setup.md).

  2. Install dependencies:

    npm install
    cd client && npm install && cd ..
    
  3. Apply database schema (requires PostgreSQL superuser for first-time setup):

    npm run dev:migrate
    npm run dev:seed
    
  4. Enrich the catalog (recommended after seed):

    npm run dev:sync-image-paths       # import paintings from data/images/paintings/ when present
    npm run dev:fetch-artist-images    # link or download artist portraits
    npm run dev:fetch-artist-bios      # Wikipedia biographies for all artists
    npm run dev:expand-catalog         # add famous works for artists with thin catalogs
    npm run dev:update-influences      # art-history lineage links (detail panels + 3D hall)
    npm run dev:migrate:artist-palette   # optional: JSONB column for PainterPalette enrichment
    npm run dev:import-painter-palette   # optional: metadata + influence links from Inputs/PainterPalette.csv
    npm run dev:migrate:checkup-flags # review/fixed flags for Checkup + debug mode (paintings)
    npm run dev:migrate:artist-checkup-flags # same flags for artist portraits (bio debug)
    npm run dev:migrate:painting-annotations # art-history notes on painting detail
    npm run dev:update-painting-annotations  # load curated notes (+ optional --wikipedia)
    npm run dev:fetch-images -- --limit=50         # random batch of missing images (10s per work)
    npm run dev:fetch-images -- --artist="Claude Monet"   # one artist in catalog order
    
  5. Development (public URL):

    npm run dev:web
    

    Open https://devgallery.mysuperlab.netcraze.pro (or http://localhost:5173 locally).

    Production: https://gallery.mysuperlab.netcraze.pro — see Documentation/environments.md and infra/docker/DEPLOY-truenas.md.

Deployed URLs

Environment URL Host
Development https://devgallery.mysuperlab.netcraze.pro Dev PC :5173 (Vite) + :3451 (API)
Production https://gallery.mysuperlab.netcraze.pro TrueNAS Docker :5173

Operator guide: Documentation/environments.md.

Development

Workflow: All changes are made and tested on dev (gallery_dev, https://devgallery.mysuperlab.netcraze.pro). Production is updated on a scheduled release (~weekly): promote DB/images, build/push the Docker image, restart TrueNAS. See Documentation/environments.md.

Public dev (Keenetic):

npm run dev:web   # Vite :5173, API :3451

Local HMR:

npm run dev:server   # API — PORT from .env
npm run dev:client   # http://localhost:5173 (proxies /api and /images)
S
Description
No description provided
Readme
12 GiB
Languages
TypeScript 49.8%
JavaScript 38.7%
CSS 7.8%
PowerShell 3.1%
PLpgSQL 0.3%
Other 0.3%