All work

PPadelExperiment · Beta

A home for a padel group.

A web app for amateur padel groups: the weekly list, the draw, live scores at the court, and a season that remembers. I designed it and built it in seven days with an AI coding agent. One real group uses it every week. It is free, in beta, and has not yet shown it works for anyone else.

Role

Product design & code

Timeline

7 days · about 220 commits

Platform

Mobile web, installable

Stack

Next.js · Prisma · Postgres

Status

Beta · one group · free

Modo TV on a laptop: the live table of eight example players on the left, the round being played on two courts on the right, and a QR code to follow on a phone
Every screen on this page is the real app, running on invented players. No real group, name or result is shown.

The problem

An amateur padel group ran its weekly night across a spreadsheet, a generic draw app and WhatsApp messages. Nothing kept the season.

What I designed

One mobile web app for the whole night and what stays after it: list, draw, scores at the court, rankings, profiles, badges, and images made for the group chat. Pixel identity drawn in code.

Where it stands

Used weekly by one real group of about twelve. Free beta, no revenue, closed to new groups. The next test is whether groups that don't know me keep using it.

01

A night, and what stays

Drawing pairs is a solved problem, and free tools already do it. What a group keeps returning to is its own story: who leads the season, who always beats whom, the night someone won 6 to 0. So the product decision was to cover the whole night, then keep it.

01The weekly listThe organiser builds the list, keeps up to two reserves and sends a ready image to the group. When a spot opens, a player asks for it with one tap.
02The drawAmericano, Mexicano or Copa PP, for 8 to 12 players. With 9, 10 or 11 the rest rotates so everyone plays the same number of matches. Before drawing, it says how much court time the night needs.
03The live scoreThe organiser enters scores at the court; everyone else follows on their phone, or on the club's screen.
04The end of the nightPodium, the night's highlights and images ready for the group chat.
05The seasonRankings by month, year and all time, group records, a profile per player and badges. This is the part that keeps people coming back.
The group's home on a phone: an example group with its crest, and the night that is live right now
The group's home answers this week's question first
The ranking by wins for the month, with medals for the top three
Ranking by wins or points, by month, year or all time
A player's profile: their 8-bit player holding a trophy, rank badges and season numbers
A profile per player, with rivals and form
02

Five decisions that shaped it

Most of the product follows from a few calls made in the first days. Each one traded something away.

01A link, not an app storeThe group already lives on WhatsApp, so PPadel is a mobile web app that opens from a link and can be added to the home screen. Nobody installs anything to see the table.Traded away: Push notifications and offline use; reminders go by e-mail and a bell for now.
02Feed the chat, don't replace itEvery step of the night ends in an image or GIF sized for WhatsApp, with the name and the link. The chat stays where the group talks; PPadel is what it talks about.Traded away: Each new feature also needs its share image.
03One screen per job at the courtScores are entered standing up, with one hand. Modo Quadra (court mode) does only that; one tournament page serves players and organisers, with a single Admin switch.Traded away: Organiser tools are hidden until you switch them on.
04Never name the favouriteThe group's history could rank everyone. Tendência (the trend) only says “even match” or sets a challenge for the weaker pair, and after the match shows only good news.Traded away: Less precision on screen; the numbers stay on the server.
05Store matches, derive the restTables, rankings, records and badges are always computed from the matches, so fixing one score fixes everything that depends on it.Traded away: Pages recompute on every visit: fine for dozens of groups, not thousands.
03

Setting up the night

Creating a tournament takes three steps: who plays, the format, and a check before the draw. The whole group shows as small chips, so picking eight people is eight taps. Each format (Americano, Mexicano, Copa PP) explains in one line what changes, with its own pixel badge.

The same step asks how much court time is booked and shows how long the night will take, how many courts it needs and each round on a strip. When it doesn't fit, it suggests rounds and a set length that do.

New tournament: players, format, court time, draw
Then, at the court: Lançar placares (enter scores)
04

Made for the court

Scores get entered standing by the glass, phone in one hand, often on weak signal. Modo Quadra (court mode) is a screen for that and nothing else: the round that is on opens by itself, each match is a card with the score pad already in it, one tap per pair, then Save.

It vibrates on save and offers Undo, refuses a score with no winner, moves to the next round when one closes and keeps the screen awake. A save shows at once and reaches the server behind it; if the network fails, the screen says so.

Modo Quadra on a phone: round 5 open, court 1 with 6 and 4 picked and a large Save 6 × 4 button
Modo Quadra: two taps and Save
Modo TV: a score sent from a phone lands on the club's screen

Modo TV

