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