Back to Projects

Project case study

RoleRank

An explainable decision system for job discovery and application preparation

Status Controlled private beta

Period
June 2026–present
Role
Product design, systems architecture, full-stack engineering, and implementation governance
Category
Full-stack software product; data and decision system
Repository
Private repository
Technical stack
  • Next.js
  • React
  • TypeScript
  • Supabase Postgres
  • Tailwind CSS
  • Vercel
  • Vitest
  • Playwright

RoleRank began with a simple premise: the central problem in a job search is not always a lack of effort, but the difficulty of deciding where that effort belongs. The system gathers roles from compliant sources, standardizes source-specific fields into one model, conservatively groups repeat listings, and ranks them against verified professional evidence and explicit preferences. These processes are the system's normalization and deduplication layer. It carries that decision into resume preparation, cover-letter drafting, application materials, and historical records. RoleRank is deliberately not an auto-application tool. It is designed to help a person pursue fewer roles with stronger evidence, clearer reasoning, and greater control over what is ultimately submitted.

Thesis

RoleRank helps a job seeker direct limited attention toward better-supported opportunities by connecting compliant job-market data with verified professional evidence, versioned rule-based ranking, transparent explanations, and user-controlled application preparation.

RoleRank Discovery page showing ranked synthetic jobs, score bands, filters, and match reasons.

Representative artifact

Discovery surfaces ranked opportunities with bounded filters and concise evidence rather than an unranked job feed.

Maturity
Controlled private beta
Disclosure
Code-derived interface reconstruction using synthetic data; not a live product screenshot.

The problem

Most job-search products solve one part of the process. Search platforms provide listings. Resume tools produce documents. Trackers record applications after they have been submitted. RoleRank was designed around the premise that these are not independent tasks. The quality of an application depends on the relationship between the available market, the candidate’s actual evidence, the reason a role deserves attention, the materials selected for it, and the decisions made afterward.

A job seeker must repeatedly decide which roles deserve limited attention and whether a posting genuinely aligns with their background. They must also determine whether the same opportunity has appeared elsewhere, what evidence supports the match, where the evidence is incomplete, which materials belong with an application, and what happened after the role was pursued. A high-volume feed does not answer those questions, and an activity tracker enters the process only after the most important decision has already been made.

The difficulty is not simply ranking roles. A useful system must reduce noise without disguising uncertainty, help prepare stronger materials without inventing professional evidence, and preserve a trustworthy history without taking consequential action away from the user.

The system

RoleRank connects market intake, professional evidence, explanation, preparation, and historical records in one controlled workflow. Approved data interfaces (APIs) and public applicant-tracking-system endpoints feed a shared catalog. Source-specific records are normalized into a common job model, then grouped conservatively so that a handled opportunity does not reappear merely because another source presents it under a different URL.

Global ingestion and personal ranking remain separate. Bounded scheduled jobs populate the eligible catalog; a user request then applies the person’s active resume evidence, structured preferences, existing job states, and explicit dealbreakers. This cache-first boundary reduces repeated external calls, makes ranking more repeatable, and prevents a temporary connector failure from blocking ordinary use.

The public decision layer is deterministic: the same versioned inputs and rules produce the same result. Its alignment estimate considers meaning-based comparison of role and resume language (semantic similarity), skill evidence, role trajectory, seniority, location, work arrangement, freshness, and explicit mismatches. The result is accompanied by an explanation derived from the same evidence. Strong alignment, preference fit, missing or uncertain evidence, and clear risks remain distinguishable. The score is an internal alignment estimate, not a hiring probability.

How it works

From source intake to a decision

RoleRank includes automated connectors for a bounded set of compliant sources. USAJOBS remains an operator-controlled foundation rather than a continuously scheduled source, and Workday postings enter only through pasted-description import. Each source response is normalized before storage, including URLs, dates, location, compensation, descriptions, and source identifiers.

Duplicate handling combines source identifiers, canonical application URLs, applicant-tracking identifiers, content fingerprints (hashes), and stronger job-identity evidence. The system deliberately prefers leaving an uncertain duplicate unmerged over collapsing two distinct opportunities. Shortlist, dismiss, applied, and restore decisions operate at the opportunity-group level so repeated source appearances do not erase the user’s prior handling.

Discovery and Saved Searches expose ranked, bounded candidates rather than raw catalog rows. An on-demand Daily Shortlist selects no more than ten current roles from the existing scored archive. Saved Searches retain a limited validated filter definition. Shortlisting, dismissal, restoration, feedback, and applied status all remain explicit user actions.

Private imports and professional evidence