Modo TV is for the club's screen or a laptop on the bench: the whole table and the current round fit without scrolling, set large enough to read from the court, with a QR code so anyone can follow on their own phone. On an upright tablet the table goes on top; on a narrow screen it stacks. When a score comes in, the winners celebrate and the losers sulk.

05

Tendência and Palpitômetro

A group night is half banter, so two features feed it. Tendência (the trend) gives each match a read from the group's history, worded so nobody is put down: “Even match”, or a challenge for the pair with less chance (“3+ games, and winning is a Zebra”, the group's word for an upset). The favourite is never named and there are no percentages; the numbers stay on the server. After the match only good news shows: a Zebra, or “Above the trend” for a pair that lost but beat the challenge.

Before it shipped, it was tested against the group's past nights: it leans on about 6 in 10 matches and is right on about 3 in 4 of those. In the Palpitômetro (the picks meter), each player logged in to the group picks who wins every match, round by round, before the first score; the crowd's count shows only after your own pick. Whoever gets the most right is the night's Profeta (prophet). No betting, no prize.

Palpitômetro: one tap per match, round by round
A finished round: the pair that wasn't expected to win carries a Zebra tag, and the night's highlights start below
After the match: the Zebra tag, then the night's highlights
End of the night: the Profeta, the table, the highlights
06

A pixel identity, drawn in code

The look comes from arcade scoreboards: pixel type, lime on near-black, used sparingly so the scores stay the loudest thing on screen. There are no image files behind the drawings. Each sprite is written as rows of characters, each letter a colour role, so one trophy becomes gold, silver and bronze by swapping the palette. The kit has 57 icons, 6 of them animated.

The icon kit: trophy, medal and laurels, each drawn once and shown in gold, silver and bronze at three sizes, on dark and light grounds
One drawing, three metals, three sizes
More of the kit: ball, net, court, floodlight, scoreboard, target, bolt, flame and crystal ball
Padel objects and effects, for logos and badges

Your own player

Each player builds an 8-bit version of themselves in steps: face, hair, clothes, extras, plus height, racket hand and a pose. A seed picks every layer, so the same player is drawn the same way everywhere, from a small row in the ranking to the podium. Some extras are earned: only players with the Zebra badge get the striped glasses.

The player redraws at every tap
Player editor, Hair step: twelve haircuts and hair colours
Hair: twelve cuts, any colour
A player card, holo rarity: the 8-bit player with a trophy under floodlights, rank and four numbers
The card's rarity follows the ranking
The back of the player card: every number, pairs, nemesis and the last matches
Tap to flip: every number on the back
Stickers: the player in four poses as transparent PNGs, with a Download all button
WhatsApp stickers, 512 × 512

A logo for every night

Each tournament gets a pixel logo built from its own data: name, group, date. The editor has four templates, seven shapes, colour themes or any colour (with a warning when contrast gets poor), more than fifty icons, mascots and animated details. Surprise me picks a combination that works, and every change can be undone. One spec gives a square, a story, a wide version and a seal, and an animated GIF.

Badges are drawn the same way and earned from results, never handed out: Champion, Unbeaten, On Fire!, Golden pair, Streak, Clutch, Zebra, Prophet and Attendance.

One night's logo, restyled in the editor
Example logo 1 for the same night: a different template, palette, background and iconExample logo 2 for the same night: a different template, palette, background and iconExample logo 3 for the same night: a different template, palette, background and iconExample logo 4 for the same night: a different template, palette, background and icon
Same data, four logos

Badges that move

The rarer badges and the night's highlights get a character of their own, animated, on the profile, in the unlock screen and in the GIF that goes to the group. The Zebra and the Profeta, and the scenes on the invite and the login e-mail, are my own pixel art.

Zebra

Won a match the history didn't point to

Profeta

Most right in the night's Palpitômetro

Embalado

Five or more wins in a row

Sangue frio

70% or more of the close matches

Invicto

Won every match of a night

Quem leva?

Calls the group to the Palpitômetro

07

Things that move

Motion is used where the night has a moment: the podium rises on a floodlit court and the champion lifts the trophy; on the product page the table reorders as invented scores come in; the night's logo sparks and bounces. Between rounds there is a pixel padel minigame, doubles against the computer in three levels, with a ranking between players and between groups. Logged in, you play as your own player.

The podium, at the end of every night
The minigame: a short set against the computer
The product page plays an invented night
The animated logo and the players' poses
08

Made for the group chat

The group already lives on WhatsApp, so PPadel feeds the chat instead of competing with it. The list, the draw, the result, the podium, the highlights and each player's card go out as images drawn in the browser on a canvas, with the app's own fonts and players: 1080 × 1350 for the feed, 1080 × 1920 for stories, or an animated GIF.

