WanderWise is an intelligent travel companion that transforms your static travel plans into dynamic, context-aware daily recommendations. Using AI and real-time data, it suggests the perfect activity for your current mood, location, and circumstances. It was born a upcoming Tokyo trip I am planning and having the idea for an app that helps you choose an activity from your travel plan. The frontend especially was created with a lot of help from AI.
- π± Android Mobile App: React Native app with Android support
- π€ AI-Powered Recommendations: LLM-driven suggestions using OpenRouter API
- π Smart Plan Parsing: Upload travel plans in JSON or text format with structured extraction
- π― Activity Selection: Browse and select activities from parsed travel plans
- β Feedback System: Rate recommendations to improve future suggestions
- π Location-Aware: GPS integration for location-based recommendations
- π Session Management: Track completed activities within your trip session
WanderWise follows a client-server architecture with clear separation of concerns:
βββββββββββββββββββββββ βββββββββββββββββββββββ
β Mobile Frontend β β Backend API β
β (React Native) βββββΊβ (FastAPI) β
β β β β
β β’ TypeScript β β β’ Python 3.10+ β
β β’ React Navigation β β β’ Pydantic β
β β’ Axios β β β’ Async/Await β
βββββββββββββββββββββββ βββββββββββββββββββββββ
β
βββββββββββββββββββββββ
β External APIs β
β β
β β’ OpenRouter (LLM) β
β β’ Google Maps API β
β β’ Weather API β
βββββββββββββββββββββββ
travelplanner/
βββ wanderwise_frontend/ # React Native mobile application
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ screens/ # App screens (Welcome, Activity Selection, etc.)
β β βββ navigation/ # Navigation configuration
β β βββ types/ # TypeScript type definitions
β βββ android/ # Android-specific code (functional)
β βββ ios/ # iOS-specific code (structure exists)
β βββ package.json
β
βββ wanderwise_backend/ # FastAPI backend service
β βββ app/
β β βββ api/v1/ # API endpoints and schemas
β β βββ core/ # Configuration and constants
β β βββ services/ # Business logic layer
β β βββ integrations/ # External service integrations
β β β βββ llm/ # LLM client and prompts
β β β βββ tools/ # Tool calling implementations
β β βββ utils/ # Utility functions
β βββ data/ # Feedback data storage (JSONL format)
β βββ requirements.txt
- Node.js 18+ and npm/yarn
- Python 3.10+
- React Native CLI and Android development environment
- OpenRouter API Key for LLM access
- Google Maps API Key for location services
- Weather API Key (optional, for weather integration)
cd wanderwise_frontend
# Install dependencies
npm install
# Start Metro bundler
npm start
# Run on Android device/emulator
npm run android
# Note: iOS structure exists but not fully functional for developmentcd wanderwise_backend
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your API keys
# Start development server
uvicorn app.main:app --reloadThe backend will be available at http://localhost:8000 with interactive API docs at /docs.
Create a .env file in the backend directory:
# LLM Configuration
OPENROUTER_API_KEY=your_openrouter_key_here
# Maps API
GOOGLE_MAPS_API_KEY=your_google_maps_key_here
# Weather API (optional)
WEATHER_API_KEY=your_weather_api_key_here
# Application Settings
DEBUG=true
LOG_LEVEL=info
FEEDBACK_FILE_PATH=data/feedback.jsonlUpdate wanderwise_frontend/src/constants/config.ts:
export const API_BASE_URL = __DEV__
? 'http://localhost:8000'
: 'https://your-production-api.com';- π€ Upload Travel Plan: Users upload their travel itinerary in Markdown or text format
- π² Preference Selection: Bracket-style tournament to select current mood and activity type
- π€ AI Processing: LLM analyzes plan, preferences, weather, and location data
- π‘ Smart Recommendation: Receive a personalized activity suggestion with justification
- β Feedback Loop: Rate recommendations to improve future suggestions
- β Activity Tracking: Mark activities as completed to avoid repetition
# Run tests
npm test
# Lint code
npm run lint
# Type checking
npx tsc --noEmit
# Build for production
npm run build# Run tests
pytest
# Format code
black app/
isort app/
# Type checking
mypy app/
# Start with auto-reload
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000- Context-Aware: Considers weather, location, time, and user mood
- Plan Integration: Parses and understands your existing travel plans
- Adaptive Learning: Improves suggestions based on your feedback
- Engaging UX: Tournament-style preference selection
- Randomized Options: Prevents selection bias
- Quick Decision Making: Reduces choice paralysis
- Weather API: Current conditions affect activity suggestions
- GPS Location: Distance and travel time calculations
- Crowd Data: Future integration for popularity-based filtering
POST /api/v1/parse-plan- Parse travel plan and extract structured activitiesPOST /api/v1/validate-plan- Validate JSON travel plan structurePOST /api/v1/recommendations- Get activity recommendationPOST /api/v1/feedback- Submit recommendation feedback
// Recommendation Request
{
"plan_content": "Day 1: Visit Tokyo Tower, Senso-ji Temple...",
"completed_activities": ["tokyo-tower"],
"user_mood": "adventurous",
"activity_type": "cultural",
"location": {"lat": 35.6762, "lng": 139.6503}
}
// Recommendation Response
{
"activity_id": "senso-ji-temple",
"activity_name": "Senso-ji Temple Visit",
"justification": "Perfect for cultural exploration in good weather",
"estimated_travel": "15 minutes by train"
}# Install Fly CLI
curl -L https://fly.io/install.sh | sh
# Deploy
fly deploy# Android
cd android && ./gradlew assemble Release
# iOS (requires Xcode)
cd ios && xcodebuild -workspace WanderWise.xcworkspace -scheme WanderWise archiveThis project is licensed under the MIT License - see the LICENSE file for details.