Skip to content
All projects
HackathonAskOnce4 min read

AskOnce: an AI agent that replaces the agency discovery call

Agencies spend the first hour of every project asking clients things their website already answers. AskOnce is an AI onboarding agent that reads the site first, asks only what's missing by chat, voice or phone, and writes the brief. Built solo at the TUM.ai Makeathon, 3rd place in the HappyRobot challenge.

AskOnce client session: a chat with the agency's AI agent on the left, the project brief filling itself in on the right

The problem

Agencies lose the first hour of every project to a discovery call: the same questions about the business, the audience and the budget, most of which the client's own website already answers. If you've ever hired a web agency or a freelance designer, you know the ritual. One or two hours of "tell me about your business", "who are your customers", "do you have brand colours" before anyone quotes a price.

Forms don't fix it. A long questionnaire asks the same obvious questions in writing, and clients abandon it halfway. Then someone at the agency has to chase them.

What I built

AskOnce is an AI onboarding agent that does the boring half of the discovery call. I built it alone over a weekend at the TUM.ai Makeathon in Munich, for the HappyRobot challenge, which was about AI agents that take real actions (calls and emails included), not just chat.

What it does

  • Workflow builder. The agency sets up its questionnaire once: questions, agent name, tone. The client gets a link.
  • Reads the website first. Before asking anything, AskOnce analyses the client's site and fills in what it can, so the agent only asks what's still missing.
  • Chat or voice. The client answers by typing or talking, and the brief builds itself on screen as they go.
  • Brief and decision. At the end the agency gets a branded PDF and two buttons: accept (an email goes out with a booking link) or reject (a polite email goes out instead).
  • Follow-up call. If the client drops off halfway, a Call now button on the dashboard has the agent phone them, ask only the unanswered questions, and write the answers back into the brief.
The demo video from the weekend, just under three minutes: the workflow builder, the client session and the follow-up call, narrated with an ElevenLabs voice
AskOnce client session with chat on the left and a live brief on the right
The client session. The agent already knows the business from its website and only asks about goals, audience, timeline and budget. Recreated from the source with sample data, since sessions on the live app write to the database
Dialog asking whether to call the client, listing what the agent will do
The Call now dialog: pick up where the session left off, ask only what's missing, update the brief afterwards. Recreated from the component with sample data; I didn't trigger real calls for this post
AskOnce landing page with the headline "Ask once. Know everything."
The live landing page. The copy is from the hackathon weekend, so read it as a pitch, not a list of results

Why these tools

Gemini does the reading and writing: it analyses the client's website so the agent never asks what's already public, runs the chat, and writes the final brief. I first routed every chat message through a HappyRobot workflow, but each reply meant starting a run, polling it and digging the answer out of its nodes. Calling Gemini directly made the chat fast and left far less to break in front of the judges.

HappyRobot handles what it's built for: real outbound phone calls and the accept/reject email workflows. Before dialling, a Supabase function sends the agent two lists, what we already know and what's missing, so a client who answered five of seven questions on the web doesn't get asked all seven again. After the call, an extraction step pulls the answers out of the transcript and merges them into the brief.

ElevenLabs gives each agency's workflow its own voice agent. Every workflow has different questions and tone, so AskOnce creates a separate ElevenLabs agent the moment a workflow is saved, with those questions built into its prompt.

Supabase holds the data and runs the server-side functions, so API keys never reach the browser. Lovable generated the React UI: 206 of the 243 commits are its bot's. For a hackathon that's the right call. My own work was the plumbing between the three platforms.

What was hard

Voice took three attempts. The browser's built-in speech recognition only worked in Chrome and sounded like a GPS, a HappyRobot browser call came next, and ElevenLabs was the one that stuck. Even then its startup broke on Sunday morning after I changed something that worked, and I restored the earlier version twice.

The phone call broke worse. A few hours before judging, every call failed within a second because the outbound number had lost its SIP trunk (the line between the calling platform and the phone network). Two replacement numbers failed the same way. What finally worked was the number another team was already using, which is in the changelog as a known limitation.

What it became

At the closing ceremony the slide said "2nd & 3rd Place Happy Robot", and AskOnce was third. A plaque and 100 euros.

Javier holding the 3rd place plaque on stage at the Makeathon awards
Third place in the HappyRobot challenge, on stage at the closing ceremony

The web app is still online. The landing page and sign-in load, and the code is public on GitHub. I haven't kept the phone workflows or the voice agents running since the weekend, so treat it as a hackathon demo, not a product you can sign up for and use.

Javier in the lecture hall with the 3rd place plaque on the desk
Back in the seats after the awards. The plaque says 2026 Makeathon, 3rd place, HappyRobot

The generated landing page still says "120+ agencies onboarded". That number was never real; it's placeholder copy I didn't have time to replace, and it's the first thing I'd delete.

The team name outlived the project. In September, under the same name, AskOnce took 2nd place in BMW Motorrad's "Best Route" challenge in Zurich with something completely different: a motorcycle route planner that scores roads on how fun they are, not how fast.