spen studio

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.

Project 05
Role Radar website
Client
Independent
Services
Automation · AI tools · macOS app
  1. 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.

    Role Radar starting frame
  2. 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.

    Role Radar in use
  3. 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.

    BOARDSFIT POLICYTIER 1 / 2 LLMLETTER STUDIO

    Process reconstruction

    Role Radar architecture

    How the pieces hand off without another dashboard nobody opens.

    • Boards
    • Fit Policy
    • LLM tiers
    • Letters
  4. 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.

    Role Radar in motion
  5. 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.

    Role Radar after launch

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.

Discover screenshot

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.

Pipeline & Apply Kit screenshot

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.

Pipeline kanban screenshot

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.

Interviews screenshot

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.

Letter Studio screenshot

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.

Profile screenshot

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?”

Apply goal screenshot

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.

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