Inspiration
Planning a day in New York City is overwhelming. The project is motivated by the gap between “I have a day in NYC” and actually turning that intent into a realistic, efficient plan that adapts in real time.
The repo frames the app as voice-first, real-time, and map-centric, so users can discover places conversationally while moving through the city.
As stated in the README, the goal is an AI-powered NYC adventure planner with real-time 3D visualization, voice control, and automated reservations.
What it does
- Displays an interactive 3D NYC map with buildings, overlays, and cinematic effects.
- Shows real-time subway service and train movement using MTA GTFS-Realtime feeds.
- Enables semantic discovery of restaurants, events, and landmarks using vector search and embeddings.
- Generates AI itineraries from natural-language requests with budget- and transit-aware routing.
- Supports voice input and spoken summaries (speech-to-text and text-to-speech).
- Executes automated reservations by parsing intent and completing booking flows via browser automation.
How we built it
- Frontend: React + TypeScript + Vite, Mapbox GL JS for 3D maps, Three.js for custom 3D elements, Tailwind CSS for styling, and Framer Motion for animations.
- Backend: Node.js + Express server handling transit data ingestion, itinerary planning, vector search queries, and reservation orchestration.
- Data layer: MongoDB Atlas for structured place data and vector search, with scripts for embedding, seeding, and index validation.
- AI & voice: Google Gemini for planning, parsing, and embeddings; ElevenLabs for spoken output; Web Speech API for voice input.
- Automation: Fetch.ai (ASI:One) for intent parsing and Playwright for end-to-end reservation execution.
Challenges we ran into
- GTFS-Realtime inconsistency: transit feeds vary in structure and reliability, requiring defensive parsing and heuristics.
- Vector index setup: MongoDB Atlas vector indexes require special handling and explicit validation.
- Transit visualization: normalizing route IDs and service colors for accurate map rendering.
- Itinerary feasibility: constraining LLM output so plans are time-realistic, transit-aware, and mappable.
- Reservation reliability: booking flows differ across platforms, requiring selector fallbacks and robust automation logic.
Accomplishments that we're proud of
- A fully interactive 3D map with live subway trains and service status.
- Cross-category semantic search across restaurants, events, and landmarks.
- An end-to-end voice workflow: speak → plan → visualize → hear the summary.
- Automated reservations triggered directly from user intent.
What we learned
- Real-world transit data is messy; robust fallback logic is essential.
- Vector search quality depends heavily on indexing and normalization, not just embeddings.
- LLM planning requires hard constraints to be reliable in production contexts.
- Browser automation for real services demands defensive engineering and resilience.
What's next for What's Up, New York!
- Expand and continuously refresh the NYC data pipeline for places and events.
- Integrate more precise routing and scheduling for tighter itinerary timing.
- Harden auto-reservation flows and add clearer user confirmation and safety checks.
- Optimize 3D rendering performance and ship a stable public demo.
Built With
- 11labs
- express.js
- fetchai
- framer
- gemin
- geminitextembedings
- github
- javascript
- matbox
- mongdbatlass
- mongodbvectorsearh
- node.js
- playwright
- react
- restapi
- tailwind
- treejs
- typescritp
- vite
- wespeechai
Log in or sign up for Devpost to join the conversation.