# rakesh-mora/moviegraph architecture

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

- Interactive diagram: https://gitdiagram.com/rakesh-mora/moviegraph
- Repository: https://github.com/rakesh-mora/moviegraph

## Overview

MovieGraph is a graph-backed movie discovery application. Users browse and filter movies, open movie details, explore relationship-based connections, request weighted recommendations, or find the shortest path between two films. The React pages call a read-only Express API, whose controllers delegate to movie or recommendation services and parameterized Cypher queries against CognoDB. The README also documents CSV-based graph seeding and optional OMDB posters; those capabilities are included, though their implementation details were not sampled.

Main entry points: [`moviegraph-frontend/src/App.jsx`](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/App.jsx) (App routing), [`moviegraph-frontend/src/api/movieApi.js`](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/api/movieApi.js) (Movie API calls), [`server/src/config/database.js`](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/config/database.js) (Database driver), [`moviegraph-frontend/src/pages/MovieDetails.jsx`](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/MovieDetails.jsx) (Movie details)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Discovery interface"]
  node_app["App routing<br/>[App.jsx]"]
  node_home["Home page<br/>[Home.jsx]"]
  node_movies["Movie browsing<br/>[Movies.jsx]"]
  node_details["Movie details<br/>[MovieDetails.jsx]"]
  node_graph["Graph explorer<br/>[GraphExplorer.jsx]"]
  node_graphviz["Graph visualization<br/>[GraphViz.jsx]"]
  node_pathpage["Path explorer<br/>[PathExplorer.jsx]"]
  node_movieapi["Movie API calls<br/>[movieApi.js]"]
  node_client["Fetch client<br/>[client.js]"]
end

subgraph group_api["HTTP API"]
  node_backend["Express app<br/>[app.js]"]
  node_routes["Movie routes<br/>[movieRoutes.js]"]
  node_controller["Movie controller<br/>[movieController.js]"]
  node_health["Health controller"]
end

subgraph group_domain["Movie graph logic"]
  node_movie_service["Movie service<br/>[movieService.js]"]
  node_recommendation_service["Recommendation service"]
  node_movie_queries["Movie queries<br/>[movieQueries.js]"]
  node_recommendation_queries["Recommendation query"]
end

subgraph group_data["Graph data"]
  node_database["Database driver<br/>[database.js]"]
  node_cognodb[("CognoDB graph")]
  node_seed["CSV seeder<br/>[seed.js]"]
  node_csv["Movie graph CSVs"]
end

node_user(("Movie explorer"))
node_omdb["OMDB posters"]

node_user -->|"uses"| node_app
node_app -->|"routes"| node_home
node_app -->|"routes"| node_movies
node_app -->|"routes"| node_details
node_app -->|"routes"| node_graph
node_app -->|"routes"| node_pathpage
node_graph -->|"renders"| node_graphviz
node_home -->|"requests data"| node_movieapi
node_movies -->|"requests movies"| node_movieapi
node_details -->|"requests details"| node_movieapi
node_graph -->|"requests connections"| node_movieapi
node_pathpage -->|"requests paths"| node_movieapi
node_movieapi -->|"uses"| node_client
node_client -->|"HTTP requests"| node_backend
node_backend -->|"mounts"| node_routes
node_routes -->|"dispatches"| node_controller
node_controller -->|"calls"| node_movie_service
node_controller -->|"calls"| node_recommendation_service
node_movie_service -->|"runs queries"| node_movie_queries
node_recommendation_service -->|"runs query"| node_recommendation_queries
node_movie_service -->|"opens sessions"| node_database
node_recommendation_service -->|"opens sessions"| node_database
node_health -->|"checks connection"| node_database
node_database -->|"connects"| node_cognodb
node_movie_queries -->|"reads graph"| node_cognodb
node_recommendation_queries -->|"reads graph"| node_cognodb
node_csv -->|"loads from"| node_seed
node_seed -->|"seeds graph"| node_cognodb
node_details -.->|"loads posters"| node_omdb

