# aabhro/reel architecture

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

- Interactive diagram: https://gitdiagram.com/aabhro/reel
- Repository: https://github.com/aabhro/reel

## Overview

Reel is a lightweight movie and TV discovery interface: users navigate a poster canvas, search or filter titles, inspect details, select TV episodes, and launch playback. The README documents the major features; the sampled `index.php` excerpt shows search parsing, genre loading, image caching, share handling, and startup. The README describes a single-file frontend as `reel.html`, while the source index identifies substantial application code in `index.php`; unsampled implementation details and connections are therefore represented only where documented.

Main entry points: [`index.php`](https://github.com/aabhro/reel/blob/main/index.php) (Poster Canvas)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery"]
  node_search["Advanced Search<br/>[index.php]"]
  node_filters["Genre and Rating Filters<br/>[index.php]"]
  node_feeds["Discovery Feeds<br/>[index.php]"]
  node_titledata["Title Results<br/>[index.php]"]
  node_genres["Genre Lists<br/>[index.php]"]
end

subgraph group_presentation["Canvas and Details"]
  node_canvas["Poster Canvas<br/>[index.php]"]
  node_navigation["Canvas Navigation<br/>[index.php]"]
  node_details["Title Details<br/>[index.php]"]
  node_episodes["TV Episode Selector<br/>[index.php]"]
  node_player["Playback Player<br/>[index.php]"]
  node_images["Poster Image Loading<br/>[index.php]"]
  node_share["Shared Title Links<br/>[index.php]"]
end

subgraph group_state["Local State"]
  node_titlecache[("Loaded Title Cache<br/>[index.php]")]
  node_genrecache[("Genre Cache<br/>[index.php]")]
end

subgraph group_integrations["External Services"]
  node_tmdb["TMDB API"]
  node_embed["Embed Service"]
end

node_viewer(("Viewer"))

node_viewer -->|"browses"| node_canvas
node_viewer -->|"enters query"| node_search
node_viewer -->|"opens title"| node_details
node_navigation -->|"moves through"| node_canvas
node_search -->|"sets query"| node_feeds
node_search -->|"sets filters"| node_filters
node_filters -->|"constrains results"| node_feeds
node_feeds -->|"requests titles"| node_tmdb
node_feeds -->|"loads results"| node_titledata
node_genres -->|"loads genres"| node_tmdb
node_genres -->|"caches lists"| node_genrecache
node_canvas -->|"uses cached titles"| node_titlecache
node_canvas -->|"loads posters"| node_images
node_titledata -->|"populates tiles"| node_canvas
node_details -->|"offers selection"| node_episodes
node_details -->|"starts playback"| node_player
node_episodes -->|"passes episode"| node_player
node_player -->|"opens playback"| node_embed
node_viewer -->|"copies link"| node_share
node_share -->|"opens shared title"| node_details

click node_canvas "https://github.com/aabhro/reel/blob/main/index.php"
click node_navigation "https://github.com/aabhro/reel/blob/main/index.php"
click node_search "https://github.com/aabhro/reel/blob/main/index.php"
click node_filters "https://github.com/aabhro/reel/blob/main/index.php"
click node_feeds "https://github.com/aabhro/reel/blob/main/index.php"
click node_titledata "https://github.com/aabhro/reel/blob/main/index.php"
click node_genres "https://github.com/aabhro/reel/blob/main/index.php"
click node_details "https://github.com/aabhro/reel/blob/main/index.php"
click node_episodes "https://github.com/aabhro/reel/blob/main/index.php"
click node_player "https://github.com/aabhro/reel/blob/main/index.php"
click node_images "https://github.com/aabhro/reel/blob/main/index.php"
click node_titlecache "https://github.com/aabhro/reel/blob/main/index.php"
click node_genrecache "https://github.com/aabhro/reel/blob/main/index.php"
click node_share "https://github.com/aabhro/reel/blob/main/index.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_search,node_filters,node_feeds,node_titledata,node_genres,node_viewer toneBlue
class node_canvas,node_navigation,node_details,node_episodes,node_player,node_images,node_share toneAmber
class node_titlecache,node_genrecache toneMint
class node_tmdb,node_embed toneRose
```

## Components

### Discovery

- [Advanced Search](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Genre and Rating Filters](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Discovery Feeds](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Title Results](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Genre Lists](https://github.com/aabhro/reel/blob/main/index.php): `index.php`

### Canvas and Details

- [Poster Canvas](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Canvas Navigation](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Title Details](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [TV Episode Selector](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Playback Player](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Poster Image Loading](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Shared Title Links](https://github.com/aabhro/reel/blob/main/index.php): `index.php`

### Local State

- [Loaded Title Cache](https://github.com/aabhro/reel/blob/main/index.php): `index.php`
- [Genre Cache](https://github.com/aabhro/reel/blob/main/index.php): `index.php`

### External Services

- **TMDB API**
- **Embed Service**

### Other components

- **Viewer**

## Connections

- Viewer → Poster Canvas: browses (evidence: `README.md`)
- Viewer → Advanced Search: enters query (evidence: `README.md`)
- Viewer → Title Details: opens title (evidence: `README.md`)
- Canvas Navigation → Poster Canvas: moves through (evidence: `README.md`)
- Advanced Search → Discovery Feeds: sets query (evidence: `index.php`)
- Advanced Search → Genre and Rating Filters: sets filters (evidence: `index.php`)
- Genre and Rating Filters → Discovery Feeds: constrains results (evidence: `README.md`)
- Discovery Feeds → TMDB API: requests titles (evidence: `README.md`)
- Discovery Feeds → Title Results: loads results (evidence: `README.md`)
- Genre Lists → TMDB API: loads genres (evidence: `index.php`)
- Genre Lists → Genre Cache: caches lists (evidence: `index.php`)
- Poster Canvas → Loaded Title Cache: uses cached titles (evidence: `README.md`)
- Poster Canvas → Poster Image Loading: loads posters (evidence: `index.php`)
- Title Results → Poster Canvas: populates tiles (evidence: `README.md`)
- Title Details → TV Episode Selector: offers selection (evidence: `README.md`)
- Title Details → Playback Player: starts playback (evidence: `README.md`)
- TV Episode Selector → Playback Player: passes episode (evidence: `README.md`)
- Playback Player → Embed Service: opens playback (evidence: `README.md`)
- Viewer → Shared Title Links: copies link (evidence: `index.php`)
- Shared Title Links → Title Details: opens shared title (evidence: `index.php`)