One large button changes with the device: Send to the group on a phone, Copy image on a computer. Every image carries the name and the link, which is the only way PPadel reaches new people today.

The podium at the end of the night: a floodlit court, the champion on the top block with a trophy
The podium in the app
The podium as a share image, with the night's logo and the link
The same podium, as a post
Every match and score of the night in one image, round by round
Every match, for the record
The final table as a story-sized image
The final table, as a story
09

The data underneath

Rankings and badges only work if people trust them, so the model was designed around one rule: nothing derived is stored. Standings come from the matches every time, so correcting one score fixes every table, ranking, record and profile that depends on it. Badges are computed from results for the whole group at once, because some depend on everyone (the golden pair).

Same tie-break as before

Wins, then game difference, as the group already counted. The history since mid-September was imported and recounted match by match, and each night had to match the old app's table.

People apart from groups

A member is one person; a membership gives them a role in a group: owner, organiser or player. The model is already multi-group, though only one group uses it.

Fair draws at any size

Super 8 and 12 use fixed rotations where everyone partners everyone once. With 9 to 11 players the rest rotates; in Mexicano only the first round is drawn and the next ones come from the table.

Live without a socket

Spectators poll a small version tag, not the page; the page reloads only when a score actually changes.

Charts from the same matches

Each profile reads the season from the matches: form, place per night, rank over time, games per match, close matches, wins by round, pairs, the nemesis and the favourite opponent. The group gets its own numbers. Every figure has an “i” that says what it counts.

A player's season: four numbers with icons, the last ten matches, place per tournament and a rank-over-time line
Season, form and rank over time
A player's numbers: games per match, close-match rate, Palpitômetro rate, wins by round and the biggest win
Numbers, from close matches to wins by round
Rivals and badges: best pairs, pair chemistry bars, nemesis, favourite opponent and the badges earned and still to earn
Rivals, pair chemistry and badges
The group in numbers: how many players hold each badge this season, and the rarest one
The group's badges this season
10

Seven days with an AI agent

I made the product calls, designed the screens and the pixel system, and directed the build. Claude Code, an AI coding agent, wrote the code with me: nearly every one of the roughly 220 commits between 4 and 10 November 2026 is co-authored with it, about 32,000 lines in all. Each decision is written down as a comment next to the code, and a check script of 674 lines covers the draws, rest rotation, Mexicano, substitutions, logins and sessions.

4 NovDay 1First version: Super 8 and Super 12, live score, ranking, 8-bit players, an animated podium.
5 NovDay 2The group's history imported and recounted match by match; records and badges; share images; accounts by invite; the player editor.
6 NovDay 3Mexicano; a pixel logo for every night; the open list; the home page from 650 KB to 260 KB.
7 NovDay 4Tendência and Palpitômetro; editing a tournament without changing its link; animated GIF cards.
8 NovDay 5Logo shapes, mascots and motion; player cards; stickers; Modo Quadra for one hand; Modo TV that fits any screen.
9 NovDay 6Copa PP and court time; e-mails and a notification bell; numbers for players, nights and the group.
10 NovDay 7Players and podium redrawn, 21 new icons, the group crest; a product page, cookie consent and a privacy note.

The release notes in the app list every change by date, in Portuguese, for the players themselves.

11

What isn't proven yet

PPadel works for one group: about twelve people who know me. Nobody outside that circle has run a night with it on their own. Only I can create a group, there is no payment and no revenue, and it is free during the beta. Free tools already draw pairs; whether a group would pay for its history and its look is still a guess.

Before going further I asked for a full audit of the product, the code and the market. Its verdict: a promising opportunity, not yet proven. The next step is not code. It is giving the link to three to five groups that don't know me and seeing whether they keep using it without help.

What I learned

  • Speed moved the bottleneck. With an AI agent, several features shipped in a single day, so building stopped being the hard part. Knowing which of them a second group would need became the hard part.
  • Breadth before proof has a cost. The logo editor, the minigame and the stickers make the nights richer, but the audit flagged them as surface to maintain before a second group has shown up.
  • Designing for one real group is a strong brief. Each weekly night put every change in front of the people who use it. It is also why the product still speaks that group's language, which the next groups will notice.

In use

One group of about twelve players, on its weekly nights

Open to others

Not yet: new groups start with a message to me

Before charging

Database migrations, a full privacy policy and terms, sign-up

Today everything in a group is public by default, and there are no per-player privacy settings yet; that is on the list too. The example names on this page come from PPadel's product page; the real group's names, faces and results stay out of it.

Mostrando em português