How We Built Rivals: Designing a Crew Scoreboard

Updated 27 July 2026 · 9 min read · By the Rivals team

Rivals is our app — judge the comparison accordingly.

Quick Answer: Rivals is a padel scoreboard for one fixed crew of four: sets logged courtside, boards, head-to-head records, belts and a year that ends in a ceremony. Six decisions shaped it — a crew-local rating, margin-aware math, one-person logging, offline-first, banter exported to the group chat, and a free tier nothing is metered inside.

This is a build-in-public piece about our own product, so read it with the disclosure above in mind. It is not neutral. What it is, we hope, is useful: six decisions with the reasoning, including the two we got wrong and reversed.

We started from an irritation rather than a market. A group with a standing booking already has a full competitive life — standings nobody writes down, a grudge nobody named, a greatest-comeback-ever that survives only in retellings — and every adjacent app serves something else. Booking platforms sell the court. Event generators run one perfect evening and forget it. Team apps ask who is coming and never who is winning. The group chat holds ten thousand messages of banter and zero memory.

So: a scoreboard for the crew, not the court. Here is what that forced.

Decision 1: the rating never leaves the crew

The obvious build is a global rating: more impressive, comparable across cities, and what every incumbent has. We refused it, because every documented pathology in racket-sport ratings traces to one root — stakes outside the group.

The evidence is not subtle. Pickleball's DUPR runs a reliability score and a moderation team because players create duplicate profiles and tank low-weight sessions to drop their number. Tennis's UTR has a documented pattern of players avoiding lower-rated opponents. And padel's own incumbent concedes it in the product: Playtomic's help center states that in a competitive match "the entry of results will ALWAYS change the level of each player", while in a casual one "the level of the players will NEVER be changed, even if the result is entered". That toggle exists because people protect the number — so the weekly game most people play is deliberately unrecorded.

A crew-local number deletes the incentive instead of policing it: nothing to protect, no stranger judging you, no reason to duck your weaker friend. It also gives up something real — the number cannot get you a match where nobody knows you. That trade is the whole product decision, and should your friend group track its own rating argues it out, as does sandbagging in padel.

Decision 2: a 7–5 and a 6–0 cannot mean the same thing

Win-loss is the sparsest possible signal, and four people playing a handful of sets a week have none to waste. So the rating is margin-aware: it reads how many games you took, compares that with how many the ratings expected, and moves accordingly — so you can climb in a narrow loss and gain almost nothing from a win you were supposed to have.

That is not our invention. Squash has run it for years: SquashLevels states that "if you are playing twice as well as your opponent then you will have twice the level", and calculates each level from "the actual result compared to the expected result", using points scores rather than just who won. Tennis's UTR frames the same idea as an expected share of games.

The counter-example was more instructive than the precedents. Playtomic's explanation of how its level system works sets out valid-score requirements, one of which reads: "If neither has scored 7 points, there must be a 2-point difference (e.g., 6-4 is valid, 6-5 is not)." A 6–5 is the most interesting scoreline in amateur padel — two even pairs, one break of serve — and it is discarded. Ours keeps it, because in a crew the close set is the point.

The other half of the decision: every move has to be explainable in one sentence. Tap a change and you get "we expected 40% of games; you took 55%". Black-box math in a friend group does not produce a leaderboard, it produces a grievance. Watch the mechanism on our padel Elo calculator.

Decision 3: one person logs, everyone's record updates

The failure mode of every tracking app is the third week. Somebody forgets, then somebody else does, and the record quietly stops existing.

A different hobby had already solved it. Board Game Stats, which has been logging plays for a decade, shares a play file of the night with the other players rather than asking everyone at the table to enter the same game. That is the courtside model: never require four phones to cooperate between sets. One person taps the score; everyone's boards, head-to-head records and belts move.

The design consequence is that profiles must work before they are claimed — a crew is created with all four players at once, and each spot stays open until its player claims it with an invite link.

Decision 4: it has to work with no signal

A padel court is a steel cage, often indoors, sometimes underground. Signal dies. We treated full offline operation — entry, live board, pairings — as a product guarantee rather than an optimisation, which changes the data architecture from day one: everything is written locally and syncs when you are back in range.

It is the least glamorous decision here and the one that most decides whether an app survives contact with a Tuesday. It is also rare: surveying the padel shelf in July 2026, only a handful of products made any offline claim at all. Which padel apps work courtside has that survey, and it is short.

Decision 5: the banter leaves the app

The tempting build is an in-app feed and chat. Sleeper won fantasy football that way, so the pattern looks proven — but it is not transferable, because of dependency. Sleeper owned the draft and the scoring engine, so the league had to be in the app every week and the conversation followed. A padel crew has no such dependency: it lives in WhatsApp, and the record of club tools that tried to move the conversation is a record of non-adoption.

