Case study · Side project
Palpita.
A score-prediction pool that turns the family group chat into a season-long championship.
The product
Every big tournament starts the same way: someone opens a spreadsheet, predictions fly across the group chat, and by round three nobody knows who is actually winning. Palpita replaces that ritual with a running, always-current championship.
Anyone can create a group, pick a competition, and bring their people in. Each member fills in score predictions for the round, and as real results come in the standings update themselves. No spreadsheets, no arguing over points.
It is friendly competition, not gambling: no odds, no stakes, no money. During the 2026 World Cup, groups logged more than five thousand predictions on the platform.
How it works
Four steps to bragging rights
- 01
Create your group
Sign in with Google or Discord and open a pool for the competition you care about.
- 02
Invite your people
Share an invite link with friends and family, and everyone joins the same table.
- 03
Predict each round
Fill in your scores for every match of the round before kickoff.
- 04
Climb the table
Points land as real results come in, and the standings update round by round.
Inside the app
The whole loop, one place
5,000+
Predictions logged
20,000+
Visits during the World Cup
4 weeks
From first commit to kickoff
Under the hood
- Next.js
- TypeScript
- Tailwind CSS
- Supabase
- Spec-driven development
- Built with Claude Code: every feature starts as a written spec, becomes a design doc, then an implementation plan before any code lands.
- Next.js 16 + React 19
- App Router with server actions, strict TypeScript, Tailwind CSS v4, and shadcn/ui as the component base.
- Supabase
- Postgres, Auth, and Realtime in one backend. Row Level Security on every table, with a service-role client reserved for trusted server actions.
- Auth flow
- Google and Discord OAuth, no passwords stored. Sessions refresh in middleware, and invite links survive the login roundtrip.
- Data layer
- TanStack Query for server state, Zustand for the little global state that remains, React Hook Form with Zod v4 validating the edges.
- Design system
- A documented token system with first-class dark and light themes, oversized numerals, and motion that earns its place.