Skip to content

maybiiLen/TAMU-Hack-26

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

flybetter.ai

TAMUhack 2026 | Book your perfect trip with a single phone call or text message.

FlyBetter.ai is an intelligent travel planning platform that combines the power of AI with real-time inventory data to create personalized trip itineraries. Whether you prefer typing or talking, TripOwl makes booking flights, hotels, restaurants, and transportation seamless.


The Vision

"Plan a 3-day trip to NYC from Houston, budget $400, I love Italian food and Broadway shows."

That's all it takes. TripOwl understands natural language, fetches real availability, and creates a complete itinerary—all in seconds. No forms, no endless scrolling, no decision fatigue.

Two Ways to Book

Text-Based Planning Phone Booking
Send a free-text request via API Call and speak naturally
Iterate with follow-ups like "make it cheaper" AI asks for missing details
Perfect for developers and integrations Just like calling a travel agent

Key Features

Natural Language Understanding

  • Parse complex requests: "4-day trip to Paris next month, under $2000, prefer boutique hotels"
  • Smart validation asks for missing info (destination, dates, budget, origin)
  • Iterative refinement: "swap the hotel for something closer to downtown"

Real Inventory Integration

  • Flights: Real flight numbers, times, airlines, and prices
  • Hotels: Actual availability with ratings and amenities
  • Restaurants: Curated options filtered by cuisine preferences
  • Transport: Rideshare, rental, and transit options

Personalized Itineraries

  • Optional preferences: activities, food, interests
  • Budget-conscious planning that respects constraints
  • Daily schedules with restaurant reservations timed perfectly

On-Call Booking (Voice AI)

  • Powered by ElevenLabs for natural conversation
  • Multi-turn dialogue to gather trip details
  • Speaks back flight, hotel, and cost summaries
  • Confirm or cancel with voice commands

Anonymous Checkout

  • No account required
  • Temporary checkout tokens (30-minute expiry)
  • Simple confirm/cancel flow

Tech Stack

Backend

Technology Purpose
Node.js Runtime environment
Express.js REST API framework
MongoDB Atlas Database for plans & sessions
Google Gemini AI Natural language processing & plan generation
ElevenLabs API Voice transcription & synthesis

Frontend

Technology Purpose
Next.js 15 React framework with App Router
TypeScript Type-safe development
Tailwind CSS Styling
Auth0 Authentication (optional)

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                         Frontend (Next.js)                       │
└─────────────────────────────────────────────────────────────────┘
                                 │
                                 ▼
┌─────────────────────────────────────────────────────────────────┐
│                      Backend (Express.js)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │
│  │ Trip Routes │  │Phone Routes │  │ Inventory   │             │
│  │   /api/trips    │   /api/phone    │   APIs        │             │
│  └─────────────┘  └─────────────┘  └─────────────┘             │
│         │                │                │                      │
│         ▼                ▼                ▼                      │
│  ┌─────────────────────────────────────────────┐               │
│  │           Services Layer                     │               │
│  │  • geminiService (AI planning)              │               │
│  │  • inventoryService (real data)             │               │
│  │  • phoneService (voice flow)                │               │
│  │  • elevenLabsService (transcription)        │               │
│  └─────────────────────────────────────────────┘               │
└─────────────────────────────────────────────────────────────────┘
                                 │
                                 ▼
┌─────────────────────────────────────────────────────────────────┐
│                      MongoDB Atlas                               │
│  • TripPlan (itineraries)                                       │
│  • CheckoutSession (phone bookings)                             │
└─────────────────────────────────────────────────────────────────┘

📡 API Endpoints

Trip Planning (Workflow A)

# Create a new trip plan
POST /api/trips/plan
{ "requestText": "3-day NYC trip from Houston, $500 budget" }

# Iterate on existing plan
POST /api/trips/plan/:planId/iterate
{ "userText": "make it cheaper" }

# Get plan details
GET /api/trips/plan/:planId

Phone Booking (Workflow B)

# Initial intake (text or audio)
POST /api/phone/intake
{ "requestText": "I want to plan a trip" }

# Provide additional info
POST /api/phone/checkout-session/:token/additional-info
{ "additionalText": "NYC, January 28th, $400, from Houston" }

