Raw company names go in. A ranked call list comes out, hottest first, each with a reason and the role to ask for.
The score is checked in code, not taken from the model. Every part is an integer 0 to 25, and the total is summed server-side.
A company name, sometimes a website. Nothing else.
The real site is fetched and summarized. No URL means a labeled sample.
Fit, urgency, budget, reach. Four parts, each 0 to 25.
A call list with the reason and who to ask for.
Off-schema output is rejected and asked to correct. The total is summed from the parts.
Forms, referrals and list buys pile up in a spreadsheet. A rep scrolls it top to bottom and burns the morning on leads that were never going to buy.
The good ones sit three screens down, unread. By the time anyone reaches them, they have already booked with someone faster.
This build reads each lead, scores it against a fixed rubric, and ranks the pile, so the first call of the day is the best one on the list.
The parts a buyer cannot see from the screenshots, and why they matter.
A one-click login mints a signed JWT. Middleware gates every page, and the manager role is enforced by the token, not just the UI.
Reads go through a LeadRepository interface. The demo reads a seed file; production swaps in Postgres and nothing else in the app moves.
User URLs are resolved and checked before fetch. Private, loopback and link-local addresses are blocked, and every redirect hop is re-checked.
The model returns JSON. Each dimension must be an integer 0 to 25, the total is summed in code, and off-schema output triggers one honest retry.
Click Prioritize and watch eight new leads score and fly into rank. Open the top pick to see what was read from its site. Simulated data, real engineering.
This runs the same engine I would build for you. Add your own lead with a real URL and watch the live model run.
Tell me where your leads land and what a good customer looks like. I will reply with the fastest honest way to score and rank them.