# rosteleset/sesameportal architecture

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

- Interactive diagram: https://gitdiagram.com/rosteleset/sesameportal
- Repository: https://github.com/rosteleset/sesameportal

## Overview

SesamePortal is a PHP web portal for administering SesameDVR installations and viewing camera streams. The main workflow routes a user's request through the application, authenticates it, and serves an administration or viewer experience; camera configuration can then be synchronized with a DVR, while viewer pages use DVR-backed preview, playback, map, and wall capabilities. The graph reflects the documented product capabilities, but several feature connections are based on the README and tree because their implementation was not sampled.

Main entry points: [`app/App.php`](https://github.com/rosteleset/sesameportal/blob/main/app/App.php) (Request router), [`app/Pages`](https://github.com/rosteleset/sesameportal/tree/main/app/Pages) (Admin pages), [`app/DB.php`](https://github.com/rosteleset/sesameportal/blob/main/app/DB.php) (Portal database), [`app/Repo.php`](https://github.com/rosteleset/sesameportal/blob/main/app/Repo.php) (Data repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Web application"]
  node_entry["Web entry<br/>[index.php]"]
  node_router["Request router<br/>[App.php]"]
  node_auth["Authentication<br/>[Auth.php]"]
end

subgraph group_admin["Administration"]
  node_adminpages["Admin pages"]
  node_adminapi["Admin APIs"]
  node_audit["Audit log<br/>[Audit.php]"]
  node_settings["Portal settings<br/>[PortalSettings.php]"]
  node_update["Portal updates"]
end

subgraph group_viewer["Camera viewing"]
  node_viewerpages["List and player<br/>[ViewerPages.php]"]
  node_map["Camera map<br/>[MapPages.php]"]
  node_walls["Saved video walls<br/>[VideoWallPages.php]"]
  node_walldata["Wall management<br/>[VideoWalls.php]"]
end

subgraph group_integration["DVR and maps"]
  node_tokens["Playback tokens<br/>[TokenService.php]"]
  node_dvrclient["DVR client<br/>[DvrClient.php]"]
  node_maptiles["Map tiles service"]
end

subgraph group_data["Portal data"]
  node_db[("Portal database<br/>[DB.php]")]
  node_repo["Data repository<br/>[Repo.php]"]
end

node_user(("Portal user"))
node_dvr["SesameDVR server"]
node_google["Google Maps"]

node_user -->|"requests pages"| node_entry
node_entry -->|"starts application"| node_router
node_router -->|"migrates storage"| node_db
node_router -->|"starts session"| node_auth
node_auth -->|"checks identity"| node_db
node_router -->|"dispatches admin routes"| node_adminpages
node_router -->|"dispatches API routes"| node_adminapi
node_router -->|"dispatches viewer routes"| node_viewerpages
node_router -->|"dispatches map routes"| node_map
node_router -->|"dispatches wall routes"| node_walls
node_adminpages -->|"reads records"| node_repo
node_adminapi -->|"writes records"| node_db
node_repo -->|"queries records"| node_db
node_adminpages -->|"requests camera sync"| node_dvrclient
node_adminapi -->|"requests camera sync"| node_dvrclient
node_dvrclient -->|"loads camera server"| node_repo
node_dvrclient -->|"manages DVR streams"| node_dvr
node_viewerpages -->|"loads cameras"| node_repo
node_viewerpages -->|"obtains playback token"| node_tokens
node_viewerpages -->|"requests preview playback"| node_dvr
node_map -->|"loads mapped cameras"| node_repo
node_map -.->|"requests map tiles"| node_maptiles
node_maptiles -.->|"fetches map data"| node_google
node_walls -->|"manages saved layouts"| node_walldata
node_walldata -->|"stores layouts"| node_db
node_walls -->|"obtains playback token"| node_tokens
node_walls -->|"embeds camera playback"| node_dvr
node_settings -->|"stores preferences"| node_db
node_adminpages -->|"updates portal settings"| node_settings
node_adminpages -->|"checks or runs update"| node_update
node_update -->|"returns update status"| node_user
node_adminpages -->|"records admin actions"| node_audit
node_audit -->|"stores audit events"| node_db

click node_entry "https://github.com/rosteleset/sesameportal/blob/main/public/index.php"
click node_router "https://github.com/rosteleset/sesameportal/blob/main/app/App.php"
click node_auth "https://github.com/rosteleset/sesameportal/blob/main/app/Auth.php"
click node_db "https://github.com/rosteleset/sesameportal/blob/main/app/DB.php"
click node_repo "https://github.com/rosteleset/sesameportal/blob/main/app/Repo.php"
click node_adminpages "https://github.com/rosteleset/sesameportal/tree/main/app/Pages"
click node_adminapi "https://github.com/rosteleset/sesameportal/tree/main/app/Api"
click node_tokens "https://github.com/rosteleset/sesameportal/blob/main/app/TokenService.php"
click node_audit "https://github.com/rosteleset/sesameportal/blob/main/app/Audit.php"
click node_dvrclient "https://github.com/rosteleset/sesameportal/blob/main/app/DvrClient.php"
click node_viewerpages "https://github.com/rosteleset/sesameportal/blob/main/app/Pages/ViewerPages.php"
click node_map "https://github.com/rosteleset/sesameportal/blob/main/app/Pages/MapPages.php"
click node_maptiles "https://github.com/rosteleset/sesameportal/blob/main/app/MapTilesService.php"
click node_walls "https://github.com/rosteleset/sesameportal/blob/main/app/VideoWallPages.php"
click node_walldata "https://github.com/rosteleset/sesameportal/blob/main/app/VideoWalls.php"
click node_settings "https://github.com/rosteleset/sesameportal/blob/main/app/PortalSettings.php"
click node_update "https://github.com/rosteleset/sesameportal/blob/main/app/PortalUpdateService.php"

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_entry,node_router,node_auth,node_user toneBlue
class node_adminpages,node_adminapi,node_audit,node_settings,node_update toneAmber
class node_viewerpages,node_map,node_walls,node_walldata,node_dvr toneMint
class node_tokens,node_dvrclient,node_maptiles toneRose
class node_db,node_repo,node_google toneIndigo
```

## Components

### Web application

- [Web entry](https://github.com/rosteleset/sesameportal/blob/main/public/index.php): `public/index.php`
- [Request router](https://github.com/rosteleset/sesameportal/blob/main/app/App.php): `app/App.php`
- [Authentication](https://github.com/rosteleset/sesameportal/blob/main/app/Auth.php): `app/Auth.php`

### Administration

- [Admin pages](https://github.com/rosteleset/sesameportal/tree/main/app/Pages): `app/Pages`
- [Admin APIs](https://github.com/rosteleset/sesameportal/tree/main/app/Api): `app/Api`
- [Audit log](https://github.com/rosteleset/sesameportal/blob/main/app/Audit.php): `app/Audit.php`
- [Portal settings](https://github.com/rosteleset/sesameportal/blob/main/app/PortalSettings.php): `app/PortalSettings.php`
- [Portal updates](https://github.com/rosteleset/sesameportal/blob/main/app/PortalUpdateService.php): `app/PortalUpdateService.php`

### Camera viewing

- [List and player](https://github.com/rosteleset/sesameportal/blob/main/app/Pages/ViewerPages.php): `app/Pages/ViewerPages.php`
- [Camera map](https://github.com/rosteleset/sesameportal/blob/main/app/Pages/MapPages.php): `app/Pages/MapPages.php`
- [Saved video walls](https://github.com/rosteleset/sesameportal/blob/main/app/VideoWallPages.php): `app/VideoWallPages.php`
- [Wall management](https://github.com/rosteleset/sesameportal/blob/main/app/VideoWalls.php): `app/VideoWalls.php`

### DVR and maps

- [Playback tokens](https://github.com/rosteleset/sesameportal/blob/main/app/TokenService.php): `app/TokenService.php`
- [DVR client](https://github.com/rosteleset/sesameportal/blob/main/app/DvrClient.php): `app/DvrClient.php`
- [Map tiles service](https://github.com/rosteleset/sesameportal/blob/main/app/MapTilesService.php): `app/MapTilesService.php`

### Portal data

- [Portal database](https://github.com/rosteleset/sesameportal/blob/main/app/DB.php): `app/DB.php`
- [Data repository](https://github.com/rosteleset/sesameportal/blob/main/app/Repo.php): `app/Repo.php`

### Other components

- **Portal user**
- **SesameDVR server**
- **Google Maps**

## Connections

- Portal user → Web entry: requests pages
- Web entry → Request router: starts application
- Request router → Portal database: migrates storage
- Request router → Authentication: starts session
- Authentication → Portal database: checks identity
- Request router → Admin pages: dispatches admin routes
- Request router → Admin APIs: dispatches API routes
- Request router → List and player: dispatches viewer routes
- Request router → Camera map: dispatches map routes
- Request router → Saved video walls: dispatches wall routes
- Admin pages → Data repository: reads records
- Admin APIs → Portal database: writes records
- Data repository → Portal database: queries records
- Admin pages → DVR client: requests camera sync
- Admin APIs → DVR client: requests camera sync
- DVR client → Data repository: loads camera server
- DVR client → SesameDVR server: manages DVR streams
- List and player → Data repository: loads cameras
- List and player → Playback tokens: obtains playback token
- List and player → SesameDVR server: requests preview playback
- Camera map → Data repository: loads mapped cameras
- Camera map → Map tiles service: requests map tiles
- Map tiles service → Google Maps: fetches map data
- Saved video walls → Wall management: manages saved layouts
- Wall management → Portal database: stores layouts
- Saved video walls → Playback tokens: obtains playback token
- Saved video walls → SesameDVR server: embeds camera playback
- Portal settings → Portal database: stores preferences
- Admin pages → Portal settings: updates portal settings
- Admin pages → Portal updates: checks or runs update
- Portal updates → Portal user: returns update status
- Admin pages → Audit log: records admin actions
- Audit log → Portal database: stores audit events
