A hiring search that ranks people by the work they’ve done, not their job title. I designed and built it end to end: the product, the brand, and the marketing site, shipped live at useroster.app.

The short version
Typically, keyword search reads the job title and stops there, so the person who built two design systems from scratch but whose title says “Lead UX” never shows up, and the person whose title says “Design Systems Designer” but who only maintained someone else’s work ranks first. Roster reads the work behind the job title, ranks people by genuine fit, explains why, and leaves every decision to the recruiter. I designed and built it end to end and shipped it live. I built it because I’ve been on both sides of this problem.
Where this started
I was job hunting and using the tools built to help. One of them, after all its matching, showed me fifteen design postings. Ten were legit, but none were close to what I was actually looking for.
The pool was shallow, it only pulled from the obvious sources, and the matching was thin, it read titles and keywords, not what I could actually do. I am a designer with real design-systems depth, but my titles have said “Lead UX” and “Product Designer,” never “Design Systems Designer.” So a keyword search for design systems skips me, every time. I am exactly the candidate these tools bury.
I also know this problem from the other side. I have designed ATS and careers-platform tools before, including work with Lever and Allegiant’s careers platform. So I have built the systems that do the burying. I know how they read a candidate, and I know why they miss people: they match on the title because the title is obvious, and the work is nuanced. Designers in 2026 are much more multifaceted than they’ve ever been.
That dual view, the candidate who gets filtered out and the designer who has built the filters, is where Roster came from.

My Approach
Two ideas shaped the product.
Fit comes from the work, not the job title. Titles are just labels. So the product has to read the actual evidence, portfolios, shipped work, case studies, open source, public work history, and the recruiter’s own ATS, and rank people by what they’ve built. The title is the least reliable signal, so it carries the least weight.
The recruiter still makes the decisions. The AI reads, ranks, and explains. It never auto-rejects and never auto-contacts. It shows its reasoning and its uncertainty, and the person makes every call. The AI is a fast, tireless analyst. It is not the hiring manager.
Everything in the product follows from those two ideas.
What I researched
I grounded this in three things. My own experience as the buried candidate. My experience designing ATS and careers platforms, which is where I understand the recruiter’s workflow and the real constraints of reading candidate data. And a study of the current wave of AI recruiting tools and their flows, to see what already existed and where the thinking stopped short.
The gap I kept finding: most AI recruiting tools either hand the recruiter a black-box score with no reasoning, or they take too much control and start auto-acting on candidates. Neither trusts the recruiter’s judgment. That was the opening.

The decisions that mattered
Separate what’s measured from what’s inferred. Every candidate has two clearly divided sides: the measured record (facts pulled from the work, jobs, systems built, adoption, sources) and the analysis (what the AI infers from those facts). A recruiter should never confuse “this is verified” with “the AI is guessing.” So the two never blur. The measured record is stated plainly. The AI’s inferences are marked as inferences, with their evidence attached.
Show uncertainty honestly. The AI attaches a confidence level to its analysis, and when it can’t explain something it says why instead of inventing a reason. A tool that pretends to be certain about everything is a tool you stop trusting. Honest uncertainty is what makes the confident calls worth believing.
A weak match is not an error. Confidence and fit use green, amber, and neutral gray, never red. A candidate who’s a weak fit hasn’t done anything wrong, they’re just not right for this role. Red is reserved for genuine problems. This is a small color decision that changes how the whole tool feels: analytical, not alarmist.
Make the AI a visible, consistent signal. Anything the AI generates carries one consistent marker and its own color, so the recruiter can always tell the AI’s read from the candidate’s actual record at a glance. This is the human-in-control thesis made visual. You always know who is talking.


Surface the person the search buries, and prove it. The core moment of the product is ranking a candidate first who a title search would never return, and showing exactly why. “Built two design systems from scratch. Their title says Lead UX, so a keyword search skips them.” That single juxtaposition is the value of the product, so I built the interface around making it obvious and simple to navigate.
Let the recruiter shape the ranking. The recruiter can re-weight what matters per job and watch the list re-rank live. The AI proposes an order; the human tunes it. That keeps the recruiter in control of the matching itself, not just the final decision.
Be honest about the pool. The deep pool reads from sources you can actually read, portfolios, case studies, communities, open source, public work history, and your own ATS. It does not claim to scrape platforms that can’t be scraped. The advantage is reading the work that’s already public but that keyword tools ignore, not pretending to see everything.
Automation never drops anyone silently. Recruiters need automation to keep up with volume, but automation is where products quietly betray the human-in-control idea. So even when Roster auto-declines a candidate on a knockout answer, that candidate still lands in the recruiter’s list, flagged, never silently removed. The recruiter can always see what was auto-actioned and override it. The identity of the product stands, even in the parts of the product built for speed.
Candidates have a home. Early on, candidate profiles were only reachable by clicking through from a job or the review queue, so the profile was an orphaned page with no direct entry point. I made the Talent Pool the place candidates live: a browse-and-search home for everyone across every job. Profiles are now reachable both in the context of a specific role and directly from the pool, and the breadcrumb reflects whichever path you took. A candidate is a person who exists across your hiring, not just a row inside one job.


How it came together
The first build was flat. Everything sat at the same weight, the information architecture grouped unlike things together, and the AI content had no clear signal. It looked like a product but didn’t read like one.
The work was mostly subtraction and structure. I fixed the hierarchy so the eye had a pathway to each lane of the product. I restructured the candidate page around the recruiter’s actual question, who is this, are they a fit, what’s the evidence, what should I check, instead of a grid that looked balanced but didn’t map to anything. I built one reusable card component and applied it everywhere, so the whole product reads as one system rather than a set of pages. And I resolved the AI signal by removing more than I added: no generic icon, no ambiguous dot, just a consistent color and label, plus one custom mark that reads as its own thing rather than a borrowed logo.
Building a design-systems product with real component discipline was the point, not a coincidence. The tool practices what it’s built to find.



Designed and built, end to end
I designed and built all of it, live. The product, the brand and logo, and the marketing site with its interactive demos, where you can flip between title search and Roster’s ranking, ask the assistant a question, and drag the priority slider to re-rank the list yourself.
This is how I work. I don’t hand off a design and hope it survives. I take it through to a shipped, working product, and I use that to pressure-test whether the design actually holds up when it’s real. Most of the decisions above only became obvious once it was running.
Where it stands
Roster is live and usable at useroster.app. I designed and built the whole thing on my own, the product, the brand, and the marketing site, and took it from a problem I was living to a working product you can open and use today.
It’s the clearest example of how I work: I don’t hand off a design and hope. I find a real problem, form a point of view, and build it all the way to shipped.
Live: useroster.app