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

product system / 2026

Matchmaker Ratings + Ranking

I built two connected apps that turn client attraction ratings into a preference model for ranking candidates.

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

“Not my type” gives matchmakers nothing actionable.

Vague preferences force slow trial and error, wasting the matchmaker's and client's time.

Photo ratings reveal specific likes and dislikes, creating an approved model for stronger introductions.

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

One workflow connects client ratings to matchmaker decisions.

  1. 01

    Set the depth of the signal

    The matchmaker chooses a rating-set size: fewer photos start quickly; more produce a stronger preference signal.

    Matchmaker workspace with multiple clients, rating progress, and controls to start ranking
    Matchmaker workspace
  2. 02

    Capture instinct, one photo at a time

    Clients rate one labeled photo at a time, creating consistent, timed attraction signals.

    Client rating flow · one photo at a time
  3. 03

    Make the model editable

    Ratings become editable positive and negative impact factors; approval then locks the model.

    Demo: This five-photo sample produces fewer insights than a full rating set.

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

    Rank with the client's model

    The matchmaker selects a ready client model and uploads candidate photos as a batch.

    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

    Scores rank the batch; factor breakdowns, history, and CSV export support the decision.

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