# trieudb3317dev/digital-museum architecture

> Architecture diagram of the GitHub repository trieudb3317dev/digital-museum, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/trieudb3317dev/digital-museum
- Repository: https://github.com/trieudb3317dev/digital-museum

## Overview

Digital Museum is a public digital-heritage frontend with museum directories, artifact records, collections, exhibitions, search and virtual tours, alongside museum-admin tools for content and curation. Visitors browse or search published material, open linked records, and view tour scenes; editors manage artifacts and media, while curators organize collections, exhibitions and tour hotspots. Public pages currently mix in-memory repository data and the optional backend API adapter; the README says most public pages are not yet migrated. The supplied tree omits the documented backend, so it is represented only as an external API. Connections reflect shown imports/calls or README statements.

Main entry points: [`lib/backend-api.ts`](https://github.com/trieudb3317dev/digital-museum/blob/master/lib/backend-api.ts) (API adapter), [`app/page.tsx`](https://github.com/trieudb3317dev/digital-museum/blob/master/app/page.tsx) (Home), [`app/artifacts/[slug]/page.tsx`](https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/page.tsx) (Artifact record), [`components/viewers/tour-viewer.tsx`](https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/tour-viewer.tsx) (Tour viewer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public discovery"]
  node_home["Home<br/>[page.tsx]"]
  node_shell["Site shell<br/>[site.tsx]"]
  node_search["Search<br/>[search-client.tsx]"]
  node_museumdir["Museum directory<br/>[page.tsx]"]
  node_museumdetail["Museum detail<br/>[page.tsx]"]
end

subgraph group_content["Content records"]
  node_collection["Collections<br/>[page.tsx]"]
  node_collectiondetail["Collection detail<br/>[page.tsx]"]
  node_exhibitions["Exhibitions<br/>[page.tsx]"]
  node_exhibitiondetail["Exhibition detail<br/>[page.tsx]"]
  node_artifact["Artifact record<br/>[page.tsx]"]
  node_favorite["Favorites control"]
  node_narration["Narration player"]
end

subgraph group_immersive["Immersive media"]
  node_tours["Tour directory<br/>[page.tsx]"]
  node_tourdetail["Tour page<br/>[page.tsx]"]
  node_tourviewer["Tour viewer<br/>[tour-viewer.tsx]"]
  node_panorama["Panorama viewer"]
  node_virtualroom["Virtual room"]
  node_modelviewer["3D model viewer<br/>[model3d-viewer.tsx]"]
end

subgraph group_admin["Museum administration"]
  node_adminart["Artifact management<br/>[admin-client.tsx]"]
  node_curation["Curation workspace"]
  node_museummgmt["Museum management"]
end

subgraph group_data["Data access"]
  node_mockdata[("Demo dataset<br/>[data.ts]")]
  node_repositories["Repositories<br/>[repositories.ts]"]
  node_museumdata[("Museum directory data<br/>[vietnam-museums.ts]")]
  node_adapter["API adapter<br/>[backend-api.ts]"]
end

node_visitor(("Visitor"))
node_editor(("Museum editor"))
node_api{{"Backend API"}}

node_visitor -->|"opens"| node_home
node_visitor -->|"searches"| node_search
node_visitor -->|"browses"| node_museumdir
node_visitor -->|"browses"| node_collection
node_visitor -->|"browses"| node_exhibitions
node_visitor -->|"browses"| node_tours
node_home -->|"renders"| node_shell
node_home -->|"reads"| node_mockdata
node_home -->|"reads"| node_museumdata
node_home -->|"links to"| node_tours
node_museumdir -->|"reads"| node_museumdata
node_museumdetail -->|"reads"| node_repositories
node_repositories -->|"reads"| node_mockdata
node_search -->|"searches via"| node_adapter
node_collection -->|"loads via"| node_adapter
node_collectiondetail -->|"loads via"| node_adapter
node_exhibitions -->|"loads via"| node_adapter
node_exhibitiondetail -->|"loads via"| node_adapter
node_artifact -->|"loads via"| node_adapter
node_artifact -->|"renders"| node_favorite
node_artifact -->|"renders"| node_narration
node_artifact -->|"renders"| node_modelviewer
node_tours -->|"loads via"| node_adapter
node_tourdetail -->|"loads via"| node_adapter
node_tourdetail -->|"renders"| node_tourviewer
node_tourviewer -->|"uses"| node_panorama
node_tourviewer -->|"uses"| node_virtualroom
node_editor -->|"manages"| node_adminart
node_editor -->|"curates"| node_curation
node_editor -->|"manages"| node_museummgmt
node_adminart -->|"manages via"| node_adapter
node_curation -->|"curates via"| node_adapter
node_museummgmt -->|"manages via"| node_adapter
node_adapter -->|"requests"| node_api

click node_home "https://github.com/trieudb3317dev/digital-museum/blob/master/app/page.tsx"
click node_shell "https://github.com/trieudb3317dev/digital-museum/blob/master/components/site.tsx"
click node_search "https://github.com/trieudb3317dev/digital-museum/blob/master/app/search/search-client.tsx"
click node_museumdir "https://github.com/trieudb3317dev/digital-museum/blob/master/app/museums/page.tsx"
click node_museumdetail "https://github.com/trieudb3317dev/digital-museum/blob/master/app/museums/%5Bslug%5D/page.tsx"
click node_collection "https://github.com/trieudb3317dev/digital-museum/blob/master/app/collections/page.tsx"
click node_collectiondetail "https://github.com/trieudb3317dev/digital-museum/blob/master/app/collections/%5Bslug%5D/page.tsx"
click node_exhibitions "https://github.com/trieudb3317dev/digital-museum/blob/master/app/exhibitions/page.tsx"
click node_exhibitiondetail "https://github.com/trieudb3317dev/digital-museum/blob/master/app/exhibitions/%5Bslug%5D/page.tsx"
click node_artifact "https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/page.tsx"
click node_favorite "https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/favorite-button.tsx"
click node_narration "https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/narration-player.tsx"
click node_tours "https://github.com/trieudb3317dev/digital-museum/blob/master/app/tours/page.tsx"
click node_tourdetail "https://github.com/trieudb3317dev/digital-museum/blob/master/app/tours/%5Bslug%5D/page.tsx"
click node_tourviewer "https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/tour-viewer.tsx"
click node_panorama "https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/panorama-viewer.tsx"
click node_virtualroom "https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/virtual-room-3d.tsx"
click node_modelviewer "https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/model3d-viewer.tsx"
click node_adminart "https://github.com/trieudb3317dev/digital-museum/blob/master/app/admin/admin-client.tsx"
click node_curation "https://github.com/trieudb3317dev/digital-museum/blob/master/app/admin/curation/curation-client.tsx"
click node_museummgmt "https://github.com/trieudb3317dev/digital-museum/blob/master/app/admin/museums/museum-management-client.tsx"
click node_mockdata "https://github.com/trieudb3317dev/digital-museum/blob/master/lib/data.ts"
click node_repositories "https://github.com/trieudb3317dev/digital-museum/blob/master/lib/repositories.ts"
click node_museumdata "https://github.com/trieudb3317dev/digital-museum/blob/master/lib/vietnam-museums.ts"
click node_adapter "https://github.com/trieudb3317dev/digital-museum/blob/master/lib/backend-api.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_home,node_shell,node_search,node_museumdir,node_museumdetail toneBlue
class node_collection,node_collectiondetail,node_exhibitions,node_exhibitiondetail,node_artifact,node_favorite,node_narration toneAmber
class node_tours,node_tourdetail,node_tourviewer,node_panorama,node_virtualroom,node_modelviewer,node_api toneMint
class node_adminart,node_curation,node_museummgmt toneRose
class node_mockdata,node_repositories,node_museumdata,node_adapter,node_visitor,node_editor toneIndigo
```

## Components

### Public discovery

- [Home](https://github.com/trieudb3317dev/digital-museum/blob/master/app/page.tsx): `app/page.tsx`
- [Site shell](https://github.com/trieudb3317dev/digital-museum/blob/master/components/site.tsx): `components/site.tsx`
- [Search](https://github.com/trieudb3317dev/digital-museum/blob/master/app/search/search-client.tsx): `app/search/search-client.tsx`
- [Museum directory](https://github.com/trieudb3317dev/digital-museum/blob/master/app/museums/page.tsx): `app/museums/page.tsx`
- [Museum detail](https://github.com/trieudb3317dev/digital-museum/blob/master/app/museums/%5Bslug%5D/page.tsx): `app/museums/[slug]/page.tsx`

### Content records

- [Collections](https://github.com/trieudb3317dev/digital-museum/blob/master/app/collections/page.tsx): `app/collections/page.tsx`
- [Collection detail](https://github.com/trieudb3317dev/digital-museum/blob/master/app/collections/%5Bslug%5D/page.tsx): `app/collections/[slug]/page.tsx`
- [Exhibitions](https://github.com/trieudb3317dev/digital-museum/blob/master/app/exhibitions/page.tsx): `app/exhibitions/page.tsx`
- [Exhibition detail](https://github.com/trieudb3317dev/digital-museum/blob/master/app/exhibitions/%5Bslug%5D/page.tsx): `app/exhibitions/[slug]/page.tsx`
- [Artifact record](https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/page.tsx): `app/artifacts/[slug]/page.tsx`
- [Favorites control](https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/favorite-button.tsx): `app/artifacts/[slug]/favorite-button.tsx`
- [Narration player](https://github.com/trieudb3317dev/digital-museum/blob/master/app/artifacts/%5Bslug%5D/narration-player.tsx): `app/artifacts/[slug]/narration-player.tsx`

### Immersive media

- [Tour directory](https://github.com/trieudb3317dev/digital-museum/blob/master/app/tours/page.tsx): `app/tours/page.tsx`
- [Tour page](https://github.com/trieudb3317dev/digital-museum/blob/master/app/tours/%5Bslug%5D/page.tsx): `app/tours/[slug]/page.tsx`
- [Tour viewer](https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/tour-viewer.tsx): `components/viewers/tour-viewer.tsx`
- [Panorama viewer](https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/panorama-viewer.tsx): `components/viewers/panorama-viewer.tsx`
- [Virtual room](https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/virtual-room-3d.tsx): `components/viewers/virtual-room-3d.tsx`
- [3D model viewer](https://github.com/trieudb3317dev/digital-museum/blob/master/components/viewers/model3d-viewer.tsx): `components/viewers/model3d-viewer.tsx`

### Museum administration

- [Artifact management](https://github.com/trieudb3317dev/digital-museum/blob/master/app/admin/admin-client.tsx): `app/admin/admin-client.tsx`
- [Curation workspace](https://github.com/trieudb3317dev/digital-museum/blob/master/app/admin/curation/curation-client.tsx): `app/admin/curation/curation-client.tsx`
- [Museum management](https://github.com/trieudb3317dev/digital-museum/blob/master/app/admin/museums/museum-management-client.tsx): `app/admin/museums/museum-management-client.tsx`

### Data access

- [Demo dataset](https://github.com/trieudb3317dev/digital-museum/blob/master/lib/data.ts): `lib/data.ts`
- [Repositories](https://github.com/trieudb3317dev/digital-museum/blob/master/lib/repositories.ts): `lib/repositories.ts`
- [Museum directory data](https://github.com/trieudb3317dev/digital-museum/blob/master/lib/vietnam-museums.ts): `lib/vietnam-museums.ts`
- [API adapter](https://github.com/trieudb3317dev/digital-museum/blob/master/lib/backend-api.ts): `lib/backend-api.ts`

### Other components

- **Visitor**
- **Museum editor**
- **Backend API**

## Connections

- Visitor → Home: opens (evidence: `app/page.tsx`)
- Visitor → Search: searches (evidence: `app/search/search-client.tsx`)
- Visitor → Museum directory: browses (evidence: `README.md`)
- Visitor → Collections: browses (evidence: `README.md`)
- Visitor → Exhibitions: browses (evidence: `README.md`)
- Visitor → Tour directory: browses (evidence: `README.md`)
- Home → Site shell: renders (evidence: `app/page.tsx`)
- Home → Demo dataset: reads (evidence: `app/page.tsx`)
- Home → Museum directory data: reads (evidence: `app/page.tsx`)
- Home → Tour directory: links to (evidence: `app/page.tsx`)
- Museum directory → Museum directory data: reads (evidence: `app/museums/page.tsx`)
- Museum detail → Repositories: reads (evidence: `app/museums/[slug]/page.tsx`)
- Repositories → Demo dataset: reads (evidence: `lib/repositories.ts`)
- Search → API adapter: searches via (evidence: `app/search/search-client.tsx`)
- Collections → API adapter: loads via (evidence: `app/collections/page.tsx`)
- Collection detail → API adapter: loads via (evidence: `app/collections/[slug]/page.tsx`)
- Exhibitions → API adapter: loads via (evidence: `app/exhibitions/page.tsx`)
- Exhibition detail → API adapter: loads via (evidence: `app/exhibitions/[slug]/page.tsx`)
- Artifact record → API adapter: loads via (evidence: `app/artifacts/[slug]/page.tsx`)
- Artifact record → Favorites control: renders (evidence: `app/artifacts/[slug]/page.tsx`)
- Artifact record → Narration player: renders (evidence: `app/artifacts/[slug]/page.tsx`)
- Artifact record → 3D model viewer: renders (evidence: `app/artifacts/[slug]/page.tsx`)
- Tour directory → API adapter: loads via (evidence: `app/tours/page.tsx`)
- Tour page → API adapter: loads via (evidence: `app/tours/[slug]/page.tsx`)
- Tour page → Tour viewer: renders (evidence: `app/tours/[slug]/page.tsx`)
- Tour viewer → Panorama viewer: uses (evidence: `components/viewers/tour-viewer.tsx`)
- Tour viewer → Virtual room: uses (evidence: `components/viewers/tour-viewer.tsx`)
- Museum editor → Artifact management: manages (evidence: `README.md`)
- Museum editor → Curation workspace: curates (evidence: `README.md`)
- Museum editor → Museum management: manages (evidence: `README.md`)
- Artifact management → API adapter: manages via (evidence: `app/admin/admin-client.tsx`)
- Curation workspace → API adapter: curates via (evidence: `app/admin/curation/curation-client.tsx`)
- Museum management → API adapter: manages via (evidence: `app/admin/museums/museum-management-client.tsx`)
- API adapter → Backend API: requests (evidence: `README.md`)
