Unto is an intelligent travel planning application that leverages AI to automatically search and recommend flights and accommodations for your travel needs. Built with modern web technologies and powered by the Portia AI framework, Unto provides a seamless experience for planning your next trip.
- Smart Travel Planning: AI-powered search for flights and accommodations
- Real-time Results: Live updates on search progress with detailed step tracking
- Comprehensive Search: Finds both departure and return flights along with hotel accommodations
- Multiple Cabin Classes: Support for economy, business, first, and premium economy
- Interactive UI: Modern, responsive interface with smooth animations
- Direct Booking Links: Deep links to Skyscanner for flight bookings and hotel booking URLs
Unto consists of two main components:
- FastAPI server providing REST APIs for travel planning
- Portia SDK for AI-powered plan execution and tool orchestration
- Custom Tools for flight and accommodation search via Apify
- Real-time State Management with polling-based updates
- Next.js 15 with App Router for modern React development
- Tailwind CSS for styling with Radix UI components
- Framer Motion for smooth animations and transitions
- Real-time Updates via polling for plan execution status
- Node.js 18+ and Bun (for frontend)
- Python 3.13+ and UV (for backend)
- API Keys:
- Google Gemini API key for AI models
- Apify API token for flight/hotel search
- Portia AI API Key
-
Clone the repository
git clone <repository-url> cd unto
-
Backend Setup
cd backend # Install dependencies uv sync # Create .env file with required API keys echo "GOOGLE_API_KEY=your_google_api_key" >> .env echo "APIFY_API_TOKEN=your_apify_token" >> .env # Start the backend server uv run uvicorn app:app --reload --host 0.0.0.0 --port 8000
-
Frontend Setup
cd frontend/unto # Install dependencies bun install # Start the development server bun dev
-
Access the Application
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/docs
- FastAPI - Modern Python web framework
- Portia SDK - AI framework for plan execution and tool orchestration
- Apify Client - Web scraping platform for travel data
- Pydantic - Data validation and serialization
- Uvicorn - ASGI server
- Next.js 15 - React framework with App Router
- React 19 - Latest React with concurrent features
- TypeScript - Type-safe JavaScript
- Tailwind CSS - Utility-first CSS framework
- Radix UI - Headless UI components
- Framer Motion - Animation library
- Lucide React - Icon library
-
Enter Travel Details
- Origin and destination cities
- Departure and return dates
- Cabin class preference
- Number of passengers
-
AI Planning Process
- Watch real-time updates as the AI searches for options
- Track progress through different search steps
- View intermediate results as they become available
-
Review Results
- Compare departure and return flight options
- Review accommodation recommendations
- Access direct booking links for selected options
Create a new travel plan with the following parameters:
origin- Departure citydestination- Arrival citydeparture_date- Departure date (YYYY-MM-DD)return_date- Return date (YYYY-MM-DD)cabin_class- Cabin class (economy, business, first, premiumeconomy)passengers- Number of passengers
Get the current status and results of a travel plan execution.
unto/
βββ backend/ # FastAPI backend
β βββ app.py # Main FastAPI application
β βββ plans.py # Portia plan definitions
β βββ constants.py # Configuration and hooks
β βββ tool/ # Custom search tools
β β βββ flight_search_tool.py
β β βββ hotel_search_tool.py
β βββ demo_runs/ # Sample execution data
βββ frontend/unto/ # Next.js frontend
β βββ src/
β β βββ app/ # App Router pages
β β βββ components/ # Reusable UI components
β β βββ lib/ # Utility functions
β βββ public/ # Static assets
βββ README.md # This file
Unto uses the Portia SDK to orchestrate AI-powered travel planning:
- Google Gemini Models for natural language processing and decision making
- Custom Tools for flight and accommodation search
- Structured Output with Pydantic schemas for consistent data format
- Real-time Hooks for progress tracking and state updates
PORTIA_API_KEY=your_portia_api_key
GOOGLE_API_KEY=your_google_gemini_api_key
APIFY_API_TOKEN=your_apify_api_tokenThe system uses Google Gemini models for different aspects:
- Execution Model:
google/gemini-2.5-flash - Planning Model:
google/gemini-2.5-flash - Summarizer Model:
google/gemini-2.5-pro
cd backend
uv run uvicorn app:app --reload --host 0.0.0.0 --port 8000cd frontend/unto
bun dev# Backend
cd backend
uv build
# Frontend
cd frontend/unto
bun run build- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is part of AgentHack 2025 and is intended for demonstration purposes.
For questions or issues:
- Check the API documentation at
/docswhen running the backend - Ensure all required API keys are properly configured
Built with β€οΈ for AgentHack 2025