# Get session status
GET /api/phone/checkout-session/:token

# Confirm booking
POST /api/phone/checkout-session/:token/confirm

# Cancel
POST /api/phone/checkout-session/:token/cancel

Inventory APIs

GET /api/flights?date=2024-01-28&origin=IAH&destination=JFK&limit=5
GET /api/hotels?city=New%20York%20City&limit=5
GET /api/restaurants?city=New%20York%20City&cuisine=Italian&limit=8
GET /api/transport?city=New%20York%20City&limit=6

Getting Started

Prerequisites

  • Node.js 18+
  • MongoDB Atlas account
  • Google AI Studio API key (Gemini)
  • ElevenLabs API key (for voice)

Installation

# Clone the repository
git clone https://github.com/maybiiLen/TAMU-Hack-26.git
cd TAMU-Hack-26

# Install backend dependencies
cd backend
npm install

# Install frontend dependencies
cd ../frontend
npm install

Environment Variables

Create backend/.env:

PORT=5001
NODE_ENV=development
MONGODB_URI=mongodb+srv://...
MONGODB_DB=tamuhack_db
GEMINI_API_KEY=your_gemini_key
ELEVENLABS_API_KEY=your_elevenlabs_key
NEXT_PUBLIC_API_URL=http://localhost:5001

Running the App

# Terminal 1: Start backend
cd backend
npm start

# Terminal 2: Start frontend
cd frontend
npm run dev

Phone Booking Flow

┌─────────────────────────────────────────────────────────────────┐
│  User calls                                                   │
│  "Hey, I want to plan a trip"                                   │
└─────────────────────────────────────────────────────────────────┘
                                ↓
┌─────────────────────────────────────────────────────────────────┐
│  Owen (AI) asks for required info                            │
│  "Where would you like to go? When? What's your budget?         │
│   What city are you flying from?"                               │
└─────────────────────────────────────────────────────────────────┘
                                ↓
┌─────────────────────────────────────────────────────────────────┐
│  User provides details                                        │
│  "New York, January 28th, under 400 dollars, from Houston"      │
└─────────────────────────────────────────────────────────────────┘
                                ↓
┌─────────────────────────────────────────────────────────────────┐
│  Owen asks for preferences (optional)                        │
│  "Any activities you enjoy? Food preferences? Or surprise you?" │
└─────────────────────────────────────────────────────────────────┘
                                ↓
┌─────────────────────────────────────────────────────────────────┐
│  User responds                                                │
│  "I love Italian food and want to see a Broadway show"          │
└─────────────────────────────────────────────────────────────────┘
                                ↓
┌─────────────────────────────────────────────────────────────────┐
│  Owen reads back the plan                                     │
│  "I found you a United flight at 8:45 AM for $180.              │
│   You'll stay at Pod Times Square, $75/night.                   │
│   Total: $380, under your $400 budget!                          │
│   Would you like to confirm?"                                   │
└─────────────────────────────────────────────────────────────────┘

Testing

Test the Phone Flow

# 1. Start with vague request
curl -X POST http://localhost:5001/api/phone/intake \
  -H "Content-Type: application/json" \
  -d '{"requestText": "I want to plan a trip"}'

# 2. Provide required details (use token from step 1)
curl -X POST http://localhost:5001/api/phone/checkout-session/TOKEN/additional-info \
  -H "Content-Type: application/json" \
  -d '{"additionalText": "New York, January 28th, $400 budget, from Houston"}'

# 3. Provide preferences
curl -X POST http://localhost:5001/api/phone/checkout-session/TOKEN/additional-info \
  -H "Content-Type: application/json" \
  -d '{"additionalText": "I love Italian food and Broadway shows"}'

# 4. Confirm
curl -X POST http://localhost:5001/api/phone/checkout-session/TOKEN/confirm

Test Trip Planning

curl -X POST http://localhost:5001/api/trips/plan \
  -H "Content-Type: application/json" \
  -d '{"requestText": "Plan a 3-day trip to Miami from Dallas, budget $800, interested in beaches and nightlife"}'

Team

Built with the power of friendship at TAMUhack 2026


📄 License

MIT License - feel free to use this for your own projects!

About

tamuhack'26

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors