CRM Rescue / Local-first internal tool
Making messy sales data reviewable instead of magical
CRM Rescue transforms a CRM CSV into a validated, deduplicated, prioritized, human-reviewable pipeline without automatically contacting anyone or modifying a source CRM.
Release evidence
What the build actually proved.
These are release facts from synthetic fixtures and verification—not claims about customer results.
System path
A legible input-to-output boundary.
The useful part is not the tool list. It is knowing what enters, what the deterministic core changes, and what remains available for review.
Build notes
From operational problem to verified release.
Each layer records what changed, what did not, and where a person still owns the decision.
01
CONTEXTProblem
CRM cleanup involves more than formatting. Exports can contain inconsistent headers, malformed contact fields, duplicate records, missing owners, stale activity, and unclear next actions. Silent merges or opaque “lead quality” scores can make the data less trustworthy.
02
BUILD LAYERSolution
The application guides a user through column mapping, deterministic validation, duplicate review, pipeline-health checks, attention scoring, confirmed decisions, reproducible exports, and local deletion. Invalid or uncertain records remain visible instead of disappearing.
03
BUILD LAYERArchitecture
React and TypeScript review UI → FastAPI and Pydantic decision layer → SQLite local state and audit trail → reproducible CSV and JSON exports
Nginx serves the interface and proxies the API behind one loopback origin. Docker Compose packages the local application and data volume.
04
BUILD LAYERSafety boundaries
- Candidate scores create review items; they never authorize a merge.
- Every merge and keep-separate decision requires confirmation.
- No AI, analytics, CRM writeback, email, SMS, enrichment, or automatic submission exists.
- Runtime CSVs, SQLite files, and generated exports remain local.
- Spreadsheet values that could execute as formulas are prefixed and audited.
05
RESULTVerified outcome
The deterministic demo processed 24 invented records from Salesforce-style, HubSpot-style, and generic CSV fixtures. Six duplicate candidates were explicitly resolved, leaving 22 active records and no pending decisions. These are demo results, not claims about customer data or sales performance.
Product evidence
Real screens from the verified release.
Synthetic or sanitized fixtures only. The screenshots show the review surfaces and boundaries described above.


