Inspiration
A shift ends at 11:30 PM. A class lets out at midnight. The trip home isn't over. Map apps show the fastest route, but late at night that's often the emptiest: the café that lit the corner at 6 PM is closed, and the map doesn't know. People text a friend "home?" and hope. We wanted to answer a different question: what will this street be like when I'm on it? HootRoute is built for late-shift workers, students, cyclists, step-free travellers and people who navigate by ear. One rule throughout: conditions, not a safety rating.
What it does
Tell HootRoute where you’re going, by typing or by voice, and four AI agents plan the trip together:
Professor Hoot (Claude) understands your request, picks the right tools, and explains the trade-offs using only real numbers. Scoot McRoute compares routes across about 139,000 SF street segments and scores each block at the minute you’ll pass it: places listed open, lighting, gaps, transit, and turns. It covers walking, cycling and step-free routes. Sherlock Hoots finds places with unknown hours and checks their listings live through Apify, but only after you approve. Wingman Wally guides you turn by turn. Report a blocked street and it finds another way; nothing changes until you choose. You can share a live link with someone and stop sharing any time.
Voice guide (Cartesia): hear every route described aloud, turn by turn, for blind and low-vision walkers or anyone with a phone in their pocket.
Example: Transamerica Pyramid → Salesforce Transit Center at 11:30 PM. HootRoute scores 48 vs 35 for the fastest route, and the longest stretch with nothing open drops from 772 m to 447 m.
How we built it
Engine: Python, NetworkX and NumPy over a San Francisco OpenStreetMap graph (about 139,000 street segments, 8,907 places), plus SF 311 streetlight data, the BART schedule and SFMTA closures. Every route is checked every 10 m at the minute you’ll reach each point. No crime data and no AI go into the score. Agents: Claude tool use (claude-sonnet-5-5) orchestrates 8 tools across our routing engine and evidence checks.
Guardrails, enforced in code: Claude can only propose a paid check; you approve it before it runs. Any answer containing a number no tool produced is rejected. Personal data is removed before it reaches Claude. Emergencies get an instant fixed answer instead of an AI reply. Evidence: the Apify Google Maps actor, capped at $0.50 per run. Every result keeps its source and time. Voice: Cartesia Sonic for speech, plus browser voice input. Backend: FastAPI, WebSocket journey rooms and SQLite, with revocable share links and rate limits. Frontend: React, TypeScript and Vite, with MapLibre GL on a Geoapify night map (3D buildings, animated routes).
Hosting: Vultr with Caddy HTTPS, live at hootroute.us.
Challenges we ran into
Keeping AI out of the numbers: Claude decides what to calculate, Python does the calculating, and a checker rejects any number the tools didn’t produce. Time-aware scoring: “open” depends on when you arrive, so every block is scored at its own arrival minute, not at the time you leave. Honest uncertainty: most small shops publish no hours. We treat them as unknown, never as closed, and let Sherlock check them. Finding places the way people say them: names like “16th St Mission BART” or “SF Public Library” needed transit data, flexible matching and real geocoding. Merging three teammates’ work overnight: travel modes, a dashboard and the agent system had to be combined without breaking 79 tests. Putting people in control: spending money or changing someone’s route needs their approval, so we built approval and choice steps into the system.
Accomplishments that we're proud of
A real agent loop, live on the web: Claude plans the route, finds what’s unknown, and asks before spending. One real Apify check covered 4 listings in about 40 seconds for $0.016. Mission Recovery: report a blocked street mid-walk and get re-scored routes from where you are. You choose; nothing switches on its own. Accessible by voice: full spoken route comparisons and turn-by-turn guidance through Cartesia. Stress-tested: 79 automated tests, plus 22 adversarial checks with real Claude covering prompt injection, fake approvals, crime questions, emergencies and personal data. Shipped and live: deployed on Vultr with HTTPS at hootroute.us, ahead of the deadline.
What we learned
Code, not prompts, should limit what an AI can do. Approval steps and number checks are what make it trustworthy. Showing the work matters. A trace of each tool call and why it ran builds more trust than a confident answer. “Unknown” is a valid answer. Saying it plainly beats guessing. Design for the hardest case. Building voice guidance for blind walkers made the app better for everyone. Ship small and test constantly. With three people merging code overnight, the tests kept us moving fast without breaking things.
What's next for HootRoute
Real pilots: work with hospital staff, hotel workers’ unions and campus late-night programs to test it on real commutes. Live transit: real-time BART and Muni arrivals (511.org), so it knows if you’ll make the last train. Shopkeeper check-ins: local businesses confirm tonight’s hours themselves, so fewer places show up as unknown. Better accessibility data: sidewalk, curb-ramp and slope data for more reliable step-free routes. More cities: starting with other late-night transit cities like Oakland, Los Angeles and New York.
Built With
- anthropic-api
- apify
- bart-gtfs
- cartesia
- claude
- fastapi
- geoapify
- maplibre-gl
- networkx
- numpy
- openstreetmap
- python
- react
- sf-311
- sqlite
- typescript
- vite
- vultr
- websockets


Log in or sign up for Devpost to join the conversation.