Danila KhodjaefandCursor f78c14f307 Fix debug upload persistence and UX; exclude prod audit log from DB restore
Uploads and fixes now bust browser cache via file-mtime keys in API
responses. Debug upload shows a centered loading overlay and blocks search
while uploading. Prod DB restore skips curator_audit_log.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 18:30:19 +03:00
2026-07-08 18:15:52 +03:00
2026-07-09 16:03:48 +03:00
2026-07-09 13:31:47 +03:00
2026-07-09 16:03:48 +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 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%