Danila Khodjaef 99b8559607 Speed up timeline load with portrait thumbs, bootstrap API, and caching.
Add catalog bootstrap endpoint, portrait thumbnail pipeline, lazy queued timeline images, gzip compression, and 3D texture throttling with code-split VirtualGallery.
2026-07-06 14:27:29 +03:00

Art Gallery

Interactive virtual art gallery: zoomable historical timeline 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/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 migrate
    npm run seed
    
  4. Enrich the catalog (recommended after seed):

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