Moat Architecture · Public Documentation

Every Deal Trains
the Routing Engine.

The knowledge base (3,059 operator rules) can be rebuilt in 6–12 weeks. The outcome dataset cannot. It only exists inside a running instance — accumulated deal by deal, nightly, across 18 months of production use.

📄
Deal
Submitted
Lender
Matched
Outcome
Logged
🕐
Nightly
Reweight
📈
Weights
Updated
←——————————— next deal routes smarter ———————————→
Feedback loop running
·
Last reweight:
·
Lenders weighted last run:
·
Cadence: nightly 2:00 AM CT
LOOP ACTIVE
Live System Metrics

18 Months of Production Data.
These Numbers Are Real.

All figures come from our live deployment. The endpoint at /api/outcomes/dashboard is public and unauthenticated — check it yourself.

Finance deals routed
1,167
Subprime + near-prime credit decisions over 18 months. Cash and OEM captive excluded from this count.
Lenders in routing matrix
42
Each with a per-dealer approval rate curve that recomputes nightly from live outcome data.
First-look approval rate
+15pp
68% → 83% over the 18-month deployment window. Measured on the same dealerships before/after.
Avg days to fund (1st look)
2.1
Funded deals on the first lender submission. Source: DMS funding log + LouieAuto routing table.
Lenders weighted (last run)
Lenders with ≥3 live outcomes from this dealership's history in the last nightly reweight.
Last reweight timestamp
Pulled live from the system. Reweight runs at 2:00 AM CT every night.
Interpreting the 1,167 figure: These are credit-route decisions — applications submitted to a specific lender by the AI routing engine based on learned approval probability. They do not represent all units sold; cash deals, lease deals, and OEM captive-finance transactions are handled outside this workflow. For a franchise store doing 50 units/month, roughly 25–35% of deals are routed through this engine.
Mechanics

The Loop, Step by Step

The routing engine is not a static lender priority list. It is a weight model that updates every night from the previous day's funded, declined, and countered deals.

  1. Deal submitted to Louie

    FICO score, LTV, loan amount, vehicle type, down payment, and stip tolerance are entered. matchLenders() reads the current per-dealer weight map and returns a ranked lender list with the best first-look probability at top. Only lenders with active programs for that FICO tier are eligible.

  2. Outcome logged on resolution

    When the lender responds — approved, declined, or countered with stips — the outcome is written to the lender_outcomes table: decision, days to fund, stip count, and deal ID. The row is tagged with the dealer's dealership_id and is never shared across dealers or accessible from outside that dealer's session.

  3. 3

    Nightly reweight runs at 2:00 AM CT

    lenderReweightJob() fires for every dealer with live outcome data. For each lender, it queries all historical outcomes for that dealership and computes a composite score weighting approval rate (70%) and funding speed (30%). Any lender whose approval rate dropped more than 5 points versus the 7-day prior snapshot triggers an owner alert email.

  4. 4

    Updated weights applied to the next deal

    The following morning, the next credit submission uses the freshly computed weight map. Lenders with fewer than 3 outcomes on that dealership's history are excluded from weight-based ranking — below that threshold, program eligibility alone governs. Routing precision compounds as volume grows.

  5. Snapshot saved for 7-day drift comparison

    Each nightly run saves the weight state to lender_weight_cache. One week later, the next run compares current weights against that snapshot — this is the mechanism behind the approval-rate-drop alert. The cache also provides immutable proof that the loop ran and what the state was at any given time.

The weight formula — shown openly:
// src/routes/lenderOutcomes.js — getWeights(dealershipId) // Only lenders with ≥3 outcomes per dealer are included. const approvalScore = (approval_pct / 100); const speedScore = avg_dtf ? Math.max(0, 1 - (avg_dtf / 30)) : 0.5; score = (approvalScore × 0.7) + (speedScore × 0.3);

The formula and code are visible in the repository. What is not transferable is the per-dealer data that feeds it — the 18+ months of approved/declined outcomes that give each lender's approval_pct meaning for a specific store.

Operational Proof

The Reweight Log.
Not a Claim — a Record.

The table below is fetched live from the agent log on this server. Every success entry confirms that lender weights were recomputed and saved for at least one dealer that night.

Timestamp (CT) Job Result Detail
Loading job history…
Cron schedule: 0 2 * * * America/Chicago — every day at 2:00 AM Central. Defined in src/agent.js alongside 16 other nightly and intraday jobs. The sim→closed-loop sync runs at 1:30 AM (30 minutes prior) so simulation-validated deals are already in lender_outcomes when the reweight fires.
Data Architecture