click node_app "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/App.jsx"
click node_home "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/Home.jsx"
click node_movies "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/Movies.jsx"
click node_details "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/MovieDetails.jsx"
click node_graph "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/GraphExplorer.jsx"
click node_graphviz "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/components/graph/GraphViz.jsx"
click node_pathpage "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/PathExplorer.jsx"
click node_movieapi "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/api/movieApi.js"
click node_client "https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/api/client.js"
click node_backend "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/app.js"
click node_routes "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/routes/movieRoutes.js"
click node_controller "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/controllers/movieController.js"
click node_health "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/controllers/healthController.js"
click node_movie_service "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/services/movieService.js"
click node_recommendation_service "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/services/recommendationService.js"
click node_movie_queries "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/queries/movieQueries.js"
click node_recommendation_queries "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/queries/recommendationQueries.js"
click node_database "https://github.com/rakesh-mora/moviegraph/blob/master/server/src/config/database.js"
click node_seed "https://github.com/rakesh-mora/moviegraph/blob/master/server/scripts/seed.js"
click node_csv "https://github.com/rakesh-mora/moviegraph/tree/master/data"

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_app,node_home,node_movies,node_details,node_graph,node_graphviz,node_pathpage,node_movieapi,node_client toneBlue
class node_backend,node_routes,node_controller,node_health toneAmber
class node_movie_service,node_recommendation_service,node_movie_queries,node_recommendation_queries toneMint
class node_database,node_cognodb,node_seed,node_csv toneRose
class node_user,node_omdb toneIndigo
```

## Components

### Discovery interface

- [App routing](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/App.jsx): `moviegraph-frontend/src/App.jsx`
- [Home page](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/Home.jsx): `moviegraph-frontend/src/pages/Home.jsx`
- [Movie browsing](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/Movies.jsx): `moviegraph-frontend/src/pages/Movies.jsx`
- [Movie details](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/MovieDetails.jsx): `moviegraph-frontend/src/pages/MovieDetails.jsx`
- [Graph explorer](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/GraphExplorer.jsx): `moviegraph-frontend/src/pages/GraphExplorer.jsx`
- [Graph visualization](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/components/graph/GraphViz.jsx): `moviegraph-frontend/src/components/graph/GraphViz.jsx`
- [Path explorer](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/pages/PathExplorer.jsx): `moviegraph-frontend/src/pages/PathExplorer.jsx`
- [Movie API calls](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/api/movieApi.js): `moviegraph-frontend/src/api/movieApi.js`
- [Fetch client](https://github.com/rakesh-mora/moviegraph/blob/master/moviegraph-frontend/src/api/client.js): `moviegraph-frontend/src/api/client.js`

### HTTP API

- [Express app](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/app.js): `server/src/app.js`
- [Movie routes](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/routes/movieRoutes.js): `server/src/routes/movieRoutes.js`
- [Movie controller](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/controllers/movieController.js): `server/src/controllers/movieController.js`
- [Health controller](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/controllers/healthController.js): `server/src/controllers/healthController.js`

### Movie graph logic

- [Movie service](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/services/movieService.js): `server/src/services/movieService.js`
- [Recommendation service](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/services/recommendationService.js): `server/src/services/recommendationService.js`
- [Movie queries](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/queries/movieQueries.js): `server/src/queries/movieQueries.js`
- [Recommendation query](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/queries/recommendationQueries.js): `server/src/queries/recommendationQueries.js`

### Graph data

- [Database driver](https://github.com/rakesh-mora/moviegraph/blob/master/server/src/config/database.js): `server/src/config/database.js`
- **CognoDB graph**
- [CSV seeder](https://github.com/rakesh-mora/moviegraph/blob/master/server/scripts/seed.js): `server/scripts/seed.js`
- [Movie graph CSVs](https://github.com/rakesh-mora/moviegraph/tree/master/data): `data`

### Other components

- **Movie explorer**
- **OMDB posters**

## Connections

- Movie explorer → App routing: uses
- App routing → Home page: routes
- App routing → Movie browsing: routes
- App routing → Movie details: routes
- App routing → Graph explorer: routes
- App routing → Path explorer: routes
- Graph explorer → Graph visualization: renders
- Home page → Movie API calls: requests data
- Movie browsing → Movie API calls: requests movies
- Movie details → Movie API calls: requests details
- Graph explorer → Movie API calls: requests connections
- Path explorer → Movie API calls: requests paths
- Movie API calls → Fetch client: uses
- Fetch client → Express app: HTTP requests
- Express app → Movie routes: mounts
- Movie routes → Movie controller: dispatches
- Movie controller → Movie service: calls
- Movie controller → Recommendation service: calls
- Movie service → Movie queries: runs queries
- Recommendation service → Recommendation query: runs query
- Movie service → Database driver: opens sessions
- Recommendation service → Database driver: opens sessions
- Health controller → Database driver: checks connection
- Database driver → CognoDB graph: connects
- Movie queries → CognoDB graph: reads graph
- Recommendation query → CognoDB graph: reads graph
- Movie graph CSVs → CSV seeder: loads from
- CSV seeder → CognoDB graph: seeds graph
- Movie details → OMDB posters: loads posters
