diff --git a/system-design.md b/system-design.md
index f052bb2..a6c9161 100644
--- a/system-design.md
+++ b/system-design.md
@@ -2,38 +2,28 @@
## Architecture Overview
-```
-┌─────────────────────────────────────────────────────┐
-│ Frontend (SPA) │
-│ React / Next.js (static export) │
-│ ┌───────────┐ ┌───────────┐ ┌────────────────────┐ │
-│ │ Auth View │ │ Calendar │ │ Chat Panel │ │
-│ │ │ │ Dashboard │ │ (collapsible side │ │
-│ │ │ │ │ │ panel / mobile │ │
-│ │ │ │ │ │ full-screen │ │
-│ │ │ │ │ │ overlay, HITL │ │
-│ │ │ │ │ │ approval UI) │ │
-│ └───────────┘ └───────────┘ └────────────────────┘ │
-└────────────────────┬────────────────────────────────┘
- │ HTTPS
-┌────────────────────▼────────────────────────────────┐
-│ Backend API │
-│ Node.js (Express / Next.js API) │
-│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
-│ │ Auth │ │ Calendar │ │ Agent / Chat │ │
-│ │ Service │ │ Service │ │ Service (LangChain) │ │
-│ └──────────┘ └──────────┘ └──────────────────────┘ │
-└───┬──────────────┬──────────────────┬───────────────┘
- │ │ │
- ▼ ▼ ▼
-Google OAuth Google Calendar LangChain TS Agent
- 2.0 API API + LLM Provider
- (e.g. Gemini free tier)
- │
- ▼
- MongoDB
- (conversations, pending
- actions, sessions)
+```mermaid
+graph TD
+ subgraph Frontend["Frontend (SPA) — React 19 / Vite / Tailwind"]
+ AuthView[Auth View]
+ CalendarDash[Calendar Dashboard]
+ ChatPanel["Chat Panel
(collapsible side panel /
mobile full-screen overlay,
HITL approval UI)"]
+ end
+
+ Frontend -->|"Same-origin HTTP + WebSocket"| Backend
+
+ subgraph Backend["Backend API — Node.js / Express 5"]
+ AuthSvc[Auth Service]
+ CalSvc[Calendar Service]
+ ChatSvc["Agent / Chat Service
(LangChain)"]
+ end
+
+ AuthSvc --> GoogleOAuth[Google OAuth 2.0 API]
+ CalSvc --> GoogleCal[Google Calendar API]
+ ChatSvc --> LLM["LLM Provider
(Gemini / Claude)"]
+
+ AuthSvc --> MongoDB
+ ChatSvc --> MongoDB["MongoDB
(users, sessions, conversations,
messages, pending actions)"]
```
## Data Models
@@ -172,75 +162,82 @@ The agent is built using **LangChain.js** with the following components:
### Authentication Flow
-```
-User Frontend Backend Google
- │ │ │ │
- │──click login─▶│ │ │
- │ │──GET /auth/login──▶ │
- │ │◀─redirect URL──│ │
- │◀──redirect────│ │ │
- │──consent──────────────────────────────────────▶│
- │◀─────────────────────auth code─────────────────│
- │──callback─────▶ │ │
- │ │──GET /auth/callback?code=──────▶│
- │ │ │──exchange code─▶│
- │ │ │◀─tokens────────│
- │ │ │ (store tokens) │
- │ │◀─session/JWT──│ │
- │◀──logged in───│ │ │
+```mermaid
+sequenceDiagram
+ actor User
+ participant Frontend
+ participant Backend
+ participant Google
+
+ User->>Frontend: Click login
+ Frontend->>Backend: GET /auth/login
+ Backend-->>Frontend: Redirect URL
+ Frontend-->>User: Redirect to Google
+ User->>Google: Consent
+ Google-->>User: Auth code
+ User->>Frontend: Callback
+ Frontend->>Backend: GET /auth/callback?code=
+ Backend->>Google: Exchange code
+ Google-->>Backend: Tokens
+ Note over Backend: Store tokens in session
+ Backend-->>Frontend: Session cookie
+ Frontend-->>User: Logged in
```
### Calendar Viewing Flow
-```
-User Frontend Backend Google Calendar API
- │ │ │ │
- │──view cals───▶│ │ │
- │ │──GET /api/calendars─▶ │
- │ │ │──list calendars───▶│
- │ │ │◀─calendar list─────│
- │ │◀─calendars JSON─────│ │
- │◀──render──────│ │ │
- │ │ │ │
- │──click cal───▶│ │ │
- │ │──GET /api/calendars/{id}/events─────────▶│
- │ │ │──list events──────▶│
- │ │ │◀─events───────────│
- │ │◀─events JSON────────│ │
- │◀──render──────│ │ │
+```mermaid
+sequenceDiagram
+ actor User
+ participant Frontend
+ participant Backend
+ participant GoogleCal as Google Calendar API
+
+ User->>Frontend: View calendars
+ Frontend->>Backend: GET /api/calendars
+ Backend->>GoogleCal: List calendars
+ GoogleCal-->>Backend: Calendar list
+ Backend-->>Frontend: Calendars JSON
+ Frontend-->>User: Render calendar list
+
+ User->>Frontend: Click calendar
+ Frontend->>Backend: GET /api/calendars/{id}/events
+ Backend->>GoogleCal: List events
+ GoogleCal-->>Backend: Events
+ Backend-->>Frontend: Events JSON
+ Frontend-->>User: Render calendar view
```
### Chat with Human-In-The-Loop Flow
-```
-User Frontend Backend LLM Google Cal API
- │ │ │ │ │
- │──"schedule │ │ │ │
- │ meeting"────▶│ │ │ │
- │ │──WS send_message───▶ │ │
- │ │ │──prompt + ───────▶ │
- │ │ │ conversation │ │
- │ │ │ history │ │
- │ │ │◀─tool call───────│ │
- │ │ │ (create_event) │ │
- │ │ │ │ │
- │ │ │ (save PendingAction) │
- │ │◀─reply + pending────│ │ │
- │◀──show action │ action │ │ │
- │ for approval│ │ │ │
- │ │ │ │ │
- │──approve─────▶│ │ │ │
- │ │──POST /api/actions/{id}/approve────────▶ │
- │ │ │──create event────────────────────▶│
- │ │ │◀─event created───────────────────│
- │ │◀─confirmation───────│ │ │
- │◀──"Done!"─────│ │ │ │
+```mermaid
+sequenceDiagram
+ actor User
+ participant Frontend
+ participant Backend
+ participant LLM
+ participant GoogleCal as Google Calendar API
+
+ User->>Frontend: "Schedule meeting"
+ Frontend->>Backend: WS send_message
+ Backend->>LLM: Prompt + conversation history
+ LLM-->>Backend: Tool call (create_event)
+ Note over Backend: Save PendingAction to MongoDB
+ Backend-->>Frontend: Reply + pending action
+ Frontend-->>User: Show action for approval
+
+ User->>Frontend: Approve
+ Frontend->>Backend: POST /api/actions/{id}/approve
+ Backend->>GoogleCal: Create event
+ GoogleCal-->>Backend: Event created
+ Backend-->>Frontend: Confirmation
+ Frontend-->>User: "Done!"
```
### Conversation Memory Flow (LangChain)
```
-POST /api/chat
+WS /ws (send_message)
│
▼
┌──────────────────────────┐
@@ -302,25 +299,13 @@ POST /api/chat
Single-service deployment on Railway — the Express backend serves the built React SPA as static files, eliminating cross-origin complexity.
-```
-┌─────────────────────────────────┐
-│ Railway (Single Service) │
-│ ┌───────────────────────────┐ │
-│ │ Express Backend │ │
-│ │ - API routes (/api/*) │ │
-│ │ - WebSocket (/ws) │ │
-│ │ - Static files (app/dist)│ │
-│ │ - SPA fallback │ │
-│ └─────────────┬─────────────┘ │
-│ │ │
-└────────────────┼────────────────┘
- │
- ▼
- ┌──────────────────────┐
- │ MongoDB Atlas (M0) │
- │ Sessions, Users, │
- │ Conversations, etc. │
- └──────────────────────┘
+```mermaid
+graph TD
+ subgraph Railway["Railway (Single Service)"]
+ Express["Express Backend
• API routes (/api/*)
• WebSocket (/ws)
• Static files (app/dist)
• SPA fallback"]
+ end
+
+ Express --> Mongo["MongoDB Atlas (M0)
Sessions, Users,
Conversations, Pending Actions"]
```
### Production Configuration