# hanif-089/movix architecture

> Architecture diagram of the GitHub repository hanif-089/movix, 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/hanif-089/movix
- Repository: https://github.com/hanif-089/movix

## Overview

MOVIX is a movie-discovery application: users browse catalog pages or search by title/natural-language prompt, then inspect movies and save favorites; authenticated users can also manage profiles and receive preference-based recommendations. The visible runtime is a React client and Express API backed by MongoDB, with embedding generation and semantic-search services; a separate data pipeline prepares and imports movie data. The README describes a FastAPI/Gemini service, but no such service appears in this tree. Several backend links are supported by the source index rather than inspected implementation excerpts.

Main entry points: [`server/src/app.js`](https://github.com/hanif-089/movix/blob/main/server/src/app.js) (API application), [`server/src/services/search.js`](https://github.com/hanif-089/movix/blob/main/server/src/services/search.js) (Search service), [`server/src/controllers/user.controller.js`](https://github.com/hanif-089/movix/blob/main/server/src/controllers/user.controller.js) (Profile handlers), [`server/src/models/Movie.js`](https://github.com/hanif-089/movix/blob/main/server/src/models/Movie.js) (Movie records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React discovery client"]
  node_app["Client app<br/>[App.jsx]"]
  node_movie_routes["Movie pages<br/>[movieRoutes.jsx]"]
  node_user_routes["User pages<br/>[userRoutes.jsx]"]
  node_search_page["Search page<br/>[Search.jsx]"]
  node_movie_api["Movie API client<br/>[movie.js]"]
  node_user_api["User API client<br/>[user.js]"]
  node_auth_context["Auth context<br/>[AuthContext.jsx]"]
end

subgraph group_api["Express API"]
  node_api_app["API application<br/>[app.js]"]
  node_movie_controller["Catalog handlers"]
end

subgraph group_identity["Accounts and preferences"]
  node_auth_middleware["Auth middleware<br/>[auth.middleware.js]"]
  node_user_controller["Profile handlers<br/>[user.controller.js]"]
  node_watchlist_controller["Watchlist handlers"]
  node_user_model[("User records<br/>[User.js]")]
end

subgraph group_search["Search and recommendations"]
  node_search_controller["Search handlers"]
  node_embedding_service["Embedding service<br/>[embedding.js]"]
  node_search_service["Search service<br/>[search.js]"]
  node_history_model[("Search history<br/>[SearchHistory.js]")]
end

subgraph group_catalog["Movie data"]
  node_movie_model[("Movie records<br/>[Movie.js]")]
  node_pipeline["Movie data pipeline"]
end

node_viewer(("Viewer"))
node_embedding_provider{{"Embedding provider"}}

node_viewer -.->|"uses"| node_app
node_app -->|"routes to"| node_movie_routes
node_app -->|"routes to"| node_user_routes
node_search_page -->|"requests search"| node_movie_api
node_viewer -.->|"REST requests"| node_api_app
node_api_app -->|"mounts search routes"| node_search_controller
node_api_app -->|"mounts movie routes"| node_movie_controller
node_api_app -->|"mounts user routes"| node_user_controller
node_search_controller -->|"generates vectors"| node_embedding_service
node_search_controller -->|"searches movies"| node_search_service
node_movie_controller -->|"queries catalog"| node_movie_model
node_movie_controller -->|"finds similar"| node_search_service
node_search_service -->|"queries vectors"| node_movie_model
node_search_service -->|"records queries"| node_history_model
node_user_controller -->|"reads preferences"| node_user_model
node_user_controller -->|"embeds preferences"| node_embedding_service
node_user_controller -->|"gets recommendations"| node_search_service
node_watchlist_controller -->|"updates watchlist"| node_user_model
node_watchlist_controller -->|"checks movies"| node_movie_model
node_auth_middleware -->|"loads user"| node_user_model
node_embedding_service -->|"requests embeddings"| node_embedding_provider
node_pipeline -.->|"imports movie data"| node_movie_model
node_user_api -.->|"calls profile APIs"| node_api_app
node_movie_api -.->|"calls movie APIs"| node_api_app

click node_app "https://github.com/hanif-089/movix/blob/main/client/src/App.jsx"
click node_movie_routes "https://github.com/hanif-089/movix/blob/main/client/src/routes/movieRoutes.jsx"
click node_user_routes "https://github.com/hanif-089/movix/blob/main/client/src/routes/userRoutes.jsx"
click node_search_page "https://github.com/hanif-089/movix/blob/main/client/src/pages/Search.jsx"
click node_movie_api "https://github.com/hanif-089/movix/blob/main/client/src/api/movie.js"
click node_user_api "https://github.com/hanif-089/movix/blob/main/client/src/api/user.js"
click node_auth_context "https://github.com/hanif-089/movix/blob/main/client/src/context/AuthContext.jsx"
click node_api_app "https://github.com/hanif-089/movix/blob/main/server/src/app.js"
click node_movie_controller "https://github.com/hanif-089/movix/blob/main/server/src/controllers/movie.controller.js"
click node_auth_middleware "https://github.com/hanif-089/movix/blob/main/server/src/middlewares/auth.middleware.js"
click node_user_controller "https://github.com/hanif-089/movix/blob/main/server/src/controllers/user.controller.js"
click node_watchlist_controller "https://github.com/hanif-089/movix/blob/main/server/src/controllers/watchlist.controller.js"
click node_search_controller "https://github.com/hanif-089/movix/blob/main/server/src/controllers/search.controller.js"
click node_embedding_service "https://github.com/hanif-089/movix/blob/main/server/src/services/embedding.js"
click node_search_service "https://github.com/hanif-089/movix/blob/main/server/src/services/search.js"
click node_movie_model "https://github.com/hanif-089/movix/blob/main/server/src/models/Movie.js"
click node_user_model "https://github.com/hanif-089/movix/blob/main/server/src/models/User.js"
click node_history_model "https://github.com/hanif-089/movix/blob/main/server/src/models/SearchHistory.js"
click node_pipeline "https://github.com/hanif-089/movix/tree/main/data-pipeline/scripts"

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_movie_routes,node_user_routes,node_search_page,node_movie_api,node_user_api,node_auth_context,node_viewer toneBlue
class node_api_app,node_movie_controller toneAmber
class node_auth_middleware,node_user_controller,node_watchlist_controller,node_user_model toneMint
class node_search_controller,node_embedding_service,node_search_service,node_history_model toneRose
class node_movie_model,node_pipeline,node_embedding_provider toneIndigo
```

## Components

### React discovery client

- [Client app](https://github.com/hanif-089/movix/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Movie pages](https://github.com/hanif-089/movix/blob/main/client/src/routes/movieRoutes.jsx): `client/src/routes/movieRoutes.jsx`
- [User pages](https://github.com/hanif-089/movix/blob/main/client/src/routes/userRoutes.jsx): `client/src/routes/userRoutes.jsx`
- [Search page](https://github.com/hanif-089/movix/blob/main/client/src/pages/Search.jsx): `client/src/pages/Search.jsx`
- [Movie API client](https://github.com/hanif-089/movix/blob/main/client/src/api/movie.js): `client/src/api/movie.js`
- [User API client](https://github.com/hanif-089/movix/blob/main/client/src/api/user.js): `client/src/api/user.js`
- [Auth context](https://github.com/hanif-089/movix/blob/main/client/src/context/AuthContext.jsx): `client/src/context/AuthContext.jsx`

### Express API

- [API application](https://github.com/hanif-089/movix/blob/main/server/src/app.js): `server/src/app.js`
- [Catalog handlers](https://github.com/hanif-089/movix/blob/main/server/src/controllers/movie.controller.js): `server/src/controllers/movie.controller.js`

### Accounts and preferences

- [Auth middleware](https://github.com/hanif-089/movix/blob/main/server/src/middlewares/auth.middleware.js): `server/src/middlewares/auth.middleware.js`
- [Profile handlers](https://github.com/hanif-089/movix/blob/main/server/src/controllers/user.controller.js): `server/src/controllers/user.controller.js`
- [Watchlist handlers](https://github.com/hanif-089/movix/blob/main/server/src/controllers/watchlist.controller.js): `server/src/controllers/watchlist.controller.js`
- [User records](https://github.com/hanif-089/movix/blob/main/server/src/models/User.js): `server/src/models/User.js`

### Search and recommendations

- [Search handlers](https://github.com/hanif-089/movix/blob/main/server/src/controllers/search.controller.js): `server/src/controllers/search.controller.js`
- [Embedding service](https://github.com/hanif-089/movix/blob/main/server/src/services/embedding.js): `server/src/services/embedding.js`
- [Search service](https://github.com/hanif-089/movix/blob/main/server/src/services/search.js): `server/src/services/search.js`
- [Search history](https://github.com/hanif-089/movix/blob/main/server/src/models/SearchHistory.js): `server/src/models/SearchHistory.js`

### Movie data

- [Movie records](https://github.com/hanif-089/movix/blob/main/server/src/models/Movie.js): `server/src/models/Movie.js`
- [Movie data pipeline](https://github.com/hanif-089/movix/tree/main/data-pipeline/scripts): `data-pipeline/scripts`

### Other components

- **Viewer**
- **Embedding provider**

## Connections

- Viewer → Client app: uses (evidence: `README.md`)
- Client app → Movie pages: routes to (evidence: `client/src/App.jsx`)
- Client app → User pages: routes to (evidence: `client/src/App.jsx`)
- Search page → Movie API client: requests search (evidence: `client/src/pages/Search.jsx`)
- Viewer → API application: REST requests (evidence: `README.md`)
- API application → Search handlers: mounts search routes (evidence: `server/src/app.js`)
- API application → Catalog handlers: mounts movie routes (evidence: `server/src/app.js`)
- API application → Profile handlers: mounts user routes (evidence: `server/src/app.js`)
- Search handlers → Embedding service: generates vectors (evidence: `server/src/controllers/search.controller.js`)
- Search handlers → Search service: searches movies (evidence: `server/src/controllers/search.controller.js`)
- Catalog handlers → Movie records: queries catalog (evidence: `server/src/controllers/movie.controller.js`)
- Catalog handlers → Search service: finds similar (evidence: `server/src/controllers/movie.controller.js`)
- Search service → Movie records: queries vectors (evidence: `server/src/services/search.js`)
- Search service → Search history: records queries (evidence: `server/src/services/search.js`)
- Profile handlers → User records: reads preferences (evidence: `server/src/controllers/user.controller.js`)
- Profile handlers → Embedding service: embeds preferences (evidence: `server/src/controllers/user.controller.js`)
- Profile handlers → Search service: gets recommendations (evidence: `server/src/controllers/user.controller.js`)
- Watchlist handlers → User records: updates watchlist (evidence: `server/src/controllers/watchlist.controller.js`)
- Watchlist handlers → Movie records: checks movies (evidence: `server/src/controllers/watchlist.controller.js`)
- Auth middleware → User records: loads user (evidence: `server/src/middlewares/auth.middleware.js`)
- Embedding service → Embedding provider: requests embeddings (evidence: `server/src/services/embedding.js`)
- Movie data pipeline → Movie records: imports movie data
- User API client → API application: calls profile APIs
- Movie API client → API application: calls movie APIs
