Live demo · fictional agency
Hot Leads Never Wait
Every enquiry gets read, scored and sent to the right person in seconds, so the ones ready to buy hear back first. I built this demo for Northlane Studio, a made-up agency. Pick a lead below and press Run It.
- Every enquiry gets readNothing sits unopened in a shared inbox over the weekend.
- Scored in secondsReady to buy, just browsing or spam, with a reason you can check.
- The right person hears firstHot leads go straight to someone who can reply today.
Watch It Work
Press Run It and each step lights up as it happens, with what it decided in plain words.
Reads the message
Waiting
Understands what they want
Waiting
Scores the lead
Waiting
Sends it to the right team
Waiting
Saves it to the CRM
Waiting
Pings the team on Slack
Waiting
Emails a heads-up
Waiting
Nothing here is a real CRM, Slack workspace or customer. The only real services are an AI model for the reading and scoring, a demo database table, and at most one email to me.
Your inbox, your rules
Want this for your business?
The same pattern fits any inbound queue: website enquiries, demo requests, support tickets, partnership emails. I'd connect it to the CRM and chat tool you already use, with scoring rules that match how your team sells.
For technical buyers
The rest of this page is the honest version of how it works. Every step in the demo above also has its raw input and output under “Show the technical details”.
What happens to a lead
1Validate and sanitize
A zod schema checks every field, strips control and hidden characters, and caps lengths. Nothing downstream sees unvalidated text.
2Enrich
An AI model reads the message and returns company type, intent and urgency as JSON that has to match a fixed schema. There is no web scraping; it only works from what the lead wrote.
3Score
A second model call returns a 0 to 100 score and a short reason. A plain rule-based score is computed alongside it as a baseline.
4Route
Hot at 70 and above, warm at 40 and above, cold below. Anything that used a fallback, or looked like an attempt to steer the scorer, also goes to a human-review queue.
5Write to the CRM
One row in a Supabase table for a fictional agency. Rows delete themselves after 24 hours.
6Slack
Rendered as a mock message in the page. Nothing is posted to a real workspace.
7Email
One real email to me, only when I have switched that on, and capped at a handful a day across all visitors. Otherwise it says it was skipped.
How it's built
Stack.A Next.js route handler runs the steps one after another and streams each event to the page as newline-delimited JSON, so the steps fill in live. Gemini Flash does the two AI steps, with Ollama Cloud as a backup model, Supabase holds the demo table, Resend sends the one email. Validation is zod on the way in and zod again on the model's output.
Latency.The non-AI steps take a few milliseconds each; the page spaces them out slightly so you can see each one land. The two AI steps usually take one to a few seconds each and vary with load, which is most of the total. I haven't benchmarked it formally, so treat the durations in the technical details of your own run as the real numbers.
Cost per run.Two small model calls, a few hundred tokens each. That is a fraction of a cent at published Flash pricing; I haven't metered it exactly. The demo uses its own API key and has a per-visitor limit and a daily cap so it can't run up a bill.
Untrusted text.The lead is serialised as JSON data in the user turn and the instructions live only in the system prompt, with the output forced into a schema. Even so, a message that tries to steer the scorer is capped at a low score and sent to human review, because I don't treat the model as the only safeguard. Try the “Tricky message” sample.
When something fails.A failed model call is retried once, on a second Gemini model and then on Ollama Cloud. If those fail too, the step falls back to keyword rules, scoring uses a rule-based formula, and the lead is written to the CRM with a human-review flag instead of being dropped. If the database table is missing the row is kept in memory; if email isn't configured the step is skipped. Turn on “What if the AI is down?” to watch it happen.
Data.Only what you type is stored, with no IP address or other identifier. Server logs don't contain lead text.