Map Web App - Real Data
Replaced mock data with 1,205 real Seattle restaurants. Built the full pipeline to fetch, process, and score them.
Data pipeline
Built three Python scripts:
- fetch_restaurants.py — Grid search across 46 Seattle zones via Google Places API
- process_data.py — Normalize fields, extract neighborhoods, derive features
- train_model.py — Random Forest predicts expected ratings, calculates gem scores
What the model looks at
- Price level, cuisine type, neighborhood
- Review count (log-transformed)
- Competition density (restaurants within 500m)
- Service model (full-service, takeout-focused, etc.)
- Has full bar (serves both beer and wine)
Discovery tiers
Gem score = actual rating - predicted rating.
- 💎 Rare Find: +0.5 and up (3 restaurants)
- ✨ Gem: +0.3 to +0.49 (17 restaurants)
- 📍 Notable: +0.2 to +0.29 (97 restaurants)
117 discoveries total — about 10% of the dataset.
Photo security
Google Places photo URLs expose your API key. Built a proxy route at /api/alimenta/photo that fetches server-side and caches aggressively. Frontend never sees the key.
UI polish
- Scroll-aware sticky header with fade animation
- Visual rating comparison (predicted vs actual bars)
- Real-time open/closed status from hours data
- Call button, service indicators, similar gems carousel