Your AI travel companion that talks, searches, and calls restaurants for you.
Talk to Wayfarer to discover restaurants, get local news, find events — and let it call places on your behalf in 15 languages.
Features · Demo · Quick Start · Architecture · Project Structure
-
Voice AI Assistant — Talk naturally with Wayfarer to find restaurants, get news, discover events. Powered by ElevenLabs Conversational AI with WebRTC (echo cancellation, low latency).
-
Smart Place Search — Google Places for structured data (ratings, photos, reviews, hours). Firecrawl for web search, news, and events with location customization.
-
Place Cards in Chat — When you ask for restaurants, Wayfarer shows interactive cards with photos, ratings, and reviews right in the conversation.
-
AI Phone Calls — Wayfarer calls restaurants on your behalf to check availability or make reservations. The AI speaks in the local language with a native voice via ElevenLabs + Twilio.
-
Real-time Local Info — News, events, traffic, weather — all powered by Firecrawl search with location customization and time filtering.
-
Map + Explore — Full map view with nearby places, restaurants, attractions, cafes & bars.
wayfarer-2-compressed.mp4
| Layer | Technology |
|---|---|
| iOS App | SwiftUI, MapKit, CoreLocation, ElevenLabs Swift SDK (WebRTC) |
| Backend | Node.js, Express, TypeScript |
| Voice AI | ElevenLabs Conversational AI — chat agent + phone call agent |
| Web Search | Firecrawl — search, news, events with location & time filters |
| Places | Google Places API — ratings, photos, reviews, hours |
| Phone Calls | Twilio + ElevenLabs managed outbound calls |
| AI Text | Anthropic Claude API |
| Deploy | Railway |
┌─────────────────────────────────────────────────────────┐
│ iOS App (SwiftUI) │
│ │
│ ┌────────┐ ┌───────────────┐ ┌────────┐ ┌───────┐ │
│ │ Map │ │ Voice Chat │ │Explore │ │ Calls │ │
│ │(MapKit)│ │(ElevenLabs │ │(Cards) │ │(Live) │ │
│ │ │ │ Swift SDK) │ │ │ │ │ │
│ └────────┘ └──────┬────────┘ └────────┘ └──┬────┘ │
└─────────────────────┼───────────────────────────┼───────┘
│ │
Direct WebRTC REST API
│ │
┌─────────▼──────────┐ ┌─────────────▼────────────┐
│ ElevenLabs Agent │ │ Backend (Express.js) │
│ (Conversational) │ │ │
│ │ │ Google Places → places │
│ Tools: │ │ Firecrawl → search │
│ • search_places ──┼─>│ Firecrawl → news │
│ • web_search ──┼─>│ Firecrawl → events │
│ • search_news ──┼─>│ ElevenLabs → calls │
│ • search_events──┼─>│ Twilio → phone │
└────────────────────┘ └──────────────────────────┘
- Node.js 20+
- Xcode 16+ with iOS 17 SDK
- API keys (see Required API Keys)
cd wayfarer-backend
cp .env.example .env # Fill in your API keys
npm install
npm run dev # Starts on port 3000- Open
Wayfarer.xcodeprojin Xcode - Wait for SPM to resolve the ElevenLabs SDK
- Update
Wayfarer/Core/Utilities/Constants.swiftwith your backend URL - Build & Run on device (Cmd+R)
- Allow location and microphone access
Info.plist must include
NSMicrophoneUsageDescriptionandNSLocalNetworkUsageDescription.
cd wayfarer-backend
railway login && railway init && railway up
railway domain # Get your public URL| Service | Get it at | Purpose |
|---|---|---|
| Firecrawl | firecrawl.dev | Web search, news, events |
| ElevenLabs | elevenlabs.io | Voice AI agent, phone calls |
| Google Places | console.cloud.google.com | Place search, photos, reviews |
| Twilio | twilio.com | Outbound phone calls |
| Anthropic | console.anthropic.com | AI text generation |
Wayfarer uses Firecrawl extensively:
| Feature | How |
|---|---|
| Web Search | Real-time info (traffic, weather, prices) with location customization |
| News | Local news filtered by country + language + time (tbs: qdr:w) |
| Events | Concerts, shows, exhibitions with time filter (tbs: qdr:m) |
| Agent Tools | All 4 voice agent tools use Firecrawl-powered backend endpoints |
User taps "Call" on a restaurant
│
┌────▼─────┐
│ Find the │ → Google Places + Firecrawl scraping
│ phone # │
└────┬─────┘
│
┌────▼──────────┐
│ Select voice │ → Country → Native voice (15 languages)
│ & language │
└────┬──────────┘
│
┌────▼──────────────┐
│ ElevenLabs │ → Managed outbound call
│ outbound-call API │ (Twilio bridge + AI conversation)
└────┬──────────────┘
│
┌────▼──────────────┐
│ AI speaks to the │ → Asks for availability / books table
│ restaurant │ in the local language
└───────────────────┘
Three call modes: Information · Reservation · Custom message
15 native voices, one per country:
| Country | Voice | Country | Voice | ||
|---|---|---|---|---|---|
| 🇮🇹 | Italy | Marco | 🇬🇧 | UK | George |
| 🇫🇷 | France | Theo | 🇺🇸 | US | Chris |
| 🇪🇸 | Spain | Santiago | 🇯🇵 | Japan | Shohei |
| 🇩🇪 | Germany | Ben | 🇰🇷 | Korea | Yohan |
| 🇵🇹 | Portugal | Paulo | 🇨🇳 | China | Xin |
| 🇳🇱 | Netherlands | Koen | 🇸🇦 | Arabic | Adeeb |
| 🇵🇱 | Poland | Mikołaj | 🇹🇷 | Turkey | Adilcan |
| 🇬🇷 | Greece | Georgios |
Wayfarer/
├── Wayfarer/ # iOS App
│ ├── Core/Models/ # Place, NewsItem, EventItem
│ ├── Core/Services/ # Network, Location managers
│ ├── Features/Conversation/ # Voice AI chat (ElevenLabs SDK)
│ ├── Features/Explore/ # Home page cards
│ ├── Features/PlaceDetail/ # Place detail view
│ ├── Features/Call/ # Phone call flow
│ ├── Features/Map/ # MapKit views
│ └── DesignSystem/ # Colors, typography
│
├── wayfarer-backend/ # Node.js Backend
│ ├── src/routes/ # API endpoints
│ ├── src/services/ # Firecrawl, Places, Calls
│ ├── src/prompts/ # Phone agent prompt builder
│ └── src/types/voices.enum.ts # 15 voice configurations
│
└── assets/ # Logo, demo video
Built for the ElevenLabs Hackathon. Wayfarer showcases ElevenLabs Conversational AI (WebRTC voice chat + managed outbound phone calls) and Firecrawl (location-aware web search, news, events).
MIT