HACKATHON2026Hackathon · submitted

RoomScout

Find a rehearsal room without doing all the chasing yourself.

convexagentsfirecrawlvoice
ROLE
Solo · agent-built
STACK
Convex · Firecrawl · AgentMail
EVENT
Convex "All Gas" · Sep 2026
STATE
Submitted · Sep 2026

Rehearsal rooms and studios are hard to find. They are scattered across the internet like entropy. A lot of them go through personal contacts, and whatever is not passed on that way is spread over many different platforms. I wanted a band to explain once what it needs and then hand the searching and the back and forth to someone else. RoomScout is my attempt at that, built for Convex's All Gas hackathon.

What the Scout does

You tell the Scout your budget, preferred days, band size and equipment, by typing or by talking to it. It works through listings, asks providers for the missing details and follows up. Every search also fills a shared directory, so the next band looking in the same city starts with what the last one found.

Bookings, payments and contracts stay with the band. Everything else the Scout should handle on its own. The first phase of a search is about exploring and collecting facts. After that, hundreds of checks and "may I do this, may I do that" questions work against the product. A band uses RoomScout because it wants to hand off the tedious coordination and trust the agent to act for it. So autopilot is the default.

At one point I tried a different voice for the Scout. After one test I switched back, because the previous one simply sounded better.

How I built it

RoomScout ran in my free time, next to my job and my family. I spent a long time with Codex on the product decisions, working out with GPT-6 Astra what I actually wanted to build and what not. I was often on the road and steered the session on my MacBook from my phone. Once the plan was fixed, I sometimes let Astra run overnight and looked at what it had done the next day. Codex wrote most of the code; Claude Code came in during the second half.

How it works

Firecrawl brings public listings into Convex, where each one keeps its source. For the outreach I set up a separate portal with room listings, roomscout.dev, where I control the landlords. The Scout registers there through the normal UI, reads the verification code from its AgentMail inbox, sends an inquiry and checks for replies. AgentMail also receives the portal's new-message notifications, which wake the Scout up. Permission to send is checked again right before a message goes out.

The first full run was on 10 September, with me as the only landlord answering my own Scout. It was great to watch how the agent answers and reacts, and to see where the pitfalls are. Later a model played 25 fictional landlords, each with a different tone.

What was hard

The browser flow worked locally. I had orchestrated it in a fresh Claude session and it ran well. Moving it into Convex broke it. Browserbase was already integrated, and the backend had patterns and primitives built around it. I wanted Firecrawl to run the flow, since it was a hackathon sponsor. Instead of porting the local orchestration one to one as a separate path, Codex built Firecrawl on the same patterns as Browserbase. A message that took 7 remote calls locally suddenly took between 16 and 46. I noticed because it did not work, and then we traced the bugs together. Looking back, it was a context problem. Since then, a working local script is the spec for the port. The rebuilt flow runs in four steps: open, prepare, send, close.

Something else I watch for: coding agents are good with Convex mutations and queries, but they tend to throw out an existing component as soon as it lacks a feature and rebuild the functionality their own way. I spot that in the schema and the config, which show which components the code really uses. The official Firecrawl Convex component could crawl and scrape, but it could not drive a browser. RoomScout uses a vendored local fork of it instead, with its API, its tests and its MIT licence intact, plus Interact and Monitoring. Forking a component is a legitimate path.

Structured Outputs failed with an HTTP 400. The AI SDK had downgraded the request to plain JSON mode and dropped the schema, because the provider adapter behind the Convex AI Gateway did not declare that it supports structured outputs. A minimal reproduction pinned it to that one missing flag. RoomScout runs on a small local adapter since then. I posted the finding in the Convex Discord, and a Convex engineer confirmed a fix for the next provider release. It shipped in version 0.2.0: the provider now declares the flag itself.

The demo

The demo video ended up more stripped down than I planned. I wanted a story with a band and AI-generated video, and I did not have the time. I recorded the demo at four in the morning the day before submission, went to bed at six and was back in the office at eight. I was glad I got it done at all. Working out how a demo flow could run was still worth it, for the feel of the demo and of RoomScout itself.

Where it stands

I submitted RoomScout in the last night of the hackathon, four weeks after the first commit on 26 August. The directory held 496 public listings, each with its source. The outreach demo runs against my own test portal with simulated providers. The Scout has not talked to a real landlord yet.

Mr. Finch© 2026 Daniel FinkeStuttgart, DE