# dxxdev/ai-creative-hub architecture

> Architecture diagram of the GitHub repository dxxdev/ai-creative-hub, 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/dxxdev/ai-creative-hub
- Repository: https://github.com/dxxdev/ai-creative-hub

## Overview

AI Creative Hub is a web application for account-based creative publishing. Users register or sign in, then create posts that can include uploaded images; posts are processed asynchronously before publication, and clients can browse or view posts. The API also supports email verification, password recovery, session refresh/logout, media upload and real-time processing updates. The tree and sampled files establish these capabilities and several key connections; source for some routes and services was not sampled, so uncertain internal wiring is omitted.

Main entry points: [`apps/api/src/server.ts`](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/server.ts) (API server), [`apps/api/src/services/auth.service.ts`](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/auth.service.ts) (Auth service), [`apps/api/src/queues/image-processing.worker.ts`](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/queues/image-processing.worker.ts) (Image worker), [`apps/web/lib/api-client.ts`](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/lib/api-client.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web client"]
  node_auth_pages["Auth pages<br/>[page.tsx]"]
  node_home_page["Home page<br/>[page.tsx]"]
  node_api_client["API client<br/>[api-client.ts]"]
  node_auth_store["Auth store<br/>[auth.store.ts]"]
end

subgraph group_identity["Identity and accounts"]
  node_api_server["API server<br/>[server.ts]"]
  node_auth_routes["Auth routes<br/>[auth.routes.ts]"]
  node_login_controller["Login controller"]
  node_auth_service["Auth service<br/>[auth.service.ts]"]
  node_auth_flows["Account flows"]
  node_mailer["Email delivery<br/>[mailer.ts]"]
end

subgraph group_publishing["Posts and media"]
  node_posts_routes["Post routes<br/>[posts.routes.ts]"]
  node_posts_controller["Post controller"]
  node_posts_service["Post service<br/>[posts.service.ts]"]
  node_media_routes["Media routes<br/>[media.routes.ts]"]
  node_media_controller["Media controller"]
  node_local_storage["Local storage"]
end

subgraph group_async["Background processing"]
  node_image_queue["Image queue"]
  node_image_worker["Image worker"]
  node_socket["Live updates<br/>[socket.ts]"]
end

subgraph group_shared["Shared contracts"]
  node_contracts["Shared schemas<br/>[index.ts]"]
end

node_visitor(("Visitor"))
node_database[("Postgres<br/>[prisma.ts]")]
node_redis[("Redis<br/>[redis.ts]")]
node_email_service["Email provider"]

node_visitor -->|"uses"| node_auth_pages
node_visitor -->|"browses"| node_home_page
node_auth_pages -->|"requests"| node_api_client
node_home_page -->|"requests"| node_api_client
node_api_client -->|"fetches API"| node_api_server
node_api_client -->|"refreshes session"| node_auth_store
node_api_server -->|"mounts routes"| node_auth_routes
node_auth_routes -->|"dispatches login"| node_login_controller
node_login_controller -->|"calls login"| node_auth_service
node_auth_service -->|"reads/writes"| node_database
node_auth_service -->|"stores reset token"| node_redis
node_auth_service -->|"queues reset email"| node_mailer
node_mailer -.->|"sends email"| node_email_service
node_api_server -->|"mounts routes"| node_posts_routes
node_posts_routes -->|"dispatches"| node_posts_controller
node_posts_controller -->|"calls"| node_posts_service
node_posts_service -->|"reads/writes"| node_database
node_api_server -->|"mounts routes"| node_media_routes
node_media_routes -->|"dispatches"| node_media_controller
node_media_controller -->|"stores upload"| node_local_storage
node_api_server -->|"registers worker"| node_image_worker
node_image_worker -->|"reads source file"| node_local_storage
node_image_worker -->|"updates post"| node_database
node_image_worker -->|"emits status"| node_socket
node_posts_controller -->|"uses schemas"| node_contracts
node_auth_routes -->|"validates inputs"| node_contracts

click node_auth_pages "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/app/(auth)/login/page.tsx"
click node_home_page "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/app/page.tsx"
click node_api_client "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/lib/api-client.ts"
click node_auth_store "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/store/auth.store.ts"
click node_api_server "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/server.ts"
click node_auth_routes "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/routes/auth.routes.ts"
click node_login_controller "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/modules/auth/login.controller.ts"
click node_auth_service "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/auth.service.ts"
click node_auth_flows "https://github.com/dxxdev/ai-creative-hub/tree/main/apps/api/src/modules/auth"
click node_mailer "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/lib/mailer.ts"
click node_database "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/lib/prisma.ts"
click node_redis "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/lib/redis.ts"
click node_posts_routes "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/routes/posts.routes.ts"
click node_posts_controller "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/controllers/posts.controller.ts"
click node_posts_service "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/posts.service.ts"
click node_media_routes "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/routes/media.routes.ts"
click node_media_controller "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/controllers/media.controller.ts"
click node_local_storage "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/local-storage.service.ts"
click node_image_queue "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/queues/image-processing.queue.ts"
click node_image_worker "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/queues/image-processing.worker.ts"
click node_socket "https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/websocket/socket.ts"
click node_contracts "https://github.com/dxxdev/ai-creative-hub/blob/main/packages/shared/src/schemas/index.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_auth_pages,node_home_page,node_api_client,node_auth_store toneBlue
class node_api_server,node_auth_routes,node_login_controller,node_auth_service,node_auth_flows,node_mailer,node_database,node_redis toneAmber
class node_posts_routes,node_posts_controller,node_posts_service,node_media_routes,node_media_controller,node_local_storage toneMint
class node_image_queue,node_image_worker,node_socket toneRose
class node_contracts,node_visitor,node_email_service toneIndigo
```

## Components

### Web client

- [Auth pages](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/app/(auth)/login/page.tsx): `apps/web/app/(auth)/login/page.tsx`
- [Home page](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/app/page.tsx): `apps/web/app/page.tsx`
- [API client](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/lib/api-client.ts): `apps/web/lib/api-client.ts`
- [Auth store](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/web/store/auth.store.ts): `apps/web/store/auth.store.ts`

### Identity and accounts

- [API server](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/server.ts): `apps/api/src/server.ts`
- [Auth routes](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/routes/auth.routes.ts): `apps/api/src/routes/auth.routes.ts`
- [Login controller](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/modules/auth/login.controller.ts): `apps/api/src/modules/auth/login.controller.ts`
- [Auth service](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/auth.service.ts): `apps/api/src/services/auth.service.ts`
- [Account flows](https://github.com/dxxdev/ai-creative-hub/tree/main/apps/api/src/modules/auth): `apps/api/src/modules/auth`
- [Email delivery](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/lib/mailer.ts): `apps/api/src/lib/mailer.ts`

### Posts and media

- [Post routes](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/routes/posts.routes.ts): `apps/api/src/routes/posts.routes.ts`
- [Post controller](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/controllers/posts.controller.ts): `apps/api/src/controllers/posts.controller.ts`
- [Post service](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/posts.service.ts): `apps/api/src/services/posts.service.ts`
- [Media routes](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/routes/media.routes.ts): `apps/api/src/routes/media.routes.ts`
- [Media controller](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/controllers/media.controller.ts): `apps/api/src/controllers/media.controller.ts`
- [Local storage](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/services/local-storage.service.ts): `apps/api/src/services/local-storage.service.ts`

### Background processing

- [Image queue](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/queues/image-processing.queue.ts): `apps/api/src/queues/image-processing.queue.ts`
- [Image worker](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/queues/image-processing.worker.ts): `apps/api/src/queues/image-processing.worker.ts`
- [Live updates](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/websocket/socket.ts): `apps/api/src/websocket/socket.ts`

### Shared contracts

- [Shared schemas](https://github.com/dxxdev/ai-creative-hub/blob/main/packages/shared/src/schemas/index.ts): `packages/shared/src/schemas/index.ts`

### Other components

- **Visitor**
- [Postgres](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/lib/prisma.ts): `apps/api/src/lib/prisma.ts`
- [Redis](https://github.com/dxxdev/ai-creative-hub/blob/main/apps/api/src/lib/redis.ts): `apps/api/src/lib/redis.ts`
- **Email provider**

## Connections

- Visitor → Auth pages: uses
- Visitor → Home page: browses
- Auth pages → API client: requests
- Home page → API client: requests
- API client → API server: fetches API
- API client → Auth store: refreshes session
- API server → Auth routes: mounts routes
- Auth routes → Login controller: dispatches login
- Login controller → Auth service: calls login
- Auth service → Postgres: reads/writes
- Auth service → Redis: stores reset token
- Auth service → Email delivery: queues reset email
- Email delivery → Email provider: sends email
- API server → Post routes: mounts routes
- Post routes → Post controller: dispatches
- Post controller → Post service: calls
- Post service → Postgres: reads/writes
- API server → Media routes: mounts routes
- Media routes → Media controller: dispatches
- Media controller → Local storage: stores upload
- API server → Image worker: registers worker
- Image worker → Local storage: reads source file
- Image worker → Postgres: updates post
- Image worker → Live updates: emits status
- Post controller → Shared schemas: uses schemas
- Auth routes → Shared schemas: validates inputs
