# aridawoodi/local-ai-job-search-assistant-app architecture

> Architecture diagram of the GitHub repository aridawoodi/local-ai-job-search-assistant-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aridawoodi/local-ai-job-search-assistant-app
- Repository: https://github.com/aridawoodi/local-ai-job-search-assistant-app

## Overview

Job Search Assistant is a local-first Electron desktop app whose main workflow is opening a persistent browser, searching job sources, matching listings, notifying the user, and optionally filling applications under safety controls; applications can then be tracked. Separate capabilities cover profile/resume import, AI writing assistance through local Ollama, and preferences/onboarding. The sampled main-process and renderer files establish the IPC-driven workflow; several subsystem details are documented in the README but not sampled, so those links rely on that documentation.

Main entry points: [`electron/main/index.ts`](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/index.ts) (Main coordinator), [`src/renderer/App.tsx`](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/App.tsx) (Desktop UI), [`src/renderer/components/PipelinePanel.tsx`](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/PipelinePanel.tsx) (Pipeline controls), [`electron/preload/index.ts`](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/preload/index.ts) (Desktop API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop Shell"]
  node_ui["Desktop UI<br/>[App.tsx]"]
  node_pipeline_ui["Pipeline controls<br/>[PipelinePanel.tsx]"]
  node_ipc["Desktop API<br/>[index.ts]"]
  node_main["Main coordinator<br/>[index.ts]"]
  node_browser["Browser controller"]
end

subgraph group_discovery["Job Discovery"]
  node_search["Multi-source search<br/>[index.ts]"]
  node_search_sources["Search adapters"]
  node_match["Job matching<br/>[engine.ts]"]
  node_notify["Notifications<br/>[index.ts]"]
end

subgraph group_application["Application Flow"]
  node_apply["Application automation<br/>[index.ts]"]
  node_fill["Form filling<br/>[fill.ts]"]
  node_tracker["Application tracker<br/>[index.ts]"]
end

subgraph group_profile_ai["Profile and AI"]
  node_profile_ui["Profile and resume UI<br/>[ProfilePanel.tsx]"]
  node_resume["Resume import<br/>[import.ts]"]
  node_ai_ui["AI assistance UI<br/>[AiAssistPanel.tsx]"]
  node_ai["AI writing assists<br/>[cover.ts]"]
  node_ollama_client["Ollama client<br/>[ollama-client.ts]"]
end

subgraph group_state["Local State"]
  node_preferences[("Preferences store")]
  node_profile_store[("Profile store<br/>[profile-store.ts]")]
  node_import_export["Profile import/export<br/>[index.ts]"]
end

node_user(("Job seeker"))
node_browser_service["Chrome or Edge"]
node_ollama_service["Local Ollama"]

node_user -->|"uses"| node_ui
node_ui -->|"renders"| node_pipeline_ui
node_pipeline_ui -->|"requests actions"| node_ipc
node_ipc -->|"forwards IPC"| node_main
node_main -->|"controls browser"| node_browser
node_browser -->|"drives"| node_browser_service
node_main -->|"runs search"| node_search
node_search -->|"dispatches searches"| node_search_sources
node_main -->|"runs matching"| node_match
node_main -->|"sends notifications"| node_notify
node_main -->|"runs apply"| node_apply
node_apply -->|"fills forms"| node_fill
node_main -->|"updates tracker"| node_tracker
node_ui -->|"renders"| node_profile_ui
node_profile_ui -->|"imports resume"| node_resume
node_ui -->|"renders"| node_ai_ui
node_ai_ui -->|"requests AI assists"| node_ai
node_ai -->|"calls"| node_ollama_client
node_ollama_client -.->|"sends prompts"| node_ollama_service
node_main -->|"loads and saves"| node_preferences
node_main -->|"loads and saves"| node_profile_store
node_main -->|"imports profiles"| node_import_export

click node_ui "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/App.tsx"
click node_pipeline_ui "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/PipelinePanel.tsx"
click node_ipc "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/preload/index.ts"
click node_main "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/index.ts"
click node_browser "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/browser-controller.ts"
click node_search "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/search/index.ts"
click node_search_sources "https://github.com/aridawoodi/local-ai-job-search-assistant-app/tree/main/src/modules/search"
click node_match "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/match/engine.ts"
click node_notify "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/notify/index.ts"
click node_apply "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/apply/index.ts"
click node_fill "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/apply/fill.ts"
click node_tracker "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/tracker/index.ts"
click node_profile_ui "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/ProfilePanel.tsx"
click node_resume "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/resume/import.ts"
click node_ai_ui "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/AiAssistPanel.tsx"
click node_ai "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/ai/cover.ts"
click node_ollama_client "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/ai/ollama-client.ts"
click node_preferences "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/preferences-store.ts"
click node_profile_store "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/profile-store.ts"
click node_import_export "https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/import/index.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_ui,node_pipeline_ui,node_ipc,node_main,node_browser toneBlue
class node_search,node_search_sources,node_match,node_notify toneAmber
class node_apply,node_fill,node_tracker toneMint
class node_profile_ui,node_resume,node_ai_ui,node_ai,node_ollama_client toneRose
class node_preferences,node_profile_store,node_import_export,node_user,node_browser_service,node_ollama_service toneIndigo
```

## Components

### Desktop Shell

- [Desktop UI](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/App.tsx): `src/renderer/App.tsx`
- [Pipeline controls](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/PipelinePanel.tsx): `src/renderer/components/PipelinePanel.tsx`
- [Desktop API](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/preload/index.ts): `electron/preload/index.ts`
- [Main coordinator](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/index.ts): `electron/main/index.ts`
- [Browser controller](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/browser-controller.ts): `electron/main/browser-controller.ts`

### Job Discovery

- [Multi-source search](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/search/index.ts): `src/modules/search/index.ts`
- [Search adapters](https://github.com/aridawoodi/local-ai-job-search-assistant-app/tree/main/src/modules/search): `src/modules/search`
- [Job matching](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/match/engine.ts): `src/modules/match/engine.ts`
- [Notifications](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/notify/index.ts): `src/modules/notify/index.ts`

### Application Flow

- [Application automation](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/apply/index.ts): `src/modules/apply/index.ts`
- [Form filling](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/apply/fill.ts): `src/modules/apply/fill.ts`
- [Application tracker](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/tracker/index.ts): `src/modules/tracker/index.ts`

### Profile and AI

- [Profile and resume UI](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/ProfilePanel.tsx): `src/renderer/components/ProfilePanel.tsx`
- [Resume import](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/resume/import.ts): `src/modules/resume/import.ts`
- [AI assistance UI](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/renderer/components/AiAssistPanel.tsx): `src/renderer/components/AiAssistPanel.tsx`
- [AI writing assists](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/ai/cover.ts): `src/modules/ai/cover.ts`
- [Ollama client](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/ai/ollama-client.ts): `src/modules/ai/ollama-client.ts`

### Local State

- [Preferences store](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/preferences-store.ts): `electron/main/preferences-store.ts`
- [Profile store](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/electron/main/profile-store.ts): `electron/main/profile-store.ts`
- [Profile import/export](https://github.com/aridawoodi/local-ai-job-search-assistant-app/blob/main/src/modules/import/index.ts): `src/modules/import/index.ts`

### Other components

- **Job seeker**
- **Chrome or Edge**
- **Local Ollama**

## Connections

- Job seeker → Desktop UI: uses (evidence: `README.md`)
- Desktop UI → Pipeline controls: renders (evidence: `src/renderer/App.tsx`)
- Pipeline controls → Desktop API: requests actions (evidence: `src/renderer/components/PipelinePanel.tsx`)
- Desktop API → Main coordinator: forwards IPC (evidence: `electron/main/index.ts`)
- Main coordinator → Browser controller: controls browser (evidence: `electron/main/index.ts`)
- Browser controller → Chrome or Edge: drives (evidence: `README.md`)
- Main coordinator → Multi-source search: runs search (evidence: `electron/main/index.ts`)
- Multi-source search → Search adapters: dispatches searches (evidence: `src/modules/search/index.ts`)
- Main coordinator → Job matching: runs matching (evidence: `electron/main/index.ts`)
- Main coordinator → Notifications: sends notifications (evidence: `electron/main/index.ts`)
- Main coordinator → Application automation: runs apply (evidence: `electron/main/index.ts`)
- Application automation → Form filling: fills forms (evidence: `src/modules/apply/index.ts`)
- Main coordinator → Application tracker: updates tracker (evidence: `electron/main/index.ts`)
- Desktop UI → Profile and resume UI: renders (evidence: `src/renderer/App.tsx`)
- Profile and resume UI → Resume import: imports resume (evidence: `README.md`)
- Desktop UI → AI assistance UI: renders (evidence: `src/renderer/App.tsx`)
- AI assistance UI → AI writing assists: requests AI assists (evidence: `README.md`)
- AI writing assists → Ollama client: calls (evidence: `src/modules/ai/cover.ts`)
- Ollama client → Local Ollama: sends prompts (evidence: `README.md`)
- Main coordinator → Preferences store: loads and saves (evidence: `electron/main/index.ts`)
- Main coordinator → Profile store: loads and saves (evidence: `electron/main/index.ts`)
- Main coordinator → Profile import/export: imports profiles (evidence: `electron/main/index.ts`)
