Inspiration Caseworkers at survivor support organizations make high-stakes economic recovery recommendations from memory and scattered program knowledge. What a survivor gets recommended often depends on which caseworker happens to be assigned that day. We wanted to standardize the first pass of that reasoning without ever taking the decision out of the caseworker's hands.

What it does Compass takes a survivor's documented constraints — employment gaps, mobility limits, trauma-related sensitivities, legal barriers like pending expungement — and produces ranked, explainable economic recovery pathway recommendations grounded in real workforce program models (WIOA training accounts, trauma-informed employer networks, vocational licensing tracks). Every recommendation includes a confidence score, explicit risk flags, and a "verify before discussing with survivor" checklist. The system never contacts survivors directly and never makes a placement decision — it exists solely to support the caseworker.

How we built it React (Vite) frontend deployed on Vercel. A Vercel serverless function calls the Claude API with a structured system prompt that takes a survivor profile and a curated pathway dataset, returning ranked, reasoned matches as structured JSON. Five synthetic survivor profiles were built using a Pacific Northwest framing, grounded in real program models like BEST's Safe Jobs Collaborative and WIOA Individual Training Accounts, so the reasoning reflects real workforce infrastructure rather than invented categories.

Challenges we ran into Getting consistent, parseable structured JSON across very different case complexities was harder than expected. A stable "ready" profile and a profile involving pending criminal expungement require very different reasoning depth, but both need to return reliably. We hit response truncation when the structured output exceeded the function's token limit, and had to tune both the system prompt and the token allowance to get complete responses consistently.

Accomplishments we're proud of The system doesn't just rank pathways — it tells the caseworker what it doesn't know. Every recommendation pairs a confidence score with an explicit account of what hasn't been verified. We also built a caseworker override log that simulates how the system would detect its own drift over time, tracking where caseworkers consistently reject AI suggestions and why — a direct, working answer to "what happens after the demo."

What we learned The hardest part of this domain isn't matching skills to jobs — it's representing the difference between what's technically eligible and what's actually safe for a specific person's trauma history. A pathway can be a perfect skills match and still be the wrong recommendation if it returns someone to a high-surveillance, low-autonomy environment that mirrors their exploitation. What's next Connecting the static synthetic pathway dataset to live program databases (WIOA provider directories, 211-style resource APIs) so recommendations reflect real-time availability. Real caseworker usage data would replace the simulated override log with genuine drift detection.

Built With

Share this project:

Updates