Nick Kuebler
MyLeague self check screen
← Back to work

MyLeague

A web app that scores facial aesthetics and lets people see where they stand, who they match with, and how their team stacks up. Built to give friends a fun way to connect inside their own league.

Visit MyLeague →

Date

2026

Role

Full-Stack

Product Design

Claude API

The idea

Two patterns drive most dating outcomes. People tend to end up with someone in their own tier, give or take one tier in either direction. Those couples also tend to look at least a little like each other. Everyone has heard this. Almost nobody knows where they actually fit.

MyLeague makes it visible. Upload a photo and you see your score, what you would look like as the opposite sex, and the realistic floor and ceiling of your dating pool. The product is a calibration tool, not a verdict. It tells people who is actually in their range so they can stop guessing.

How it works

Photos are scored by Claude using a tuned aesthetics rubric. The model returns a numeric score on the PSL scale plus a written breakdown of strengths, refinements, and category scores for symmetry, bone structure, skin, eyes, proportions, and grooming.

Scores sit on a standard distribution, so they behave like the real world instead of a feel-good rubric. A 5 is average. Anything past 7.5 is genuinely rare. Most people land somewhere in the middle, which is the point.

Photos and entries are stored in Supabase. Leaderboards are public by URL with no signup, so a single shared link is enough to spin up a board for a team or a friend group.

Four ways in

Self check tab

Self check

Upload a photo. Get a PSL score, a rubric breakdown, and notes on what is working and what is not.

Match tab

Match

Upload two photos. Find out if you fall inside each other's range.

Photogenic tab

Photogenic

Compare a casual photo to your best one. See how far your camera can take you.

Leaderboards tab

Leaderboards

Spin up a private board for a team or friend group. Anyone with the link can post. No signup.

What a score looks like

Every result returns a number, a rubric, written strengths and refinements, and per-category scores. Enough detail to feel personal, light enough to stay shareable.

Score result top
Score result strengths
Score result category breakdown

Your floor and ceiling

From the score, MyLeague generates a realistic range. The floor is the lowest you can reasonably expect to date. The ceiling is the highest. This is the actual output for the same user whose 8.0 result is shown above.

Dating pool top with target range
Floor and ceiling of the dating pool

Traction

1,143

Photos uploaded across the first 28 days, with a peak of 203 in a single day.

2

QR codes posted. One in athlete dining, one in the design school. Everything else was friends sharing the link.

5x+

Repeat sessions per first-time user. People who tried it once came back at least five more times.

105

Users

1,107

Photos scored

36

Leaderboards

906

Feature uses

Across the 906 logged feature uses, 87% picked Self Check, 10.8% used Match, 1.3% Photogenic, and 0.9% Ascension. Self Check carried the product.

The two QR codes were the only marketing. The growth was organic, driven by friends sending the link to friends and entire teams asking for their own board.

Limitations

The model is not perfect. A person can score slightly higher or slightly lower than where they should actually land. There are also subjective components of beauty that the rubric does not capture.

Nothing the model returns is medical advice or a verdict on anyone's appearance. MyLeague is one more data point about how a person reads in photos. The goal is calibration, not judgment.

What's next

The natural extension is a dating product where matches are constrained to people inside the same league, give or take one tier in either direction. The infrastructure already exists. Photo scoring, the rubric, and the floor and ceiling generation could plug straight into a matching layer.

It is not the current priority, but it stays on the table.

← Back to workVisit MyLeague →