Lohith Devaramane
← registry
ENG-030deployed

Split — RSVP links and fair cost splits for group games

I book the court, post it in the group, people reply “in” or say nothing, and someone has to work out who owes what. Now the booking email creates the game, one link collects the RSVPs, and the money takes care of itself.

Client

Personal — my weekly badminton group, built to work for any shared cost

Role

Solo. Product, design, build, deploy.

Timeframe

October 2026 — one day to first use, then iterated with the group

Stack

Next.js 16 · Supabase · Postgres row-level security · Google Apps Script · Vercel

● live system → split-in-psi.vercel.app

Roster-only: sign-in works for invited emails, so the live link shows the sign-in screen.

01 — Situation

Booking apps split a single booking but keep no running balance per person. Expense apps keep balances but want every player to install something and enter the game by hand.

The real cost was attention: every game needed someone to read the chat, count the replies, do the division, and chase.

02 — Constraints

  • !No one but the roster can see anything; invited emails only, enforced in the database, not the UI.
  • !No third party reads my inbox. The booking email is parsed by a script inside my own Google account and only the booking text leaves it.
  • !Friends must not need an app: one link, one tap.

03 — Stakeholders

The organizer

Zero manual steps between booking and settled.

Regulars

Being counted in by default, with a one-tap way out.

Everyone

Knowing their share and paying it in one tap.

04 — Architecture

  1. 01Playo confirmation email → Apps Script → the app's ingest endpoint; the parser reads venue, court, slot and amount, and the game is keyed by booking id so re-delivery is a no-op.
  2. 02Every authorization rule lives in Postgres row-level security: a player can only RSVP for themselves, a host manages only their own games, balances are computed from a view that respects the same rules.
  3. 03An outbox table queues player emails — game created, your share, settle-up nudge every 15 days — and the host's own Gmail sends them, so the app never holds mail credentials.

05 — What shipped

  • ✓Paste-to-create from the Playo share text or email, RSVP page, walk-in additions, weighted shares, finalize with validation in the database.
  • ✓Per-person balances, UPI deep links with the amount filled in, “I paid” confirmations, and a branded WhatsApp link preview.
  • ✓Hosts, regulars, a Setup page for anyone to connect their own Gmail, and evening check-in emails.

06 — Outcomes

5 min

from booking email to game link in the group, with nobody typing

24

security tests that attack the API as a stranger, a player and a host

₹0

to run: free tiers of Vercel, Supabase and Gmail

07 — Retro: what I'd do differently

Real emails differ from pasted ones — bold markers, wrapped lines, a different reschedule layout. Testing against the actual message, not a copy, found every parser bug.

Keeping the rules in the database meant every feature added later, hosts included, inherited the security model instead of re-implementing it.

Questions about this engagement?

Ask the copilot →