Inspiration

Being in the volleyball community for a while now, especially when starting volleyball felt so hard to come by. On Staten Island where I'm from there is only one indoor open gym court that only opened recently and it still costs $15; before this existed open gym opportunities were limited to driving to New Jersey or paying almost $30 sometimes to play in Brooklyn, Queens, or Manhattan.

So a solution ? Grass and Beach has been growing along side indoor so why not have open play for that too, its practically free and does not require any gyms.

What it does

Live map of upcoming games with distances, refreshed every 10 seconds so new games pop in. Ask GO! lets you search in plain English, like “free beach games tonight” or “intermediate indoor game tomorrow evening,” and get matching games instantly. Court Pulse shows when each court is busiest (by hour and day) and how activity is trending this week, so you know when to show up for a good run. Weekly leaderboard ranks players by games played this week and resets every Monday. Social layer: a community feed, profiles with photos and videos, likes, and friend requests.

How we built it

GO! is a React Native app built with Expo. Before the hackathon it had sign-in, a basic feed, profiles, and map pins, all stored in Firebase Firestore. This weekend I moved all app data to Tiger Cloud and built the features that use it:

Tiger Cloud (PostgreSQL + TimescaleDB + PostGIS) is now our only database. Every game created, joined, left, or checked into is written to a TimescaleDB hypertable. Two continuous aggregates in real-time mode turn that activity log into Court Pulse (hourly activity per court) and the weekly leaderboard. Both are computed inside the database, not on the phone, and new activity shows up immediately. PostGIS powers “games near me” distance search. Google Gemini turns plain-English requests into structured search filters (court type, day, time of day, price, skill, distance), and Tiger runs the actual query. Firebase still handles sign-in and photo/video storage, and hosts a single Cloud Function API that every screen talks to. Firebase verifies who’s calling, and the database credentials never touch the phone. Joining a game locks the session row in a transaction, so two players can’t grab the last spot at the same time. I seeded 4 weeks of simulated activity (10 Buffalo-area courts, 24 players, ~3,000 events) to show what Court Pulse looks like at scale. The logo and brand art are hand-drawn.

The API responds in about 35 ms for the feed and 79 ms for the map’s games.

Challenges we ran into

Moving from Firestore’s loose documents to SQL tables meant redesigning how games, players, posts, and activity relate to each other, while keeping the app’s screens working. Email verification. The Twilio code system depended on a SendGrid account whose trial had expired, so we switched to Firebase’s built-in verification links. Then we discovered Firebase’s email enumeration protection made every email look like an existing account, sending new users to the login screen, so we redesigned the signup flow to create the account first and route returning users from there.

Accomplishments that we're proud of

Migrating a working app from Firestore to Tiger Cloud in one weekend, with zero Firestore left in the app. A hand drawn brand that gives the app its own personality.

What we learned

How hypertables and continuous aggregates let you ask time based questions cheaply, without precomputing everything in the app. How much a relational database simplifies features like joins, counts, and leaderboards compared to a document store.

What's next for GO!

Scaling, real time users, more hand drawn assets and unique UI/UX to make it feel complete.

Built With

Share this project:

Updates

Submission history