A model is selectable only after its ratings, feature data, model run, and coefficients are complete.
product system / 2026
Matchmaker Ratings + Ranking
I built two connected apps that turn client attraction ratings into a preference model for ranking candidates.
the problem
“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.
visual walkthrough
From a client's ratings to a ranked candidate batch.
One workflow connects client ratings to matchmaker decisions.
-
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 -
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 -
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.
Client-approved attraction report -
04
Rank with the client's model
The matchmaker selects a ready client model and uploads candidate photos as a batch.
Client selection and batch upload -
05
Prioritize candidates with evidence
Scores rank the batch; factor breakdowns, history, and CSV export support the decision.
Ranked candidate results
technical brief
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.
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.
Every client model carries a stable identity and version so a ranking batch remains traceable.
Zod schemas validate session, model, upload, API, and realtime payloads as they cross services.
Uploads preserve client, model, order, expected size, and draft state across processing and refreshes.
Ranking results are scoped to the authenticated matchmaker before they reach the UI.
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