Inspiration

Every friend group I know has the same problem. Someone asks "want to go out this weekend?" in the group chat, everyone says yes, and then nothing happens. Nobody wants to be the one who picks the place, figures out the commute, and asks everyone for money. The plan dies somewhere between "anywhere is fine" and "you decide."

I wanted an app that does the boring part for you. You say what you're in the mood for, how much you can spend, and how many people are coming, and you get a real plan you can send to the group right away.

What it does

Gala turns a vibe, a budget, and a headcount into a full itinerary: the stops, the routes between them, the timing, and how much each person pays. From there the group can vote on stops, talk inside the plan's own chat, and see each other's location on the day of the outing so nobody gets lost.

Plans can be Private (invite only), Public (anyone can view and copy it), or Open (anyone can view and join, like an event you RSVP to). Pricing is in Philippine Pesos, and the recommendations lean local, because that's who I built it for first.

The cost split is simple on purpose:

$$ \text{cost per head} = \frac{\sum \text{stop costs} + \text{transport}}{n} $$

where n is the number of people going.

How I built it

I built Gala solo as a Turborepo monorepo:

  • Mobile: Expo + React Native + TypeScript
  • Web: Next.js 14
  • API: NestJS, deployed on Railway
  • Database and auth: Supabase (Postgres)
  • Subscriptions: RevenueCat, with one project and matching entitlement IDs on iOS and Android so revenue from both stores shows up in one dashboard
  • Builds: EAS Build

I also designed the whole thing in Figma myself. I'm an engineer, not a designer, so this project doubled as my crash course in graphic design.

Challenges

Purchases that went nowhere. For a while, when someone subscribed, the app never found out. A small setup mistake meant the purchase updates were being sent to the wrong address. Nothing crashed, so it took me days to notice. Fixing it taught me to double check the boring stuff.

Keeping the free tier fair. At first, the limit on free AI plans only lived in the app itself, which meant it could be worked around. I moved it behind the scenes so the limit actually holds.

Getting onto Google Play. New developers have to run a closed test with real testers for two full weeks before they can launch publicly, which is a long wait when you're racing a deadline. Setting up payouts was its own puzzle too, since the bank details needed to be in US dollars and mine were in pesos.

Doing it alone around a full schedule. I was working as a contract engineer through most of the build and I teach at a university, so Gala got built in whatever hours were left.

What I learned

  • Verify every URL and domain against your actual infrastructure. A placeholder that "looks right" can break production for days.
  • Anything that protects revenue or limits usage has to live on the server.
  • I build fast with AI tools, and the biggest risk isn't bad code, it's intent slowly drifting across sessions. Writing one sentence before each feature (who it's for, what data it needs, what "done" looks like) kept things on track without needing full specs.
  • Design is a skill you can learn by shipping. I'm a lot better at it now than I was in August.

What's next

Web billing, a rethink of the Pro tier and pricing, and a way to find open plans from other people heading to the same place you are.

Built With

Share this project:

Updates

Submission history