# abhijeetb0/personal-agent architecture

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

- Interactive diagram: https://gitdiagram.com/abhijeetb0/personal-agent
- Repository: https://github.com/abhijeetb0/personal-agent

## Overview

Personal Agent is a multi-user WhatsApp AI service with a web dashboard. The primary workflow is: a user signs in, sets an owner number and pairs a WhatsApp account, then messages the agent and receives an AI response; reminders and LeetCode contest information are additional capabilities. The graph also shows dashboard chat and device-based QR login. Source excerpts are partial, so links among the agent’s internal AI, memory, tools, and reminder modules are omitted where their wiring is not evidenced.

Main entry points: [`apps/agent/src/routes.ts`](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/routes.ts) (Agent API), [`apps/agent/src/brain.ts`](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/brain.ts) (Agent brain), [`apps/web/app/dashboard/page.tsx`](https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/app/dashboard/page.tsx) (Dashboard), [`apps/agent/src/handler.ts`](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/handler.ts) (Message handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web Dashboard"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_webapi["Dashboard API"]
  node_webserver["Web server helpers<br/>[server.ts]"]
  node_websupabase["Browser auth"]
end

subgraph group_agent["WhatsApp Agent"]
  node_agententry["Agent entry<br/>[index.ts]"]
  node_routes["Agent API<br/>[routes.ts]"]
  node_connection["WhatsApp connection<br/>[baileys.ts]"]
  node_messagehandler["Message handler<br/>[handler.ts]"]
  node_ownerpolicy["Owner allowlist<br/>[whitelist.ts]"]
end

subgraph group_ai["AI and Skills"]
  node_brain["Agent brain<br/>[brain.ts]"]
  node_llm["Model selection<br/>[llm.ts]"]
  node_groq["Groq model<br/>[groq.ts]"]
  node_gemini["Gemini fallback<br/>[gemini.ts]"]
  node_memory["Conversation memory<br/>[memory.ts]"]
  node_tools["Agent tools<br/>[tools.ts]"]
  node_reminders["Reminders<br/>[reminders.ts]"]
  node_scheduler["Reminder scheduler<br/>[scheduler.ts]"]
  node_leetcode["LeetCode contests<br/>[leetcode.ts]"]
  node_webchat["Dashboard chat<br/>[webchat.ts]"]
end

subgraph group_identity["Identity and State"]
  node_store["Agent state<br/>[store.ts]"]
  node_supabase[("Supabase auth and DB")]
  node_loginqr["QR login tickets"]
  node_devices["Device management<br/>[route.ts]"]
end

node_user(("User"))
node_whatsapp(("WhatsApp"))
node_llmproviders["Groq / Gemini"]
node_leetcodeapi["LeetCode service"]

node_user -->|"uses"| node_dashboard
node_dashboard -->|"authenticates"| node_websupabase
node_websupabase -->|"authenticates"| node_supabase
node_dashboard -->|"requests"| node_webapi
node_webapi -->|"forwards"| node_webserver
node_webserver -->|"calls agent API"| node_routes
node_agententry -->|"serves"| node_routes
node_routes -->|"validates user"| node_supabase
node_routes -->|"controls session"| node_connection
node_routes -->|"reads/writes"| node_store
node_whatsapp -->|"connects"| node_connection
node_connection -->|"dispatches messages"| node_messagehandler
node_messagehandler -->|"checks sender"| node_ownerpolicy
node_user -->|"messages agent"| node_whatsapp
node_routes -->|"handles chat"| node_webchat
node_routes -->|"serves contest data"| node_leetcode
node_leetcode -.->|"fetches contests"| node_leetcodeapi
node_user -->|"starts QR login"| node_loginqr
node_loginqr -->|"stores ticket"| node_supabase
node_loginqr -->|"creates login link"| node_webserver
node_user -->|"manages devices"| node_devices
node_devices -->|"reads/writes devices"| node_supabase
node_messagehandler -->|"requests response"| node_brain
node_brain -->|"selects model"| node_llm
node_llm -->|"queries"| node_llmproviders
node_brain -->|"uses memory"| node_memory
node_brain -->|"invokes tools"| node_tools
node_scheduler -->|"schedules delivery"| node_reminders

click node_dashboard "https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/app/dashboard/page.tsx"
click node_webapi "https://github.com/abhijeetb0/personal-agent/tree/main/apps/web/app/api"
click node_webserver "https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/lib/server.ts"
click node_websupabase "https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/lib/supabase-browser.ts"
click node_agententry "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/index.ts"
click node_routes "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/routes.ts"
click node_connection "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/baileys.ts"
click node_messagehandler "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/handler.ts"
click node_ownerpolicy "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/whitelist.ts"
click node_brain "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/brain.ts"
click node_llm "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/llm.ts"
click node_groq "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/groq.ts"
click node_gemini "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/gemini.ts"
click node_memory "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/memory.ts"
click node_tools "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/tools.ts"
click node_reminders "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/reminders.ts"
click node_scheduler "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/scheduler.ts"
click node_leetcode "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/leetcode.ts"
click node_webchat "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/webchat.ts"
click node_store "https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/store.ts"
click node_loginqr "https://github.com/abhijeetb0/personal-agent/tree/main/apps/web/app/api/login-qr"
click node_devices "https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/app/api/devices/route.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_dashboard,node_webapi,node_webserver,node_websupabase,node_user toneBlue
class node_agententry,node_routes,node_connection,node_messagehandler,node_ownerpolicy toneAmber
class node_brain,node_llm,node_groq,node_gemini,node_memory,node_tools,node_reminders,node_scheduler,node_leetcode,node_webchat toneMint
class node_store,node_supabase,node_loginqr,node_devices toneRose
class node_whatsapp,node_llmproviders,node_leetcodeapi toneIndigo
```

## Components

### Web Dashboard

- [Dashboard](https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/app/dashboard/page.tsx): `apps/web/app/dashboard/page.tsx`
- [Dashboard API](https://github.com/abhijeetb0/personal-agent/tree/main/apps/web/app/api): `apps/web/app/api`
- [Web server helpers](https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/lib/server.ts): `apps/web/lib/server.ts`
- [Browser auth](https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/lib/supabase-browser.ts): `apps/web/lib/supabase-browser.ts`

### WhatsApp Agent

- [Agent entry](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/index.ts): `apps/agent/src/index.ts`
- [Agent API](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/routes.ts): `apps/agent/src/routes.ts`
- [WhatsApp connection](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/baileys.ts): `apps/agent/src/baileys.ts`
- [Message handler](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/handler.ts): `apps/agent/src/handler.ts`
- [Owner allowlist](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/whitelist.ts): `apps/agent/src/whitelist.ts`

### AI and Skills

- [Agent brain](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/brain.ts): `apps/agent/src/brain.ts`
- [Model selection](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/llm.ts): `apps/agent/src/llm.ts`
- [Groq model](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/groq.ts): `apps/agent/src/groq.ts`
- [Gemini fallback](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/gemini.ts): `apps/agent/src/gemini.ts`
- [Conversation memory](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/memory.ts): `apps/agent/src/memory.ts`
- [Agent tools](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/tools.ts): `apps/agent/src/tools.ts`
- [Reminders](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/reminders.ts): `apps/agent/src/reminders.ts`
- [Reminder scheduler](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/scheduler.ts): `apps/agent/src/scheduler.ts`
- [LeetCode contests](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/leetcode.ts): `apps/agent/src/leetcode.ts`
- [Dashboard chat](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/webchat.ts): `apps/agent/src/webchat.ts`

### Identity and State

- [Agent state](https://github.com/abhijeetb0/personal-agent/blob/main/apps/agent/src/store.ts): `apps/agent/src/store.ts`
- **Supabase auth and DB**
- [QR login tickets](https://github.com/abhijeetb0/personal-agent/tree/main/apps/web/app/api/login-qr): `apps/web/app/api/login-qr`
- [Device management](https://github.com/abhijeetb0/personal-agent/blob/main/apps/web/app/api/devices/route.ts): `apps/web/app/api/devices/route.ts`

### Other components

- **User**
- **WhatsApp**
- **Groq / Gemini**
- **LeetCode service**

## Connections

- User → Dashboard: uses
- Dashboard → Browser auth: authenticates
- Browser auth → Supabase auth and DB: authenticates
- Dashboard → Dashboard API: requests
- Dashboard API → Web server helpers: forwards
- Web server helpers → Agent API: calls agent API
- Agent entry → Agent API: serves
- Agent API → Supabase auth and DB: validates user
- Agent API → WhatsApp connection: controls session
- Agent API → Agent state: reads/writes
- WhatsApp → WhatsApp connection: connects
- WhatsApp connection → Message handler: dispatches messages
- Message handler → Owner allowlist: checks sender
- User → WhatsApp: messages agent
- Agent API → Dashboard chat: handles chat
- Agent API → LeetCode contests: serves contest data
- LeetCode contests → LeetCode service: fetches contests
- User → QR login tickets: starts QR login
- QR login tickets → Supabase auth and DB: stores ticket
- QR login tickets → Web server helpers: creates login link
- User → Device management: manages devices
- Device management → Supabase auth and DB: reads/writes devices
- Message handler → Agent brain: requests response
- Agent brain → Model selection: selects model
- Model selection → Groq / Gemini: queries
- Agent brain → Conversation memory: uses memory
- Agent brain → Agent tools: invokes tools
- Reminder scheduler → Reminders: schedules delivery
