Project Info
Inspiration
Mosaic transforms group travel planning from chaos to consensus. Friends create a trip, invite their crew with a code, and everyone swipes through local restaurants, activities, and attractions, like Tinder for places. Our AI analyzes the group's collective preferences to generate personalized, day-by-day itineraries that satisfy everyone's tastes. No more endless group chats debating where to eat or what to do. Whether you're vegan, adventurous, or need the perfect coffee spot, Mosaic finds the hidden gems your entire group will love. Stop compromising. Start exploring together.
Mosaic
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.
π Features π
- 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 π₯
β‘οΈ Tech Stack β‘οΈ
- React Native
- TypeScript
- Flask
- Python
- ElasticSearch (Vector DB)
- Supabase
- Google APIS (Google places, Google Auth)
π Setup and Run Locally π
To run the project locally, follow these steps:
Prerequisites
- Ensure you have the following installed:
1. Clone the Repository
git clone https://github.com/purelyKai/Mosaic.git
cd Mosaic
2. Set Up Environment Variables
Backend
- 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
Frontend
- 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
3. Install Dependencies
Backend
cd backend
pip install -r requirements.txt
Mobile
cd ../mobile
npm install
4. Configure Elasticsearch Properties
- 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"
}
}
}
}
5. Run the Applications
Backend
- Start the Flask server:
cd backend
python app.py
Mobile
- Start the Expo development server:
cd ../mobile
npx expo start
6. Access the Applications
- 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.
Required APIs
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.
πΈ Project Images πΈ
Here are some images showcasing the Mosaic project:

π License π
This project is supported by the MIT License.
Analysis
View
Metric
- 29
- 16
- 14
- 8
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FlaskIn code
- JavaScriptIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- SupabaseIn code
- TypeScriptIn code
7 of 7 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
92 KB
Source files
34
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
purelyKai/Mosaic
57 files Β· 1.3 MB Β· @ 4251ab4
Structure
Interface
12 files Β· 21%Screens, components and styles rendered to the user.
API & routing
1 file Β· 2%Request entry points: routes, handlers and controllers.
Application logic
22 files Β· 39%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here β open the file browser to check anything the diagram implies.
Languages
- TypeScript75%
- Python18%
- Markdown7%
- JavaScript1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
mobile/package.json
npm Β· 38- @expo/vector-icons
- @react-native-async-storage/async-storage
- @react-native-google-signin/google-signin
- @react-navigation/bottom-tabs
- @react-navigation/elements
- @react-navigation/native
- @react-navigation/stack
- @supabase/supabase-js
- expo
- expo-constants
- expo-dev-client
- expo-font
- expo-haptics
- expo-image
- expo-linking
- expo-location
- expo-router
- expo-secure-store
- +20 more
backend/requirements.txt
pypi Β· 12- elastic-transport
- elasticsearch
- Flask
- flask-cors
- google-api-core
- google-auth
- google-geo-type
- google-maps-places
- numpy
- openai
- python-dotenv
- requests
Declared in the repositoryβs manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This projectβs features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.