Mosaic is a mobile group travel planner app that allows group of friends to plan out their next trip. Mosaic utilizies a custom built recommendation system along with a friendly mobile app UI to allow users to plan their next trip with a few clicks.
Mosaic is built with React Native on the frontend, with tools such as Elastic Search, Supabase, and Flask powering the backend.
- Custom feed of locations/places to visit based off user preferences
- Authentication via Google to allow for easy sign up
- Easy trip planning via Google Maps API to allow groups to easily input their travel destination
- Everything bundled in one easy to use mobile app 🔥
- React Native
- TypeScript
- Flask
- Python
- ElasticSearch (Vector DB)
- Supabase
- Google APIS (Google places, Google Auth)
To run the project locally, follow these steps:
- Ensure you have the following installed:
git clone https://github.com/purelyKai/Mosaic.git
cd Mosaic- Copy the
.env.examplefile to create a.envfile in thebackenddirectory:
cp backend/.env.example backend/.env- Fill in the required values in the
backend/.envfile:ELASTIC_CLOUD_IDELASTIC_API_KEYPLACES_API_KEYOPENAI_API_KEYHOST_IPHOST_PORT
- Copy the
.env.examplefile to create a.envfile in themobiledirectory:
cp mobile/.env.example mobile/.env- Fill in the required values in the
mobile/.envfile:EXPO_PUBLIC_SUPABASE_URLEXPO_PUBLIC_SUPABASE_ANON_KEYEXPO_PUBLIC_GOOGLE_WEB_CLIENT_IDEXPO_PUBLIC_API_BASE_URL
cd backend
pip install -r requirements.txtcd ../mobile
npm install- Ensure the Elasticsearch properties are set up correctly. Refer to the
elasticsearch_properties_example.txtfile in thebackenddirectory for the required mappings:
{
"mappings": {
"properties": {
"doc_type": {
"type": "keyword"
},
"location": {
"type": "geo_point"
},
"place_id": {
"type": "keyword"
},
"place_name": {
"type": "text"
},
"place_summary_text": {
"type": "text"
},
"place_vec": {
"type": "dense_vector",
"dims": 512,
"index": true,
"similarity": "cosine",
"index_options": {
"type": "bbq_hnsw",
"m": 16,
"ef_construction": 100,
"rescore_vector": {
"oversample": 3
}
}
},
"user_uuid": {
"type": "keyword"
},
"user_vec": {
"type": "dense_vector",
"dims": 512,
"index": true,
"similarity": "cosine",
"index_options": {
"type": "bbq_hnsw",
"m": 16,
"ef_construction": 100,
"rescore_vector": {
"oversample": 3
}
}
},
"view_count": {
"type": "integer"
}
}
}
}
- Start the Flask server:
cd backend
python app.py- Start the Expo development server:
cd ../mobile
npx expo start- Backend: The Flask server will run at
http://127.0.0.1:5000by default. - Mobile: Use the Expo Go app or an emulator to preview the app.
The following APIs are required to run the project:
- Elasticsearch: For storing vectors containing information about users and locations.
- Google Places API: For fetching place details.
- OpenAI API: For generating vectors to store user preferences and other AI-driven features.
- Supabase: For authentication and database management.
Here are some images showcasing the Mosaic project:
This project is supported by the MIT License.



