Redesign 3D gallery as single hall per artist with exit navigation.

Restore React client source, add hall-to-hall navigation via painting influences grouped by movement, and update documentation.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Danila KhodjaefandCursor committed 2026-06-19 10:10:13 +03:00
1 parent 44d3d4359a
commit 08f99d7a29
25 files changed
+2954 -218

No files matched your search

+120
View File
@@ -0,0 +1,120 @@
export interface HistoricalEra {
id: number;
name: string;
start_year: number;
end_year: number;
start_definite: boolean;
end_definite: boolean;
description: string;
sort_order: number;
}
export interface ArtMovement {
id: number;
name: string;
start_year: number;
end_year: number;
start_definite: boolean;
end_definite: boolean;
era_id: number;
era_name?: string;
description: string;
color: string;
}
export interface Artist {
id: number;
name: string;
birth_year: number;
death_year: number;
movement_id: number;
movement_name?: string;
movement_color?: string;
portrait_path: string;
bio_short: string;
bio_full: string;
wikipedia_title: string;
century: number;
}
export interface ArtistPeriod {
id: number;
artist_id: number;
name: string;
start_year: number;
end_year: number;
description: string;
sort_order: number;
}
export interface Painting {
id: number;
artist_id: number;
period_id: number;
title: string;
year: number;
year_end?: number;
description: string;
image_path: string;
thumbnail_path?: string;
wikipedia_title: string;
sort_order: number;
artist_name?: string;
}
export interface InfluenceLink {
notes: string;
source: string;
aspects?: string;
quote?: string;
source_author?: string;
source_url?: string;
id: number;
title: string;
year: number;
image_path: string;
artist_name: string;
artist_id: number;
}
export interface PaintingDetail {
painting: Painting & { artist_name: string; artist_portrait: string };
influencedBy: InfluenceLink[];
influenced: InfluenceLink[];
}
export interface ArtistDetail {
artist: Artist & { movement_name: string };
periods: ArtistPeriod[];
paintings: Painting[];
}
export interface TimelineData {
eras: HistoricalEra[];
movements: ArtMovement[];
}
export interface YearBounds {
min_year: number;
max_year: number;
}
export interface NavigationArtist {
id: number;
name: string;
birth_year: number | null;
death_year: number | null;
portrait_path: string | null;
}
export interface MovementArtistGroup {
movement_id: number | null;
movement_name: string;
movement_color: string;
artists: NavigationArtist[];
}
export interface ArtistNavigation {
predecessors: MovementArtistGroup[];
successors: MovementArtistGroup[];
}