Explore the game
Ask about upcoming games, rosters, invitations, groups, open games, Philippine courts, or Relay guides. Answers use permission-checked tools and link back to relevant records.
Full-stack software developer
Full-stack web product · Social sports
From the first invite to the final score, Relay keeps a pickleball session together. Find a court, bring the crew, run rotations, and share a Story—with an AI Agent to answer game questions and prepare plans for review.
A conversation grounded in the game, with a separate boundary for creation.
Ask about upcoming games, rosters, invitations, groups, open games, Philippine courts, or Relay guides. Answers use permission-checked tools and link back to relevant records.
When enabled, prepare a hosted game or draft, replay a completed game, create a group, or set up device-local Quick Play. Agent reuses supplied details and asks one missing question at a time.
A server-owned proposal makes the schedule, audience, and creation effects explicit. Confirmation rechecks permissions; retries recover the saved result. Creation availability depends on current Agent settings.
Product showcase
Selected product surfaces and public demonstrations. Demo images use illustrative records; captions identify those examples.






Recreational pickleball groups coordinate the plan, roster, venue cost, court order, and scores across group chats, spreadsheets, and whoever happens to remember what comes next.
Start with a court, a hosted game, or device-local Quick Play. A shared game link connects guest RSVPs, the roster, costs, rotations, scores, chat, and Stories. Agent adds a conversational entry point: explore authorized game details, answer one missing question at a time, and review a proposal before creating anything.
Product journey · 7 connected features
Relay replaces the scattered chat, spreadsheet, scorekeeper, and payment follow-up with one continuous product flow.
01 · Plan
Philippines court discovery, date and time, courts, capacity, booking details, and readiness.
Set the plan. Share the link.
02 · Invite
Guest RSVP, host approval, capacity, and an automatic waitlist. Guests do not need an account.
03 · Organize
Roster controls, recurring groups, calendar, global search, and Play Again.
Roster · 8 going · 1 waitlisted Add player
04 · Play
Device-local Quick Play or hosted games, five play formats, multi-court scoring, and standings.
05 · Repay
GCash, Maya, bank or cash, proof review, exclusions, and adjusted shares.
06 · Stay in sync
Realtime chat, photos, reactions, system updates, and useful notifications.
Parking is open beside Court 2.
Perfect. I’ll bring the extra balls.
Court 1 match started07 · Remember
Five Story themes for invitations, photo memories, and results. Share or download a 1080 × 1920 image.
#2 · +12
wins together
1 Van 3–1
2 AJ 2–2
3 Mika
01 / 07
Next.js Server Components load the initial session state. Server actions and queries enforce authorization and product rules. Agent uses Vercel AI SDK and OpenRouter to stream answers through permission-checked tools, with explicit approval before creation.
Session, roster, payment, match, queue, group, and notification code is organized with its schemas, actions, queries, and interface components.
Mutations validate the signed-in user, session role, lifecycle state, and Zod input before changing data.
Drizzle and PostgreSQL model sessions, players, courts, matches, queues, expenses, chat, and memories with explicit constraints.
An authenticated API validates requests and usage limits, then uses Vercel AI SDK, @ai-sdk/react, and OpenRouter for chat and streaming. Zod-validated tools read authorized games, groups, courts, and Help Center articles. Models receive selected fields, never a database connection or arbitrary SQL access.
When creation is enabled, Agent gathers missing details into owner-scoped proposals. Server-generated review cards require explicit approval; confirmation rechecks permissions and calls shared business commands. Stored results let retries recover an existing creation without duplicates. Provider credentials are encrypted server-side with AES-256-GCM.
Public RSVP, progressive forms, court controls, scoring, and realtime reconciliation run on the client. The rest of the page remains server-rendered.
These decisions affect what users can do, where product rules live, and how the system handles failure or change.
The session owns the plan, roster, expenses, courts, queue, matches, chat, and recap. Users can move through one game without learning separate management areas.
Invitees can check the time, venue, capacity, estimated cost, and booking status, then RSVP by name without creating an account.
Large score controls, deterministic rotations, visible queue state, and focused live views prioritize fast one-handed decisions beside the court.
The live product and public repository provide concrete evidence of the implemented features, architecture, tests, and documentation.