A browser-native simulation of an AI-assisted wildfire property underwriting workflow. The key insight: the similarity engine helps underwriters decide which way to go faster — the deterministic rating engine determines what premium that corresponds to. A POC built against a property-insurance startup's requirement set — an architecture demonstration.
Each new submission is evaluated from scratch. Underwriters spend time reviewing properties nearly identical to ones they decided last week — but there is no structured way to surface that prior decision as evidence. The knowledge exists; it just lives in someone's head, not in the system.
Broker quality varies significantly — submission completeness, documentation accuracy, fraud exposure. But that signal never accumulates into a structured profile the system can act on. Every submission from a new-relationship broker is treated identically to one from a trusted high-volume partner.
Every decision a human underwriter makes is immediately encoded as a labeled precedent. The next similar property retrieves those decisions as evidence, surfaces the top reasons, and pre-populates the decision rationale — so the underwriter is verifying evidence, not reconstructing it.
The k-NN similarity layer never sets a premium. fire-rates.js is the pricing authority — a relativity-rating engine with filed provisions. Mitigation deltas (“remove defensible space gap → premium drops $X”) come from recomputing the deterministic engine with one provision changed, not from the similarity model.
Why this matters: “what exactly is learned vs fixed?” — this answer is clean and survives a regulator audit.
Approve property A → neighbor B gets flagged for re-review with “strong precedent nearby (0.87 sim · approve)”. B's underwriting state does not change without fresh property-level evidence. This removes the feedback-loop and geographic-discrimination risk while keeping the visual demo beat: watch B move up in the queue after you approve A.
Portfolio guardrails act as hard vetoes: a 30% geographic concentration cap blocks even a “clear approve” recommendation.
When the k-NN store has insufficient precedent, the recommendation band is novel and a distinct notice routes the property to an independent underwriter review. Showing “I don't know” explicitly increases credibility — it means the confident recommendations are actually confident.
Each property is encoded as a 17-dimensional float vector over named, auditable risk indicators: proximity to ridge/canyon, slope angle, fire-hazard severity zone, construction materials, defensible space compliance, and cat-model subscores. The naming matters — underwriters can inspect and challenge each dimension.
In-memory weighted cosine similarity over 60 seed precedents + any session decisions. Under 1ms per lookup at this cardinality. In production: sqlite-vec is the zero-infrastructure swap — same interface, disk-backed, no separate server.
fire-rates.js — a deterministic relativity-rating engine: factor × credibility-weight per provision + cat-peril curves. Computes every premium in the demo. Mitigation deltas are a targeted recompute with one provision changed; no ML involved in pricing.
Static seed profiles keyed by broker identity — submission count, approval rate, avg premium, years active, tier (trusted / standard / new). Surfaced in the intake detail panel for every email. In production: computed from historical referral outcomes, updated after each decision.
The progression sounds like a real insurer path, not an “AI takes over” story. Each phase reuses the same precedent store and the same rated engine — the automation surface expands, the infrastructure does not.
The guided demo panel (7-step arc) is in the collapsible at the top of the Submissions tab. Each step has a Spotlight button that switches tabs and pulses the relevant UI element. A Reset demo button in the header clears all session decisions and returns the store to the seeded 60-precedent baseline.