Per-Dealer Siloing.
The Isolation Is Structural.

Every outcome row is tagged dealership_id. getWeights() and matchLenders() always filter by that ID. There is no shared routing model, no cross-dealer aggregation of approval rates, and no mechanism to query another dealer's history.

Dealer A — Founding Store

Westlake approval rate: 81% (43 deals)
Capital One approval rate: 67% (29 deals)
Exeter approval rate: 58% (12 deals)
GLS days-to-fund avg: 2.1
These weights are specific to Dealer A's mix, location, vehicle type, and buyer profile. Inaccessible from any other session.
dealership_id wall

Dealer B — External Customer

Westlake approval rate: starts at program default
Capital One approval rate: starts at program default
Exeter approval rate: starts at program default
Days-to-fund: calibrated as outcomes accumulate
Dealer B's weights build independently from their own outcomes. They cannot access Dealer A's history — nor can Dealer A access theirs.
What this means for acquisition: An acquirer purchasing LouieAuto receives the routing engine, the weight algorithm, the 42-lender matrix, and the outcome history from the 5 founding stores. External customer histories remain with those customers unless separately negotiated. Each new deployment starts calibration from zero and accumulates its own per-dealer dataset over time.
Honest Moat Assessment

What You Can Copy.
What You Can't.

Every diligence team will ask this. Here is the answer before they ask it.

⚠ Replicable in 6–12 weeks

The knowledge base

3,059 operator-encoded rules: desk logic, stip playbooks, lender program eligibility, bankruptcy timing, compliance checks, objection handling. A competitor with a 30-year dealer principal and adequate funding could rebuild this in a focused sprint. This is not the durable moat. It never was.

● Not replicable without 12–18 months of live deployment

The per-dealer outcome dataset

Each store's approved/declined/funded history per lender — across FICO tier, LTV band, vehicle age, stip profile, and deal structure. This data only exists inside a running instance. It cannot be scraped, purchased, or synthesized. A competitor deploying today would need 12–18 months of live production to build comparable calibration for a single dealer.

Component Replicability Estimated catch-up time Why
Operator knowledge base (3,059 rules) REPLICABLE 6–12 weeks Structured rules can be re-encoded by an experienced operator with engineering support
42-lender program matrix REPLICABLE 3–6 months Program terms are available from lenders; mapping takes engineering time + lender relationship access
Routing weight algorithm REPLICABLE 1–2 weeks Formula is published on this page. Engineering implementation is straightforward.
Per-dealer approval/declined history (18 months) NOT REPLICABLE 12–18 months per dealer Only accumulates in production. Cannot be transferred, scraped, or synthesized. Each dealer starts from zero.
Nightly reweight cadence + alert engine NOT REPLICABLE (short-term) 12+ months per dealer Algorithm is replicable; the calibrated outputs require the outcome data to compute
Compounding accuracy advantage STRUCTURAL LEAD Widens every night Each additional funded deal increases the gap between a calibrated store and a static-playbook competitor
For Acquirers

What Transfers at Close.
What Stays with Each Dealer.

This table answers the most common diligence question: "We're buying the platform, but do we get the data?"

Asset Transfers at close? Notes
Full codebase (163 route files, all 150 modules) YES Complete IP transfer. All-IP transfer preferred at close.
Operator knowledge base (3,059 rules, prompts, stip logic) YES Fully encoded in the system. 12-week formal transfer plan available in data room.
42-lender matrix (program terms, eligibility tiers, stip maps) YES Complete documentation. Lender relationship introductions available.
Routing weight algorithm YES Published openly on this page. In the codebase at src/routes/lenderOutcomes.js.
Founding store outcome history (18 months, 1,167+ routed deals) YES The trained weight dataset from the founder's stores. This is the calibration head start.
External customer outcome histories (post first external pilot) NEGOTIABLE Subject to dealer data agreements. Structured as part of acquisition terms.
Per-dealer model accuracy for new deployments ACCUMULATES POST-CLOSE New rooftops added by the acquirer start calibration from zero and build over 12–18 months of live operation.
Strategic implication: An acquirer with an existing dealer distribution network can deploy LouieAuto across their base on day one — at which point calibration data begins accumulating for every new rooftop simultaneously. The acquirer's install-base advantage compounds faster than any organic competitor deploying from scratch.

Full diligence package available.

Public materials are above. Financials, DMS data exports, full outcome dataset, and technical architecture review are in the data room — available to verified acquirers after gate submission.