Inspiration
If you've ever tried to find a real filming location that matches a scene you've written, you know how much time it eats up. You read the scene, picture it in your head, then spend hours Googling and scrolling through location directories trying to find somewhere that actually looks like what you imagined. I wanted to automate that first pass - and while I was at it, I figured the agent might as well tell you how hard each place would actually be to book, since "found a cool location" and "found a location you can actually film at" are pretty different things.
What it does
You describe a scene. The agent:
- Reads it with Gemini and pulls out the practical stuff - what kind of setting is this, what's the mood, what's the weather doing, what visual details matter
- Hands that off to Parallel's Search API to actually go find real places online that match
- Feeds the research back into Gemini one more time, which writes up a shortlist - each place with a reason it fits, a link so you can check it yourself, and a rough read on how hard it'd be to get permission to film there (public street vs. someone's private bar vs. a place that already rents itself out for shoots)
How I built it
Node and Express on the backend, deployed on Render. Both Gemini calls go
through Google's @google/genai SDK. For the extraction step I forced
responseMimeType: application/json so I'd get clean structured data back
instead of Gemini writing me a nice paragraph I'd then have to parse by hand.
Parallel does the actual grounding - real search results, real venues,
nothing made up. The frontend is one static HTML page, kept deliberately
simple so the demo is easy to follow.
Challenges I ran into
Honestly, most of the hard parts weren't the "AI agent" part - they were the boring infrastructure stuff around it.
- Partway through, the model I was using got deprecated on me.
gemini-2.0-flashjust started 404ing, with Google's error message telling me to switch togemini-3.6-flash. Fixed it, but it was a good reminder that pinning a model name is not a "set it and forget it" thing. - Gemini kept wanting to explain itself instead of just giving me data. The fix was being very blunt in the prompt about wanting only JSON, nothing else - once I did that, it behaved.
- Early on the shortlist would occasionally include a location that felt a little too convenient - I added an explicit instruction telling it not to invent a candidate if the research didn't clearly support one, and to just return fewer results instead. That fixed it, and honestly I trust the output more now knowing it's allowed to come back short.
- I tried to deploy on Google Cloud Run and got stuck behind a one-off prepayment requirement to activate billing that I couldn't clear in time. Ended up moving to Render for hosting instead, which turned out fine - the hackathon only requires you to actually call the Google Cloud SDK in your code, not host on Google's own infrastructure.
- My first real deploy attempt on Render sat there looking "stuck" for
several minutes before I realized it was just failing a health check
against a path (
/healthz) that didn't exist in my app. The app itself was fine the whole time - I was just checking the wrong URL.
Accomplishments I'm proud of
That the whole thing actually works, end to end, as three separate steps talking to two different services, each one depending on what the last one returned. It's not a chatbot wrapper - if you break any one of the three steps, the whole thing stops working, which is exactly what makes it feel like a real pipeline rather than a demo trick.
What I learned
A lot of this came down to being very precise with prompts - if you want structured output, you have to ask for it explicitly and firmly, not hint at it. I also learned that "Google Cloud" as a hackathon requirement and "hosted on Google Cloud" are two completely different things, which saved me a lot of stress once I realized it. And generally: when something looks broken, check the logs before you assume your code is wrong - twice tonight the actual problem was a config detail, not the logic.
What's next for Location Scout
Letting someone upload a whole script and get a shortlist per scene instead of one at a time, adding a rough budget filter, and putting the results on an actual map instead of a list.
Built With
- css
- express.js
- google-gemini
- html
- javascript
- node.js
- parallel
- render

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