Food locator application that uses Google Maps Places API to discover restaurants nearby with comprehensive filtering capabilities.
![]() |
![]() |
![]() |
![]() |
![]() |
- π Location-based restaurant discovery
- πΊοΈ Custom location selection with radius adjustment (2-25km)
- β Restaurant ratings and reviews
- π¬ TikTok integration for restaurant videos
- π± Mobile-first responsive design
Plyce now supports comprehensive restaurant filtering:
-
Cuisine Types
- Italian, Indian, Chinese, Japanese, Mexican, Thai, French
- Mediterranean, American, Korean, Vietnamese, Greek
-
Dietary Preferences
- Vegetarian, Vegan, Gluten-Free
- Halal, Kosher, Dairy-Free
-
Price Range
- $ (Inexpensive)
- $$ (Moderate)
- $$$ (Expensive)
- $$$$ (Very Expensive)
-
Service Attributes βΏ
- Outdoor Seating
- Pet Friendly
- Wheelchair Accessible
- Delivery Available
The app uses a smart two-step filtering process:
- Initial Search: Uses Google Places API to find restaurants matching location, cuisine, dietary, and price filters
- Attribute Filtering: For service attributes (outdoor seating, pet friendly, etc.), fetches detailed information and filters results
This approach minimizes API calls while providing comprehensive filtering options.
- Python 3.11+
- Node.js 18+
- Google Maps API Key with Places API enabled
- Expo CLI (for mobile development)
# Navigate to backend directory
cd Backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create .env file with your Google API key
echo "GOOGLE_API_KEY=your_api_key_here" > .env
# Run the server
uvicorn app:app --reload --host 0.0.0.0 --port 8000# Navigate to frontend directory
cd Mobile-Frontend/Mobile-Frontend
# Install dependencies
npm install
# Update API URL in src/services/ApiService.ts if needed
# Start Expo development server
npx expo startGET /restaurants/search
Query Parameters:
lat(required): Latitudelng(required): Longituderadius(optional): Search radius in meters (2000-25000)cuisine(optional): Cuisine type filterdietary(optional): Dietary preference filterprice_level(optional): Price level (1-4)outdoor_seating(optional): Booleanpet_friendly(optional): Booleanwheelchair_accessible(optional): Booleandelivery_available(optional): Boolean
Example:
curl "http://localhost:8000/restaurants/search?lat=43.6532&lng=-79.3832&radius=5000&cuisine=indian&wheelchair_accessible=true"POST /restaurants/details
Request Body:
{
"place_ids": ["place_id_1", "place_id_2", "place_id_3"]
}GET /restaurants/{place_id}- Get restaurant detailsGET /restaurants/{place_id}/reviews- Get restaurant reviewsGET /restaurants/{place_id}/tiktok-videos- Get TikTok videosGET /health- Health check
Run the filtering feature tests:
# Make sure the backend is running
cd /path/to/Plyce
# Run test script
./test_filtering.shDetailed implementation guide: FILTERING_FEATURE_GUIDE.md
Plyce/
βββ Backend/ # FastAPI backend
β βββ app.py # Main application with filtering endpoints
β βββ requirements.txt # Python dependencies
βββ Mobile-Frontend/
β βββ Mobile-Frontend/ # React Native (Expo) frontend
β βββ app/ # App routes
β βββ src/
β βββ components/
β β βββ FilterPanel/ # Advanced filter UI
β βββ services/
β β βββ ApiService.ts # API integration with filtering
β βββ types/
β βββ index.ts # TypeScript interfaces
βββ FILTERING_FEATURE_GUIDE.md # Complete feature documentation
- Filter Button: Shows count of active filters with visual indicator
- Active Filter Pills: Display currently applied filters at a glance
- Smooth Animations: Modal transitions and interactions
- Clear All Option: Quickly reset all filters
- Responsive Design: Optimized for mobile devices
Goal: Find vegan restaurants with outdoor seating within 10km
Actions:
- Adjust radius to 10km
- Open filter panel
- Select "Vegan" under Dietary
- Toggle "Outdoor Seating"
- Apply filters
Result: List of vegan restaurants with outdoor seating
Goal: Find wheelchair-accessible restaurants with delivery
Actions:
- Toggle "Wheelchair Accessible"
- Toggle "Delivery Available"
- Apply filters
Result: Restaurants meeting accessibility and delivery requirements
Goal: Find budget-friendly Mexican restaurants
Actions:
- Select "Mexican" under Cuisine
- Select "$" or "$$" under Price
- Apply filters
Result: Affordable Mexican dining options
Your Google API Key needs these APIs enabled:
- Places API (New)
- Place Details API
- Places API - Text Search
- Places API - Nearby Search
- Caching: Results cached when no filters active
- Smart Fetching: Place Details only fetched when service filters used
- Batch Operations: Multiple place details fetched efficiently
- Client-side Search: Text search doesn't trigger API calls
- API Key Errors: Verify
GOOGLE_API_KEYin.envfile - No Results: Check API quota and billing
- Slow Responses: Service attribute filters fetch additional data
- Connection Errors: Update
API_URLinApiService.ts - Filter Not Working: Check network tab for API responses
- Cache Issues: Force refresh or clear app cache
Contributions welcome! Areas for enhancement:
- Additional filter categories
- Saved filter presets
- Filter analytics
- Performance optimizations
- Google Maps Places API
- React Native & Expo
- FastAPI
- Community contributors




