
A local-first desktop app for B2B account research and signal-based lead scoring, in TypeScript and React on Tauri and Rust, with every profile, score and receipt in SQLite on the machine that produced it. Specialists research in ordered waves, a verifier audits the evidence behind every finding, and a Rust completion gate refuses any verified claim without an HTTPS source, a quote and a date.
React and TypeScript in front, Rust and Tauri 2 behind, SQLite in write-ahead mode underneath, and Claude CLI subprocesses as the research engine. The halves talk over three channels — invoke commands for requests, streaming channels for live job output, events for updates nobody asked for. The job queue runs up to five jobs at once behind a semaphore, each with a timeout that scales with research depth and its own isolated workspace.
A run is planned, not prompted. An orchestrator schedules specialists in ordered waves, and a wave starts only when the previous wave's JSON artefacts are on disk, so a later specialist reads what an earlier one actually wrote. The roster: a pain diagnostician, a business-model strategist, a trigger-signal analyst, a tech-stack analyst, a people finder, and on deep runs a competitive-position analyst. A synthesiser cites every claim back to the specialist that produced it, and scoring is a separate deterministic pass against a rubric the user writes, with its reasoning visible.
The evidence contract lives in Rust, not in a prompt. A bounded verifier audits every claim's URL, confidence, freshness and conflicts, and the completion gate refuses a malformed ledger outright: no claim reaches verified without a credential-free HTTPS source, a substantive quote, a bounded confidence and a valid date. Receipts persist separately from the profile, so the profile can never overwrite its own audit trail. When specialists disagree the order is fixed — the verifier's verdict, then higher confidence, then the fresher source — and an unsettled claim is dropped, never averaged.