All projects

Lending software

Willbot

Helps finance brokers match borrower scenarios with lenders and check lending policies.

A broker gets a ranked lender answer with the policy rows it came from.

Stage reached
Deployed
Period
2024 – present
Sector
Commercial finance
Organisation
Talk to a Broker
Willbot showing ranked lender options for a sample asset-finance scenario.
Ranked lender results for a sample scenario.

My contribution

I built and still maintain the path from a broker's message to a ranked lender result, including the audit that keeps the lender dataset honest.

  • Borrower-fact extraction and follow-up corrections
  • Eligibility checks and ranked lender options
  • Broker chat, lender-data updates and workflow integration

The result

Deployed broker workflows for asset, business and personal finance.

Engagement

Ongoing software delivery and workflow integration

The problem

Brokers work from conversation, not forms. The details arrive out of order, half of them are wrong first time, and the lender policy they are being matched against moves every quarter. A system that answers confidently from stale data is worse than no system: it misprices the deal and nobody notices until settlement.

How it was approached

  1. Extract borrower facts into one structured scenario that every later step reads from.
  2. Keep eligibility and ranking deterministic and version-controlled, so a result can be reproduced and argued.
  3. Replay real follow-up conversations as release gates, to prove corrections and retained facts survive.
  4. Audit the lender dataset against each lender's published documents rather than trusting the spreadsheet.

How far up the stack the work reached

The brokerage, its CRM and its lender relationships already existed. What was built here is the layer that turns a conversation into a defensible lender result.

  1. Broker

    Brokers, their CRM and the conversations they already have.

  2. Intake

    Loan-family-specific extraction of borrower facts from free text.

  3. Scenario

    A structured, serialisable constraint set carried across turns.

  4. Policy

    Versioned lender criteria and rate data with cache invalidation.

  5. Decision

    Deterministic eligibility filtering, ranking and rejection reasons.

  6. Response

    Explanations that reuse the stored result instead of re-deciding.

Engineering load

What was built

Scenario extraction

Turn how a broker actually talks into constraints the rules can use.

  • Separate asset finance, business, consumer and personal loan lanes
  • Shared ABN and GST date and duration parsing with precise tenure checks
  • Correction handling, so a changed fact reruns the decision path
  • Missing-detail prompts scoped to the loan family in play

Deterministic lender decisions

Same scenario in, same ranked answer out, every time.

  • Eligibility filtering and ranking in source-controlled code, not prompts
  • Rate-criteria and product-band rejection evidence carried with each result
  • Versioned lender-data caching with invalidation after sheet updates
  • Guards against answering from cache on an incomplete scenario

Keeping the lender data true

A structured audit of the dataset the whole system depends on.

  • 42 of 45 in-scope commercial lenders reviewed against their published documents
  • 595 source artefacts read and reconciled: rate cards, policy PDFs and broker exports
  • Gaps classified as missing, stale, contradictory or resolved, per lender
  • A repeatable review process, so the audit can be rerun on demand

Operational integration

Carry the result through the tools the brokerage already runs.

  • Native API and worker services for the broker scenario path
  • Persisted conversation state across serialised follow-ups
  • n8n retained for ingestion and legacy workflow paths
  • Release gates covering routing, state preservation and golden lender results

What changed

42 of 45

Lenders audited

Every in-scope commercial lender bar three was compared line by line against its own published rate cards and policy documents.

5 lenders

Material rate drift found

Five lenders, three of them major bank groups, carried rates stale enough to misprice a deal, at drifts of 0.5 to 2.6 percentage points.

8 lenders

Missing from the dataset

Eight commercial lenders available in the broker portal had no row in the master sheet, so nobody working from it knew they were options.

4 loan lanes

Running deterministically

Asset finance, business, consumer and personal each have their own extraction, ranking and missing-detail behaviour behind one interface.

Technical stack

TypeScript

Node.js

Supabase

PostgreSQL

n8n

Worker services

Playwright

Capabilities applied

Decision systems

Data extraction

Workflow automation

Release verification

Willbot answering a broker question about Liberty private-sale conditions, with the two spreadsheet rows the answer came from listed underneath and one field marked as not available in the imported policy data.
Every policy answer carries the rows it came from, and says so plainly when the data does not cover the question.
A business term loan scenario in Willbot returning no exact matches and eleven conditional options, each listing what a broker must confirm before it counts.
A business scenario with no exact matches. Each conditional option states what still has to be confirmed.
A consumer motor vehicle loan scenario in Willbot, with credit-tier tabs and options whose rates are marked as not recorded.
The consumer lane, with credit tiers and rates the dataset does not hold left marked as not recorded.
The Willbot pop-out on a phone, answering a personal loan fee question for Plenti with its source row cited.
The same pop-out on a phone, running the personal loan lane.

Next project

Industrial Shield

A four-layer board, enclosure and firmware carried to a working helmet prototype.

Willbot: Lending workflows from intake to lender results | SSH Tech