Inspiration

We’ve all been there: You're an exchange student in Europe, your best friend is back in New York, and you want to meet up. But where? Paris? London? Istanbul? Usually, this involves opening 15 browser tabs, checking prices for both people, converting currencies, and creating complex spreadsheets to find a "fair" location. The coordination headache often kills the trip before it even starts.

We built ReUnion to answer one simple question: "Where can we meet halfway, for the lowest total price?"

What it does

ReUnion is a fairness-first travel engine.

  1. Dual-Origin Search: Users input two different starting locations (e.g., NYC and LON).
  2. Smart Hub Scanning: Instead of searching random cities, our algorithm intelligently scans 15 major global connector hubs (like Istanbul, Dubai, Bangkok, Reykjavik) based on the user's selected region.
  3. Budget & Fairness Logic: It filters results by total budget and prioritizes destinations that are affordable for both parties, rather than just cheap for one and expensive for the other.
  4. Top 3 Recommendations: It instantly presents the top 3 itineraries, showing exactly how much each person pays.

How we built it

We used a modern serverless stack to ensure speed and scalability:

  • Frontend: Built with React (Vite) and TypeScript, styled with Tailwind CSS and Shadcn UI for a polished, accessible experience.
  • Backend: We utilized Supabase Edge Functions (Deno runtime) to handle the complex business logic securely in the cloud.
  • Data: Integration with the Amadeus Flight Offers API to fetch real-time pricing and availability.
  • DevTools: Accelerated development using Lovable for rapid UI prototyping and Supabase for backend orchestration.

Challenges we ran into

Our biggest hurdle was the "Search Everywhere" API limitation. We initially planned to use the Amadeus "Flight Inspiration Search" endpoint to find destinations. However, we discovered during testing that the API's sandbox environment had limited cached data for US origins (often returning 500 errors).

The Pivot: Instead of giving up, we engineered a robust "Hub Search Strategy." We created a dictionary of strategic global hubs (e.g., DXB for Asia-Europe connections, MIA for Americas) and built a backend function that iterates through these specific high-probability meeting points. This ensured reliability for the demo while still delivering the "Search Everywhere" experience.

Accomplishments that we're proud of

  • Resilient Error Handling: We built a "fail-safe" search engine. If one hub query fails (e.g., Tokyo times out), the app logs the error and continues searching other cities (Singapore, Bangkok) without crashing the user experience.
  • The "Fairness" Metric: We successfully implemented logic that doesn't just look for the cheapest flight, but calculates the combined cost for two travelers arriving from different continents.
  • Production-Ready UI: Going from a rough idea to a polished, responsive app with budget sliders, region filtering, and skeleton loading states in under 24 hours.

What we learned

  • API Rate Limiting: We learned how to manage API quotas by batching requests and limiting our search scope to high-value hubs rather than "brute forcing" every city in the world.
  • Edge Functions: We gained deep experience in writing serverless TypeScript functions that act as a secure bridge between a client-side app and third-party APIs.

What's next for ReUnion

  • Hotels & Airbnb: Integrating accommodation prices to give a true "Total Trip Cost."
  • Group Mode: Expanding the algorithm to find meeting points for 3+ friends scattered across the globe.
  • Date Flexibility: Adding a "Flexible Dates" feature to find the cheapest weekend in a given month.

Built With

  • amadeus-api
  • deno
  • edge-functions
  • lovable
  • react
  • shadcn-ui
  • supabase
  • tailwind-css
  • typescript
  • vite
Share this project:

Updates