A local‑first desktop app in three layers
AI Job Hunter is a Tauri desktop app: a React UI runs in a webview, talks to a Rust core over Tauri's IPC, and the Rust core does the real work — calling AI models, scraping job boards, ranking and tailoring matches, and storing everything on your machine. Click any box to see what it does and where it lives.
Renderer — React + TanStack Router
IPC bridge — AppClient
Rust core — Tauri
External services
Click a box above
Each box shows its responsibility, the real files it maps to, and the key types or functions an interviewer might ask about.
From double‑click to a ready window
Two things start in parallel: the webview mounts the React provider tree, and the Rust setup() wires up all shared state and background tasks. Step through it.
Flow simulator — UI → IPC → Rust → result
Pick a journey and step through every hop. The strip at the top lights up the layer that is currently doing the work, so you can see exactly where control sits at each moment.
IPC reference
Every method on AppClient, the exact Tauri command it calls (or event channel it subscribes to), and the namespace it belongs to. This is the complete contract surface between the renderer and Rust. Type to filter.
Subsystem deep‑dives
The Rust core is built around a few registry‑driven subsystems. Each one is designed so a new provider or board is one new module + one registry line — no edits anywhere else.
Interview cheat‑sheet
Tight, codebase‑grounded answers to the questions most likely to come up. Each cites the file you can point to.
30‑second elevator pitch
“It's a local‑first Tauri desktop app that automates job hunting. A React/TanStack renderer talks to a Rust core over Tauri IPC. The Rust side has a strictly‑typed AI‑provider layer (Ollama, the cloud APIs, and headless CLI agents like Claude Code), a scraping engine driven by a board registry, and an autopilot engine that scrapes, ranks and notifies you about new matches. Long jobs return a jobId immediately and stream progress back as Tauri events, so the UI stays live. Data — resumes, embeddings, history — lives in local SQLite/JSON, and secrets go in the OS keyring. Adding a new model provider or job board is a single module plus one registry entry.”