~/jessejaffe/work/matchmaker-ratings-ranking
all work

product system / 2026

Matchmaker Ratings + Ranking

I built two connected applications that turn a client's subjective attraction ratings into a reusable preference model. Then I apply that model to rank new candidates for their matchmaker.

role
product, full-stack, ML integration
system
two apps, one workflow
status
active development

“Not my type” is a barrier to a matchmaker's success.

Clients are often vague about what they find physically attractive in an ideal candidate. That leaves matchmakers with sparse data and a tedious, manual process of trial and error to learn the specifics of each client's type. It wastes both the matchmaker's and the client's time.

This system turns that ambiguity into a shared, client-approved model by having clients rate photos and learning what, specifically, they like and dislike about them. With richer data, matchmakers can learn which signals to look for and move more promising introductions toward a yes.

From a client's ratings to a ranked candidate batch.

One connected workflow across the matchmaker and client experiences.

  1. 01

    Set the depth of the signal

    The matchmaker creates a client and chooses how many photos they should rate. A short set gets the workflow moving; a larger set gives the model a deeper picture of the client's preferences.

    • Multi-client matchmaker workspace
    • Configurable rating assignments
    • Progress and readiness states
    Matchmaker workspace with multiple clients, rating progress, and controls to start ranking
    Matchmaker workspace
  2. 02

    Capture instinct, one photo at a time

    The client sees an intentionally simple rating experience: one image, one question, and a 1–5 response. The interface tracks completion while the system records the signal needed for the preference model. Each photo is meticulously labeled so the rating can be connected to consistent visual attributes.

    • Focused, low-friction client flow
    • Ordered photo assignment
    • Response timing captured with each rating
    Client rating flow · one photo at a time
  3. 03

    Make the model editable

    Completed ratings become an attraction report organized by positive and negative signals. Before approval, the client—or the matchmaker on their behalf—can move an insight between impact buckets so the final model reflects what they actually mean.

    • Human-readable model factors
    • Six impact-strength buckets
    • Approval locks a shared source of truth

    Demo note: Only five photos were rated in this sample, so the report contains very few example insights. A full client rating set produces a much deeper report.

    Approved client attraction report with positive and negative impact buckets
    Client-approved attraction report
  4. 04

    Bring the client's attraction model into a ranking algorithm

    In the ranking workspace, the matchmaker chooses a ready client model and drops in a batch of candidate photos. Pending clients remain visibly unavailable until enough rating data has been processed.

    • Secure cross-app session handoff
    • Client-specific and general models
    • Batch upload with durable draft state
    Ranking workspace with a client selected and two candidate photos in the upload queue
    Client selection and batch upload
  5. 05

    Prioritize candidates with evidence

    The processed batch returns to a client-filtered gallery with a score on each photo. The matchmaker can compare batches, inspect the factors behind a result, and export the ranking for the rest of their workflow.

    • Realtime processing updates
    • Per-client batch history
    • Detailed breakdowns and CSV export

README.md

A production system assembled around explicit boundaries, reviewable model outputs, and two purpose-built interfaces.

01 / architecture

Two applications with a secure model handoff

Matchmaker Ratings owns client setup, photo assignments, rating capture, report generation, and approval. Matchmaker Ranking consumes only ready client models, adds them to new photo-analysis jobs, and owns batch review and results.

01 client ratings 1–5 scores + response data
02 preference model versioned, client-approved artifact
03 candidate ranking scored batches + factor breakdowns

A signed, expiring handoff moves the authenticated matchmaker from the ratings app to the ranking app. The ranking server then retrieves model artifacts over a private, authenticated server-to-server endpoint; coefficients never need to be trusted from the browser.

02 / modeling pipeline

Personalized enough to be useful, simple enough to explain

A Python pipeline combines labeled baseline examples with the client's weighted rating rows. It standardizes features and fits a cross-validated Elastic Net model, producing an intercept and a rich set of positive and negative coefficients.

baseline photo signals
+ weighted client ratings
        ↓
StandardScaler → ElasticNetCV
        ↓
versioned coefficients + impact %
        ↓
client review → approved model

Rather than exposing every coefficient, the client-facing report surfaces only the photo attributes the model determines are most impactful. Those attributes are translated into readable labels and six impact levels—from minimal to major. A client can correct the strength of an insight before approval, keeping the machine-learning layer auditable and the human decision-maker in control.

03 / engineering decisions

Reliability is built into the workflow

Reliability here means making incomplete or invalid states explicit: a model cannot be selected too early, data is validated as it crosses services, and a ranking batch keeps its identity throughout processing.

readiness gates

A model is selectable only after its ratings, feature data, model run, and coefficients are complete.

versioned artifacts

Every client model carries a stable identity and version so a ranking batch remains traceable.

validated boundaries

Zod schemas validate session, model, upload, API, and realtime payloads as they cross services.

durable batches

Uploads preserve client, model, order, expected size, and draft state across processing and refreshes.

ownership filtering

Ranking results are scoped to the authenticated matchmaker before they reach the UI.

live feedback

React Query cache updates and Socket.IO events keep multi-photo processing visible in real time.

04 / stack

Built across the full product surface

ratings frontend
React, TypeScript, Vite
ranking frontend
Next.js 16, React 19, Tailwind, React Query
services + data
Node, Express, PostgreSQL, Zod, Socket.IO
modeling
Python, pandas, NumPy, scikit-learn
operations
Linux, Nginx, systemd, Hetzner