# tarique-zaib/draftlex architecture

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

- Interactive diagram: https://gitdiagram.com/tarique-zaib/draftlex
- Repository: https://github.com/tarique-zaib/draftlex

## Overview

DraftLex is a legal practice management system for advocates. Its main workflow is managing clients and matters, scheduling hearings, and creating or handling case documents through a React interface and authenticated .NET API. Backend controllers enforce advocate ownership and delegate selected operations to application handlers and services; persistence is provided by PostgreSQL through EF Core. Separate capabilities include AI-assisted drafting and matter chat, dashboard activity, bilingual search, and a notification agent that sends hearing reminders. The README documents broad features; unsampled implementation details are represented only where the tree supports them.

Main entry points: [`frontend/src/api/client.ts`](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/api/client.ts) (API clients), [`frontend/src/App.tsx`](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/App.tsx) (React workspace), [`backend/DraftLex.Infrastructure/Persistence/DraftLexDbContext.cs`](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/Persistence/DraftLexDbContext.cs) (EF Core context), [`backend/DraftLex.Api/Controllers/DocumentsController.cs`](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/DocumentsController.cs) (Document API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Advocate workspace"]
  node_webapp["React workspace<br/>[App.tsx]"]
  node_client_ui["Client workspace<br/>[ClientDetails.tsx]"]
  node_matter_ui["Matter workspace"]
  node_hearing_ui["Hearing calendar<br/>[Hearings.tsx]"]
  node_document_ui["Document workspace<br/>[Documents.tsx]"]
  node_draft_ui["AI drafts<br/>[AIDrafts.tsx]"]
  node_search_ui["Global search<br/>[GlobalSearch.tsx]"]
  node_api_client["API clients<br/>[client.ts]"]
end

subgraph group_api["API and application"]
  node_auth["Authentication API<br/>[AuthController.cs]"]
  node_client_api["Client API"]
  node_matter_api["Matter API"]
  node_hearing_api["Hearing API"]
  node_document_api["Document API"]
  node_ai_api["AI and copilot API<br/>[AIController.cs]"]
  node_handlers["Application handlers<br/>[Features]"]
  node_client_service["Client service<br/>[ClientService.cs]"]
  node_document_service["Document service"]
end

subgraph group_records["Case records"]
  node_db_context["EF Core context"]
  node_repositories["Repositories<br/>[Repositories]"]
  node_database[("PostgreSQL")]
  node_pdf["PDF export"]
end

subgraph group_ai["AI and drafting"]
  node_ollama_draft["Legal draft service"]
  node_copilot["Matter copilot"]
end

subgraph group_reminders["Hearing reminders"]
  node_notification_agent["Reminder scheduler"]
  node_agent_api["Agent API client"]
  node_whatsapp_sender["WhatsApp sender<br/>[WhatsAppSender.cs]"]
end

node_advocate(("Advocate"))
node_ollama{{"Ollama"}}
node_whatsapp{{"WhatsApp service"}}

node_advocate -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_client_ui
node_webapp -->|"routes to"| node_matter_ui
node_webapp -->|"routes to"| node_hearing_ui
node_webapp -->|"routes to"| node_document_ui
node_webapp -->|"routes to"| node_draft_ui
node_webapp -->|"opens"| node_search_ui
node_client_ui -->|"requests"| node_api_client
node_matter_ui -->|"requests"| node_api_client
node_hearing_ui -->|"requests"| node_api_client
node_document_ui -->|"requests"| node_api_client
node_draft_ui -->|"requests"| node_api_client
node_search_ui -->|"queries"| node_api_client
node_api_client -->|"calls"| node_client_api
node_api_client -->|"calls"| node_matter_api
node_api_client -->|"calls"| node_hearing_api
node_api_client -->|"calls"| node_document_api
node_api_client -->|"calls"| node_ai_api
node_api_client -->|"authenticates"| node_auth
node_client_api -->|"delegates"| node_client_service
node_client_service -->|"reads and writes"| node_repositories
node_matter_api -->|"dispatches"| node_handlers
node_hearing_api -->|"dispatches"| node_handlers
node_matter_api -->|"queries"| node_db_context
node_hearing_api -->|"queries"| node_db_context
node_document_api -->|"delegates"| node_document_service
node_document_api -->|"queries and writes"| node_db_context
node_document_api -->|"exports"| node_pdf
node_document_service -->|"reads and writes"| node_repositories
node_handlers -->|"accesses"| node_db_context
node_repositories -->|"uses"| node_db_context
node_db_context -->|"persists"| node_database
node_ai_api -->|"generates drafts"| node_ollama_draft
node_ai_api -->|"delegates chat"| node_copilot
node_ollama_draft -->|"requests generation"| node_ollama
node_copilot -->|"requests responses"| node_ollama
node_notification_agent -->|"fetches hearings"| node_agent_api
node_notification_agent -->|"sends reminders"| node_whatsapp_sender
node_agent_api -->|"requests schedule"| node_hearing_api
node_whatsapp_sender -.->|"delivers messages"| node_whatsapp

click node_webapp "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/App.tsx"
click node_client_ui "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/ClientDetails.tsx"
click node_matter_ui "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/MatterWorkspace.tsx"
click node_hearing_ui "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/Hearings.tsx"
click node_document_ui "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/Documents.tsx"
click node_draft_ui "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/AIDrafts.tsx"
click node_search_ui "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/components/GlobalSearch.tsx"
click node_api_client "https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/api/client.ts"
click node_auth "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/AuthController.cs"
click node_client_api "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/ClientsController.cs"
click node_matter_api "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/MattersController.cs"
click node_hearing_api "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/HearingsController.cs"
click node_document_api "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/DocumentsController.cs"
click node_ai_api "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/AIController.cs"
click node_handlers "https://github.com/tarique-zaib/draftlex/tree/main/backend/DraftLex.Application/Features"
click node_client_service "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Application/Services/ClientService.cs"
click node_document_service "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Application/Services/LegalDocumentService.cs"
click node_db_context "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/Persistence/DraftLexDbContext.cs"
click node_repositories "https://github.com/tarique-zaib/draftlex/tree/main/backend/DraftLex.Infrastructure/Repositories"
click node_pdf "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Services/PdfExportService.cs"
click node_ollama_draft "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/AI/OllamaLegalDraftService.cs"
click node_copilot "https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/AI/MatterCopilotService.cs"
click node_notification_agent "https://github.com/tarique-zaib/draftlex/blob/main/DraftLex.NotificationAgent/Services/ReminderScheduler.cs"
click node_agent_api "https://github.com/tarique-zaib/draftlex/blob/main/DraftLex.NotificationAgent/Services/DraftLexApiClient.cs"
click node_whatsapp_sender "https://github.com/tarique-zaib/draftlex/blob/main/DraftLex.NotificationAgent/Services/WhatsAppSender.cs"

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_client_ui,node_matter_ui,node_hearing_ui,node_document_ui,node_draft_ui,node_search_ui,node_api_client toneBlue
class node_auth,node_client_api,node_matter_api,node_hearing_api,node_document_api,node_ai_api,node_handlers,node_client_service,node_document_service toneAmber
class node_db_context,node_repositories,node_database,node_pdf toneMint
class node_ollama_draft,node_copilot toneRose
class node_notification_agent,node_agent_api,node_whatsapp_sender,node_advocate,node_ollama,node_whatsapp toneIndigo
```

## Components

### Advocate workspace

- [React workspace](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Client workspace](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/ClientDetails.tsx): `frontend/src/pages/ClientDetails.tsx`
- [Matter workspace](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/MatterWorkspace.tsx): `frontend/src/pages/MatterWorkspace.tsx`
- [Hearing calendar](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/Hearings.tsx): `frontend/src/pages/Hearings.tsx`
- [Document workspace](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/Documents.tsx): `frontend/src/pages/Documents.tsx`
- [AI drafts](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/pages/AIDrafts.tsx): `frontend/src/pages/AIDrafts.tsx`
- [Global search](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/components/GlobalSearch.tsx): `frontend/src/components/GlobalSearch.tsx`
- [API clients](https://github.com/tarique-zaib/draftlex/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`

### API and application

- [Authentication API](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/AuthController.cs): `backend/DraftLex.Api/Controllers/AuthController.cs`
- [Client API](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/ClientsController.cs): `backend/DraftLex.Api/Controllers/ClientsController.cs`
- [Matter API](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/MattersController.cs): `backend/DraftLex.Api/Controllers/MattersController.cs`
- [Hearing API](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/HearingsController.cs): `backend/DraftLex.Api/Controllers/HearingsController.cs`
- [Document API](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/DocumentsController.cs): `backend/DraftLex.Api/Controllers/DocumentsController.cs`
- [AI and copilot API](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Controllers/AIController.cs): `backend/DraftLex.Api/Controllers/AIController.cs`
- [Application handlers](https://github.com/tarique-zaib/draftlex/tree/main/backend/DraftLex.Application/Features): `backend/DraftLex.Application/Features`
- [Client service](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Application/Services/ClientService.cs): `backend/DraftLex.Application/Services/ClientService.cs`
- [Document service](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Application/Services/LegalDocumentService.cs): `backend/DraftLex.Application/Services/LegalDocumentService.cs`

### Case records

- [EF Core context](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/Persistence/DraftLexDbContext.cs): `backend/DraftLex.Infrastructure/Persistence/DraftLexDbContext.cs`
- [Repositories](https://github.com/tarique-zaib/draftlex/tree/main/backend/DraftLex.Infrastructure/Repositories): `backend/DraftLex.Infrastructure/Repositories`
- **PostgreSQL**
- [PDF export](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Api/Services/PdfExportService.cs): `backend/DraftLex.Api/Services/PdfExportService.cs`

### AI and drafting

- [Legal draft service](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/AI/OllamaLegalDraftService.cs): `backend/DraftLex.Infrastructure/AI/OllamaLegalDraftService.cs`
- [Matter copilot](https://github.com/tarique-zaib/draftlex/blob/main/backend/DraftLex.Infrastructure/AI/MatterCopilotService.cs): `backend/DraftLex.Infrastructure/AI/MatterCopilotService.cs`

### Hearing reminders

- [Reminder scheduler](https://github.com/tarique-zaib/draftlex/blob/main/DraftLex.NotificationAgent/Services/ReminderScheduler.cs): `DraftLex.NotificationAgent/Services/ReminderScheduler.cs`
- [Agent API client](https://github.com/tarique-zaib/draftlex/blob/main/DraftLex.NotificationAgent/Services/DraftLexApiClient.cs): `DraftLex.NotificationAgent/Services/DraftLexApiClient.cs`
- [WhatsApp sender](https://github.com/tarique-zaib/draftlex/blob/main/DraftLex.NotificationAgent/Services/WhatsAppSender.cs): `DraftLex.NotificationAgent/Services/WhatsAppSender.cs`

### Other components

- **Advocate**
- **Ollama**
- **WhatsApp service**

## Connections

- Advocate → React workspace: uses
- React workspace → Client workspace: routes to
- React workspace → Matter workspace: routes to
- React workspace → Hearing calendar: routes to
- React workspace → Document workspace: routes to
- React workspace → AI drafts: routes to
- React workspace → Global search: opens
- Client workspace → API clients: requests
- Matter workspace → API clients: requests
- Hearing calendar → API clients: requests
- Document workspace → API clients: requests
- AI drafts → API clients: requests
- Global search → API clients: queries
- API clients → Client API: calls
- API clients → Matter API: calls
- API clients → Hearing API: calls
- API clients → Document API: calls
- API clients → AI and copilot API: calls
- API clients → Authentication API: authenticates
- Client API → Client service: delegates
- Client service → Repositories: reads and writes
- Matter API → Application handlers: dispatches
- Hearing API → Application handlers: dispatches
- Matter API → EF Core context: queries
- Hearing API → EF Core context: queries
- Document API → Document service: delegates
- Document API → EF Core context: queries and writes
- Document API → PDF export: exports
- Document service → Repositories: reads and writes
- Application handlers → EF Core context: accesses
- Repositories → EF Core context: uses
- EF Core context → PostgreSQL: persists
- AI and copilot API → Legal draft service: generates drafts
- AI and copilot API → Matter copilot: delegates chat
- Legal draft service → Ollama: requests generation
- Matter copilot → Ollama: requests responses
- Reminder scheduler → Agent API client: fetches hearings
- Reminder scheduler → WhatsApp sender: sends reminders
- Agent API client → Hearing API: requests schedule
- WhatsApp sender → WhatsApp service: delivers messages
