# hjeandedieu/diana architecture

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

- Interactive diagram: https://gitdiagram.com/hjeandedieu/diana
- Repository: https://github.com/hjeandedieu/diana

## Overview

Diana is a memory-aware AI companion for developers. A user signs in, opens or creates a conversation, and sends a prompt; the frontend calls the backend, which coordinates the AI service and persistent data, then returns the response for display. Separate product workflows manage remembered context, conversation history, account access, and profile settings. The README documents PostgreSQL and OpenAI integrations; sampled source confirms session persistence and auth logic, but does not expose the detailed chat or memory orchestration, so those internal links are limited to documented architecture.

Main entry points: [`backend/src/app.js`](https://github.com/hjeandedieu/diana/blob/main/backend/src/app.js) (Express API), [`frontend/src/App.tsx`](https://github.com/hjeandedieu/diana/blob/main/frontend/src/App.tsx) (Diana UI), [`ai-service/app/main.py`](https://github.com/hjeandedieu/diana/blob/main/ai-service/app/main.py) (FastAPI assistant), [`ai-service/app/routers/memory.py`](https://github.com/hjeandedieu/diana/blob/main/ai-service/app/routers/memory.py) (Memory handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Frontend"]
  node_webapp["Diana UI<br/>[App.tsx]"]
  node_authui["Login and register<br/>[authService.ts]"]
  node_chatui["Chat interface<br/>[ChatScreen.tsx]"]
  node_memoryui["Memories screen<br/>[MemoriesScreen.tsx]"]
  node_settingsui["Profile settings<br/>[ProfileScreen.tsx]"]
  node_sessionclient["Session API client<br/>[sessionService.ts]"]
  node_authclient["Auth API client<br/>[authService.ts]"]
end

subgraph group_api["Backend API"]
  node_backend["Express API<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_sessionroutes["Session routes<br/>[session.routes.js]"]
  node_chatroutes["Chat routes<br/>[chat.routes.js]"]
  node_memoryroutes["Memory routes<br/>[memories.routes.js]"]
  node_userroutes["User routes<br/>[users.routes.js]"]
  node_sessioncontroller["Session controller"]
  node_authservice["Auth service<br/>[auth.service.js]"]
  node_chatservice["Chat service<br/>[chat.service.js]"]
  node_memoryservice["Memory service<br/>[memory.service.js]"]
end

subgraph group_assistant["AI Assistant"]
  node_aiservice["FastAPI assistant<br/>[main.py]"]
  node_aichat["AI chat handler<br/>[chat.py]"]
  node_aimemory["Memory handler<br/>[memory.py]"]
end

subgraph group_state["Persistence"]
  node_database[("PostgreSQL")]
  node_prisma["Prisma client<br/>[prisma.ts]"]
end

node_user(("Developer"))
node_openai["OpenAI API"]

node_user -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_authui
node_webapp -->|"routes to"| node_chatui
node_webapp -->|"routes to"| node_memoryui
node_webapp -->|"routes to"| node_settingsui
node_authui -->|"submits credentials"| node_authclient
node_authclient -->|"auth requests"| node_backend
node_chatui -->|"manages sessions"| node_sessionclient
node_sessionclient -->|"session requests"| node_backend
node_memoryui -->|"memory requests"| node_backend
node_settingsui -->|"account requests"| node_backend
node_backend -->|"mounts"| node_authroutes
node_backend -->|"mounts"| node_sessionroutes
node_backend -->|"mounts"| node_chatroutes
node_backend -->|"mounts"| node_memoryroutes
node_backend -->|"mounts"| node_userroutes
node_sessionroutes -->|"dispatches"| node_sessioncontroller
node_sessioncontroller -->|"calls service"| node_prisma
node_authservice -->|"reads and writes"| node_prisma
node_prisma -->|"persists data"| node_database
node_backend -->|"forwards chat"| node_aiservice
node_aiservice -->|"registers"| node_aichat
node_aiservice -->|"registers"| node_aimemory
node_aichat -->|"generates replies"| node_openai
node_aimemory -.->|"extracts memories"| node_openai
node_chatservice -->|"AI integration"| node_aiservice
node_memoryservice -.->|"AI integration"| node_aimemory

click node_webapp "https://github.com/hjeandedieu/diana/blob/main/frontend/src/App.tsx"
click node_authui "https://github.com/hjeandedieu/diana/blob/main/frontend/src/services/authService.ts"
click node_chatui "https://github.com/hjeandedieu/diana/blob/main/frontend/src/pages/ChatScreen.tsx"
click node_memoryui "https://github.com/hjeandedieu/diana/blob/main/frontend/src/pages/MemoriesScreen.tsx"
click node_settingsui "https://github.com/hjeandedieu/diana/blob/main/frontend/src/pages/ProfileScreen.tsx"
click node_sessionclient "https://github.com/hjeandedieu/diana/blob/main/frontend/src/services/sessionService.ts"
click node_authclient "https://github.com/hjeandedieu/diana/blob/main/frontend/src/services/authService.ts"
click node_backend "https://github.com/hjeandedieu/diana/blob/main/backend/src/app.js"
click node_authroutes "https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/auth.routes.js"
click node_sessionroutes "https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/session.routes.js"
click node_chatroutes "https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/chat.routes.js"
click node_memoryroutes "https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/memories.routes.js"
click node_userroutes "https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/users.routes.js"
click node_sessioncontroller "https://github.com/hjeandedieu/diana/blob/main/backend/src/controllers/session.controller.js"
click node_authservice "https://github.com/hjeandedieu/diana/blob/main/backend/src/services/auth.service.js"
click node_chatservice "https://github.com/hjeandedieu/diana/blob/main/backend/src/services/chat.service.js"
click node_memoryservice "https://github.com/hjeandedieu/diana/blob/main/backend/src/services/memory.service.js"
click node_aiservice "https://github.com/hjeandedieu/diana/blob/main/ai-service/app/main.py"
click node_aichat "https://github.com/hjeandedieu/diana/blob/main/ai-service/app/routers/chat.py"
click node_aimemory "https://github.com/hjeandedieu/diana/blob/main/ai-service/app/routers/memory.py"
click node_prisma "https://github.com/hjeandedieu/diana/blob/main/backend/src/lib/prisma.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_webapp,node_authui,node_chatui,node_memoryui,node_settingsui,node_sessionclient,node_authclient toneBlue
class node_backend,node_authroutes,node_sessionroutes,node_chatroutes,node_memoryroutes,node_userroutes,node_sessioncontroller,node_authservice,node_chatservice,node_memoryservice toneAmber
class node_aiservice,node_aichat,node_aimemory,node_openai toneMint
class node_database,node_prisma toneRose
class node_user toneIndigo
```

## Components

### Frontend

- [Diana UI](https://github.com/hjeandedieu/diana/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Login and register](https://github.com/hjeandedieu/diana/blob/main/frontend/src/services/authService.ts): `frontend/src/services/authService.ts`
- [Chat interface](https://github.com/hjeandedieu/diana/blob/main/frontend/src/pages/ChatScreen.tsx): `frontend/src/pages/ChatScreen.tsx`
- [Memories screen](https://github.com/hjeandedieu/diana/blob/main/frontend/src/pages/MemoriesScreen.tsx): `frontend/src/pages/MemoriesScreen.tsx`
- [Profile settings](https://github.com/hjeandedieu/diana/blob/main/frontend/src/pages/ProfileScreen.tsx): `frontend/src/pages/ProfileScreen.tsx`
- [Session API client](https://github.com/hjeandedieu/diana/blob/main/frontend/src/services/sessionService.ts): `frontend/src/services/sessionService.ts`
- [Auth API client](https://github.com/hjeandedieu/diana/blob/main/frontend/src/services/authService.ts): `frontend/src/services/authService.ts`

### Backend API

- [Express API](https://github.com/hjeandedieu/diana/blob/main/backend/src/app.js): `backend/src/app.js`
- [Auth routes](https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/auth.routes.js): `backend/src/routes/auth.routes.js`
- [Session routes](https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/session.routes.js): `backend/src/routes/session.routes.js`
- [Chat routes](https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/chat.routes.js): `backend/src/routes/chat.routes.js`
- [Memory routes](https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/memories.routes.js): `backend/src/routes/memories.routes.js`
- [User routes](https://github.com/hjeandedieu/diana/blob/main/backend/src/routes/users.routes.js): `backend/src/routes/users.routes.js`
- [Session controller](https://github.com/hjeandedieu/diana/blob/main/backend/src/controllers/session.controller.js): `backend/src/controllers/session.controller.js`
- [Auth service](https://github.com/hjeandedieu/diana/blob/main/backend/src/services/auth.service.js): `backend/src/services/auth.service.js`
- [Chat service](https://github.com/hjeandedieu/diana/blob/main/backend/src/services/chat.service.js): `backend/src/services/chat.service.js`
- [Memory service](https://github.com/hjeandedieu/diana/blob/main/backend/src/services/memory.service.js): `backend/src/services/memory.service.js`

### AI Assistant

- [FastAPI assistant](https://github.com/hjeandedieu/diana/blob/main/ai-service/app/main.py): `ai-service/app/main.py`
- [AI chat handler](https://github.com/hjeandedieu/diana/blob/main/ai-service/app/routers/chat.py): `ai-service/app/routers/chat.py`
- [Memory handler](https://github.com/hjeandedieu/diana/blob/main/ai-service/app/routers/memory.py): `ai-service/app/routers/memory.py`

### Persistence

- **PostgreSQL**
- [Prisma client](https://github.com/hjeandedieu/diana/blob/main/backend/src/lib/prisma.ts): `backend/src/lib/prisma.ts`

### Other components

- **Developer**
- **OpenAI API**

## Connections

- Developer → Diana UI: uses
- Diana UI → Login and register: routes to
- Diana UI → Chat interface: routes to
- Diana UI → Memories screen: routes to
- Diana UI → Profile settings: routes to
- Login and register → Auth API client: submits credentials
- Auth API client → Express API: auth requests
- Chat interface → Session API client: manages sessions
- Session API client → Express API: session requests
- Memories screen → Express API: memory requests
- Profile settings → Express API: account requests
- Express API → Auth routes: mounts
- Express API → Session routes: mounts
- Express API → Chat routes: mounts
- Express API → Memory routes: mounts
- Express API → User routes: mounts
- Session routes → Session controller: dispatches
- Session controller → Prisma client: calls service
- Auth service → Prisma client: reads and writes
- Prisma client → PostgreSQL: persists data
- Express API → FastAPI assistant: forwards chat
- FastAPI assistant → AI chat handler: registers
- FastAPI assistant → Memory handler: registers
- AI chat handler → OpenAI API: generates replies
- Memory handler → OpenAI API: extracts memories
- Chat service → FastAPI assistant: AI integration
- Memory service → Memory handler: AI integration