So the rule is own the state, export the talk. Rivals holds the results, standings, records and belts, and hands the group chat paste-ready ammunition — text-first blocks that paste inline and quote naturally, plus image cards for stories. The voice discipline matters as much: generated praise is cringe, as the backlash against AI-written fitness summaries showed, while generated specific true claims are ammunition. The app writes "Marco is 0–7 against Luis since March" and lets a human add the knife.

Decision 6: the ceremony and the archive are never held hostage

Free means one crew of up to four players — a full court — with nothing inside it metered: unlimited matches, live scoring, ratings, boards, belts, records and the year in review, kept forever, and no ads. Crew Pro lifts the caps for a bigger roster or more than one crew, and adds history import, weekly digests, printable season volumes, advanced analytics and crest packs.

The year-in-review line is deliberate. When a well-known fitness app put its annual recap behind a paywall, the backlash was not about money — people were locked out of a party their friends were posting from. A recap is a social artefact, and paywalling it breaks the thing it is for. Same logic for the archive: history is why a crew stays, and ransoming it would burn the trust the product runs on.

What we decided not to build

Refusals shape a product more than features. These are permanent scope decisions, not a queue:

  • Court booking. Playtomic's moat is thousands of club integrations; we would lose that race while turning the product into inventory management. Keep your booking app.
  • Stranger matchmaking. Every pathology a closed group is immune to — fake profiles, no-shows, level fraud — arrives with discovery. A guest-player bench solves the missing fourth instead.
  • A global rating. See decision 1. Chat as the social home. See decision 5.
  • Payment processing. We track the fee ledger — who fronted the court, who owes, what is settled — and never touch the money. Refunds and regulators do not belong between four friends and a court.
  • Shot-by-shot statistics. The atomic unit is the set score. Per-point logging on a Tuesday is a fantasy, and half-entered data poisons every stat built on it.
  • Club administration. Memberships, court utilisation and coach rosters are a different customer with opposite needs. Clubs are context here, never customers.
  • Multi-player rotating-partner event formats. Excellent at one great evening for eight or more; not what a standing four does. Padel match trackers compared places us against the products that overlap.

What we got wrong first

Two reversals, both documented in our own notes.

The first version was a duel — a one-on-one rivalry tracker with a head-to-head "VS score" as the central mechanic. Wrong, because a rivalry is not a product; it is a feature of a group's life. Two people keeping score run out of story in a month, while four rotating partners generate a nemesis, a dream duo and a wooden spoon by themselves. The rivalry pages survived; the duel framing was cut.

We planned quarterly seasons and reversed it. The retention research is clear that ten-to-thirteen-week seasons with a soft reset are the sweet spot, so that is what we specified — then we described it to real crews and hit a wall: groups like ours play continuously and have no concept of a season. The default unit became the calendar year, the rating never resets, and seasons are an opt-in that keeps the quarterly mechanics intact. The evidence was about games; the users were about Tuesdays.

Both corrections came from one mistake: designing for the mechanic instead of the evening. For the non-app version, how to keep score in padel with friends covers what works with a notebook, and our free padel scoreboard runs tonight's match in a browser tab and forgets it on purpose.

FAQ

What is Rivals?

A padel scoreboard and record-keeper for a fixed crew of four playing 2v2 on one court. You log sets courtside, and it keeps the boards, head-to-head records for every pair, belts, a records book and a year that ends in a ceremony, with a crew-local rating that explains every change. It does not book courts, run club leagues or organize tournaments.

Why is the rating only visible inside my crew?

Because external stakes are what break ratings. Global numbers demonstrably produce sandbagging, duplicate accounts and players ducking weaker opponents, and padel's own incumbent added a casual mode so people could protect their level. A crew-local number removes the incentive instead of policing it — at the cost that it proves nothing to a stranger.

Why does the score margin matter to the rating?

Because four people do not generate enough matches for win-loss alone to say much. Reading games won against games expected multiplies the usable signal per session and produces fairer outcomes: you can rise in a narrow loss and gain almost nothing from an expected win. Squash and tennis rating systems have worked this way for years.

Do all four players need the app?

No — that was a deliberate constraint. One person logs the night and everyone's records update, and each player's spot stays open until they claim it with an invite link. The app has to be useful with a single active user, because the friend who will not install anything is real.

Does it work without a signal on court?

Yes, and that was treated as a product guarantee rather than a feature: entry, the live board and pairings all work offline, and everything syncs when you are back in range.

Tools for this
Continue reading

Rivals remembers the night this page just helped you run

Log the match once and your crew gets ratings, head-to-head records, belts and a whole season — kept forever, on one shared board.

Coming soon on theApp Store Get it onGoogle Play

Free for a crew of four. Nothing inside is metered.