Case study
Role Radar
An AI job-search OS: zero-token Fit Policy, budgeted LLM scoring, pipeline + Apply Kit, Letter Studio, Sheets sync, and a daily apply goal.

- Client
- Independent
- Services
- Automation · AI tools · macOS app
01 / Challenge
Job search at scale meant drowning in boards, burning API credits on bad fits, rewriting the same cover letter, losing interview prep across notes, and tracking applications in a sheet that never quite matched reality. Auto-apply tools sprayed. Match percentages were opaque. Profile fields had to be retyped into every ATS as rich text that immediately broke.

02 / Insight
Most roles fail on title, location, salary, or visa before an LLM should ever see them. Spend belongs to the short list. Match % is Fit Policy plus Profile overlap, not a vibe gauge.

03 / System
Native macOS (SwiftUI, SwiftData) plus a Node sidecar for board fetch and assisted apply. Fit Policy kills title/location/salary/visa mismatches before any token spend. Survivors get tiered LLM scores against a single Profile (résumé board, copiable plain-text facts, voice guide). Pipeline is list + kanban with follow-ups, delayed archive, and an Apply Kit. Letter Studio drafts or revises your own letter, lints voice, exports letterhead PDF. Interviews notify locally. Google Sheets sync is the export hatch. A daily apply-goal badge is the pace layer. A hard budget is the spend layer.
Process reconstruction
Role Radar architecture
How the pieces hand off without another dashboard nobody opens.
- Boards
- Fit Policy
- LLM tiers
- Letters
04 / Execution
Native macOS (SwiftUI, SwiftData) plus a Node sidecar for board fetch and assisted apply. Fit Policy kills title/location/salary/visa mismatches before any token spend. Survivors get tiered LLM scores against a single Profile (résumé board, copiable plain-text facts, voice guide). Pipeline is list + kanban with follow-ups, delayed archive, and an Apply Kit. Letter Studio drafts or revises your own letter, lints voice, exports letterhead PDF. Interviews notify locally. Google Sheets sync is the export hatch. A daily apply-goal badge is the pace layer. A hard budget is the spend layer.

05 / Outcome
One workspace from discovery to offer, with fictional placeholder profile data on this site. Match % is Fit Policy plus scored overlap with the Profile — not a mystery gauge. Auto-apply is gated. Cover letters stay on-voice. The grim process is still grim; it is no longer scattered.

Toolkit
Every surface, featured fully.
Each piece below is almost its own product — designed, shipped, and used as a first-class workflow rather than a buried submenu.
01
Discover
Discover is the intake: Greenhouse, Ashby, Lever, Workable, RemoteOK, 4dayweek, and RSS, via a Node sidecar the Mac talks to locally. Every hit is run through Fit Policy before any model sees it. Title, location, salary floor, visa, seniority, and blocklists are free. Only the survivors are eligible for Tier 1 scoring. The match percentage on a card is not a vibe. Fit Policy produces a hard reject or a structured pass; the LLM then scores against the Profile (resume facts + voice guide) and the job description. You can see why something ranked, not just that it did. Batch scoring is budget-capped. The daily spend meter is the product: discovery can be greedy; tokens cannot.

02
Pipeline & Apply Kit
Saved roles land in a list sorted by attention, not last-edit noise. Status walks saved → applied → screen → interview → offer. Favourites pin. Follow-up notes sit on the role so “circle back Friday” is not a calendar ghost. JD attachments stay with the row. Select a role and the Apply Kit opens: the posting, the match breakdown, copiable profile fields (plain text, because job sites still hate rich paste), and the actions that mark applied. Auto-apply, when enabled, drives the ATS flow from the sidecar for boards that allow it — with the same Fit Policy gate, so you are not spraying applications at rejects. Delayed archiving is a workaround for the “I might still hear back” week: a role can leave the active board on a timer instead of a nervous delete.

03
Pipeline kanban
The same records as a board when you need spatial status. Drag across columns without losing the detail pane. Kanban is for weekly review; the list is for daily triage. They are two views, not two databases.

04
Interviews
Upcoming and past interview events with video links, prep notes, and local notifications a day, an hour, and ten minutes before. The reminder is on-device — not a third-party calendar product you forget to check. Prep notes stay attached to the event so the loop is: pipeline role → interview row → letter you already sent. Nothing here syncs your life to a new SaaS; it is a focused interview list on top of SwiftData.

05
Letter Studio
Cover letters are a product, not a prompt dump. You can draft in the studio, or write your own and send it to the model for a revision pass. Voice lint and structural fingerprints keep every draft on the Profile’s voice guide — so week four does not sound like a different person than week one. Letterhead PDF export is the artifact you attach. Chat revisions are in-thread, not a new document every time. The GPT sees your draft plus the JD plus the profile; it does not invent a biography.

06
Profile
Profile is the source of truth the rest of the app reads: resume board, ATS-facing facts, and the voice guide. Fields are copiable as plain text so you can paste into Workday, Greenhouse, and the forms that strip formatting. Ingest can parse a résumé; the screens on this site use a fictional placeholder (Alex Rivera) so nothing personal ships in the case study. Match scoring and Letter Studio both consume this board — change it once, not in five prompts.

07
Apply goal
The toolbar badge is a daily apply goal — a light gamification layer on a grim process. Hit 7 of 10 and the number is a win, not a spreadsheet cell. It counts marked-applied that calendar day, which is why auto-apply and manual Apply Kit share the same status write. It is deliberately not a streak that shames you. It is a pace you set, visible without opening a dashboard. Combined with the budget cap, it answers both “did I move?” and “did I overspend the model?”

08
Sheets, budget, and Fit Policy
Google Sheets sync is the escape hatch: a living export of the pipeline for people who still think in cells, or for sharing a redacted board. Fit Policy, model choice, and the daily token budget live in Settings so spend stays honest before any LLM call. The architecture is SwiftUI + SwiftData on the Mac, Node sidecar for fetch/apply, and no job-board credentials stored beyond what the sidecar session needs. The Fit Policy is the security boundary for money: it is the only thing allowed to be greedy for free.

Zero-token Fit Policy before any LLM call.
Tiered scoring under a hard daily budget.
Letter Studio keeps every draft on-voice.