A role outside the shared catalog can enter through a private import. Supported public applicant-tracking links may be hydrated conservatively; unsupported sources require pasted posting text. The imported role remains separate from the global catalog, shared recommendation supply, and other users.

Resume Studio organizes roles, responsibilities, accomplishments, education, accepted skills, verification state, exclusions, and claims that should not be made. One document model supports preview and export while preserving immutable versions. Applicant-tracking-system (ATS) Readiness evaluates structure, completeness, evidence, and parseability as internal guidance. It does not reproduce a commercial ATS, guarantee screening success, or predict an employer decision.

For a specific role, the system can construct a deterministic resume variant by selecting and reordering existing verified evidence. It may emphasize relevant accomplishments or skills, but it cannot invent experience, convert a responsibility into an achievement, silently restore rejected content, or overwrite the master resume. Omitted material is disclosed before the variant is saved as a new version.

Preparation and application history

Cover-letter preparation begins with a deterministic starter tied to the target role and verified evidence. Optional AI-assisted drafting is separately feature-gated, bounded, validated, and initiated by the user. The generated language remains reviewable and editable before it can be saved or exported.

An Application Record can preserve the user-confirmed submission time, exact resume and cover-letter materials, status timeline, notes, follow-up, and later changes. RoleRank records what the user confirms they submitted. It does not complete employer forms, click external submission controls, or claim that an employer received the application.

Architecture

RoleRank is a full-stack Next.js application with a React and TypeScript interface, server-side request handlers, Supabase Postgres, Supabase authentication, private file storage, and meaning-based comparison supported by numerical representations of text (vector data). Server modules separate job ingestion and normalization, deterministic matching, resume evidence and document generation, bounded AI adapters, and identity checks tied to each request.

Shared market records and owner-scoped records have different visibility rules. Resumes, preferences, saved searches, feedback, private imports, drafts, notes, and applications are protected through database row-level security and repeated server-side ownership checks. Immutable resume versions, material references, and application events preserve history when current documents change.

The operational boundary is deliberately asymmetric. Source ingestion and daily ranking may run on bounded schedules, while production browser validation is read-only. Synthetic mutations belong only in a separately verified non-production environment with explicit cleanup. Private content is excluded from shared caches, logs, analytics payloads, committed fixtures, and public examples.

Decisions and tradeoffs

Keeping the decision layer deterministic requires explicit rules and versioned inputs, but it makes repeated results explainable and testable. Generative AI is reserved for language work where it adds identifiable value; it does not control scoring, explanations, duplicate handling, ATS Readiness, suppression, or resume tailoring. The basic workflow therefore remains available when the optional drafting layer is disabled.

Conservative duplicate grouping accepts that some genuine duplicates may remain separate. That tradeoff protects distinct opportunities from being merged on weak similarity. Cache-first ingestion creates a separate freshness problem, but it also decouples user navigation from source latency and allows connector health to be evaluated independently.

Treating professional evidence as governed data asks more of the user than instant generation. Verification, exclusions, immutable versions, and explicit review slow the workflow, but they keep inferred or partial information from quietly becoming a claim. The same restraint applies at the final boundary: RoleRank can prepare and remember an application, but external submission remains outside its authority.

Evidence and current status

  • Implemented workflow

    Principal discovery, evidence, preparation, application-record, source-ingestion, and validation workflows are implemented.

    Qualification Access remains allowlist controlled, and selected integrations and validation paths remain gated or environment-dependent.

  • Canonical validation snapshot

    The July 25, 2026 main-branch validation completed 1,847 tests across 252 files.

    Qualification This is repository-validation evidence, not evidence of adoption, hiring outcomes, conversion, or time saved.

  • Application authority

    Application Records preserve the timeline and exact materials confirmed by the user.

    Qualification RoleRank prepares and records applications but does not submit them.

Current status

RoleRank is deployed as a controlled private beta. Core discovery, evidence, preparation, and application-record workflows are implemented, while access remains allowlist controlled. Optional AI drafting is feature-gated, USAJOBS remains operator-controlled, Workday remains pasted-description import only, and no hiring outcome is claimed.

Responsibility and limits

User authority and truthful evidence

The RoleRank Score is a deterministic alignment estimate, not a hiring probability. Missing evidence remains uncertainty rather than proof of absence; tailoring can reorganize verified material but cannot invent experience; and no external application action occurs without the user.

What the project demonstrates

RoleRank demonstrates how a recommendation product can be built around restraint rather than maximum automation: deterministic reasoning before generation, verified evidence before persuasive language, immutable records before convenience, and explicit user decisions before external action.