# suxrobgm/jobpilot architecture

> Architecture diagram of the GitHub repository suxrobgm/jobpilot, 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/suxrobgm/jobpilot
- Repository: https://github.com/suxrobgm/jobpilot

## Overview

JobPilot is a web dashboard and local AI-agent companion for managing job searches and applications. The main workflow configures a campaign, has the local agent search and score postings, then tailor and submit applications; the API records progress for dashboard review. The README also documents unattended Pilot runs, recruiter networking, email triage, resume tools, analytics, and Upwork support. API module paths are supported by the tree, but most implementation details were not sampled, so uncertain internal calls are omitted.

Main entry points: [`apps/api/src/app.ts`](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/app.ts) (API Service), [`apps/api/src/modules/campaign/campaign.service.ts`](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/modules/campaign/campaign.service.ts) (Campaign Management), [`apps/api/src/modules/application/application.controller.ts`](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/modules/application/application.controller.ts) (Application Tracking), [`apps/web/src/app/(dashboard)`](https://github.com/suxrobgm/jobpilot/tree/main/apps/web/src/app/(dashboard)) (Web Dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Dashboard"]
  node_dashboard["Web Dashboard"]
  node_webclient["API Client<br/>[client.ts]"]
end

subgraph group_api["Job Platform API"]
  node_api["API Service<br/>[app.ts]"]
  node_database[("Application Data<br/>[prisma.client.ts]")]
end

subgraph group_agent["Local Agent"]
  node_terminal["Terminal Companion<br/>[Program.cs]"]
  node_session["Provider Session<br/>[SessionManager.cs]"]
  node_pilotruntime["Pilot Runtime<br/>[PilotRuntime.cs]"]
end

subgraph group_engagement["Job Search Workflows"]
  node_scoring["Job Fit Scoring"]
  node_campaign["Campaign Management"]
  node_joblistings["Job Listings"]
  node_applications["Application Tracking"]
  node_pilot["Unattended Pilot"]
  node_networking["Recruiter Networking"]
  node_upwork["Upwork Workflows"]
end

subgraph group_support["Documents And Insights"]
  node_resume["Resume Management"]
  node_email["Email And Inbox"]
  node_analytics["Application Analytics"]
  node_coverletters["Cover Letters"]
  node_push["Push Notifications"]
end

node_user(("Job Seeker"))
node_ai["Claude Or Codex"]
node_browser["Local Browser"]
node_gmail["Gmail"]

node_user -->|"manages work"| node_dashboard
node_dashboard -->|"requests data"| node_webclient
node_webclient -->|"calls API"| node_api
node_dashboard -->|"dispatches skills"| node_terminal
node_terminal -->|"starts session"| node_session
node_session -->|"runs provider"| node_ai
node_session -->|"drives browser"| node_browser
node_pilotruntime -->|"reports activity"| node_api
node_api -->|"reads and writes"| node_database
node_api -->|"routes resume requests"| node_resume
node_api -->|"routes campaign requests"| node_campaign
node_api -->|"routes application requests"| node_applications
node_api -->|"routes Pilot requests"| node_pilot
node_api -->|"routes inbox requests"| node_email
node_api -->|"routes Upwork requests"| node_upwork
node_api -->|"routes analytics requests"| node_analytics
node_api -->|"routes listing requests"| node_joblistings
node_api -->|"routes networking requests"| node_networking
node_api -->|"routes cover-letter requests"| node_coverletters
node_api -->|"routes notification requests"| node_push
node_campaign -->|"searches postings"| node_joblistings
node_campaign -->|"scores matches"| node_scoring
node_campaign -->|"uses resume"| node_resume
node_campaign -->|"records submissions"| node_applications
node_pilot -->|"runs searches"| node_campaign
node_pilot -->|"notifies user"| node_push
node_networking -->|"drafts messages"| node_email
node_email -.->|"connects mailbox"| node_gmail
node_upwork -->|"tracks applications"| node_applications
node_applications -->|"feeds reporting"| node_analytics
node_resume -->|"supports documents"| node_coverletters
node_user -->|"reviews agent"| node_browser

click node_dashboard "https://github.com/suxrobgm/jobpilot/tree/main/apps/web/src/app/(dashboard)"
click node_webclient "https://github.com/suxrobgm/jobpilot/blob/main/apps/web/src/api/client.ts"
click node_terminal "https://github.com/suxrobgm/jobpilot/blob/main/apps/terminal/Program.cs"
click node_session "https://github.com/suxrobgm/jobpilot/blob/main/apps/terminal/Sessions/SessionManager.cs"
click node_pilotruntime "https://github.com/suxrobgm/jobpilot/blob/main/apps/terminal/Pilot/PilotRuntime.cs"
click node_api "https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/app.ts"
click node_database "https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/common/database/prisma.client.ts"
click node_resume "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/resume"
click node_scoring "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/scoring"
click node_campaign "https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/modules/campaign/campaign.service.ts"
click node_joblistings "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/job-listing"
click node_applications "https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/modules/application/application.controller.ts"
click node_pilot "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/pilot"
click node_networking "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/campaign/networking"
click node_email "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/email"
click node_upwork "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/upwork"
click node_analytics "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/analytics"
click node_coverletters "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/cover-letter"
click node_push "https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/push"

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_webclient,node_browser toneBlue
class node_api,node_database toneAmber
class node_terminal,node_session,node_pilotruntime toneMint
class node_scoring,node_campaign,node_joblistings,node_applications,node_pilot,node_networking,node_upwork toneRose
class node_resume,node_email,node_analytics,node_coverletters,node_push,node_user,node_ai,node_gmail toneIndigo
```

## Components

### Dashboard

- [Web Dashboard](https://github.com/suxrobgm/jobpilot/tree/main/apps/web/src/app/(dashboard)): `apps/web/src/app/(dashboard)`
- [API Client](https://github.com/suxrobgm/jobpilot/blob/main/apps/web/src/api/client.ts): `apps/web/src/api/client.ts`

### Job Platform API

- [API Service](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/app.ts): `apps/api/src/app.ts`
- [Application Data](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/common/database/prisma.client.ts): `apps/api/src/common/database/prisma.client.ts`

### Local Agent

- [Terminal Companion](https://github.com/suxrobgm/jobpilot/blob/main/apps/terminal/Program.cs): `apps/terminal/Program.cs`
- [Provider Session](https://github.com/suxrobgm/jobpilot/blob/main/apps/terminal/Sessions/SessionManager.cs): `apps/terminal/Sessions/SessionManager.cs`
- [Pilot Runtime](https://github.com/suxrobgm/jobpilot/blob/main/apps/terminal/Pilot/PilotRuntime.cs): `apps/terminal/Pilot/PilotRuntime.cs`

### Job Search Workflows

- [Job Fit Scoring](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/scoring): `apps/api/src/modules/scoring`
- [Campaign Management](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/modules/campaign/campaign.service.ts): `apps/api/src/modules/campaign/campaign.service.ts`
- [Job Listings](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/job-listing): `apps/api/src/modules/job-listing`
- [Application Tracking](https://github.com/suxrobgm/jobpilot/blob/main/apps/api/src/modules/application/application.controller.ts): `apps/api/src/modules/application/application.controller.ts`
- [Unattended Pilot](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/pilot): `apps/api/src/modules/pilot`
- [Recruiter Networking](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/campaign/networking): `apps/api/src/modules/campaign/networking`
- [Upwork Workflows](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/upwork): `apps/api/src/modules/upwork`

### Documents And Insights

- [Resume Management](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/resume): `apps/api/src/modules/resume`
- [Email And Inbox](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/email): `apps/api/src/modules/email`
- [Application Analytics](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/analytics): `apps/api/src/modules/analytics`
- [Cover Letters](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/cover-letter): `apps/api/src/modules/cover-letter`
- [Push Notifications](https://github.com/suxrobgm/jobpilot/tree/main/apps/api/src/modules/push): `apps/api/src/modules/push`

### Other components

- **Job Seeker**
- **Claude Or Codex**
- **Local Browser**
- **Gmail**

## Connections

- Job Seeker → Web Dashboard: manages work
- Web Dashboard → API Client: requests data
- API Client → API Service: calls API
- Web Dashboard → Terminal Companion: dispatches skills
- Terminal Companion → Provider Session: starts session
- Provider Session → Claude Or Codex: runs provider
- Provider Session → Local Browser: drives browser
- Pilot Runtime → API Service: reports activity
- API Service → Application Data: reads and writes
- API Service → Resume Management: routes resume requests
- API Service → Campaign Management: routes campaign requests
- API Service → Application Tracking: routes application requests
- API Service → Unattended Pilot: routes Pilot requests
- API Service → Email And Inbox: routes inbox requests
- API Service → Upwork Workflows: routes Upwork requests
- API Service → Application Analytics: routes analytics requests
- API Service → Job Listings: routes listing requests
- API Service → Recruiter Networking: routes networking requests
- API Service → Cover Letters: routes cover-letter requests
- API Service → Push Notifications: routes notification requests
- Campaign Management → Job Listings: searches postings
- Campaign Management → Job Fit Scoring: scores matches
- Campaign Management → Resume Management: uses resume
- Campaign Management → Application Tracking: records submissions
- Unattended Pilot → Campaign Management: runs searches
- Unattended Pilot → Push Notifications: notifies user
- Recruiter Networking → Email And Inbox: drafts messages
- Email And Inbox → Gmail: connects mailbox
- Upwork Workflows → Application Tracking: tracks applications
- Application Tracking → Application Analytics: feeds reporting
- Resume Management → Cover Letters: supports documents
- Job Seeker → Local Browser: reviews agent
