No matter how many ways a renter reaches us, or how many homes they ask about, they show up once on the list, and what we show matches what the client sees in their own system.
Proposed 2026-09-20 · plain-language companion to the engineering design at /a/leasing-engine-designs#zero-duplicates-2026-09-20
Contents
If the client's system owns the record and something happens that it can't see (a call, a direct email), Clara adds it there. Already have this person? Add a note to their card. Never seen them? Create the card. Nothing lives only on our side. When PropFlow is the record, the same step writes to our own list. Same rule, same plug. For AppFolio and Yardi, we keep our copy of the card (the mirror): we pull it every sync and never edit that copy ourselves — changes go through write-back and come back on the next sync. For PropFlow CRM, there's no copy — the connector reads and writes our own table, so the record and the store are the same thing.
Two showings, three homes, a second email address: still one person, still one line. Anything else is a bug we fix in Clara, not with a “merge?” button.
Stage and lead source come from their system. “AppFolio” is never a source; the source is Zillow, the website, a phone call. We don't invent a lead from a listing-site email when their system already has the card.
Connecting a new system means one plug that does four things: read their records, create a card, add a note, translate their words for stage and source into ours. Clara doesn't change.
Zillow's relay email reached our inbox and AppFolio created a card 30 minutes later. We made two people out of one.
One line. Source says Zillow, stage says whatever AppFolio says. The relay email attached to his card instead of becoming a second person.
Updated 2026-09-20, 10:20 AM MT
Built = the phase's code is all merged. Proven = the phase's own check passes against real production data with zero defects. Live = a customer's record-owner setting is actually set and its page has been checked. This tracker updates as work lands — it does not change how the picture above reads.
| Phase | What it means | Status | Proof | Last change |
|---|---|---|---|---|
| 0. Corpus | Pull every real guest card with everything the new model needs (property, status, inquiries, linked application, linked tenant). | Done | 2,858 real cards pulled (Western Slope 1,116 · Situs 1,572 · Camellia 170); all 90 Western Slope multi-home cards now carry their full inquiry list | 2026-09-20 |
| 1. Copy (mirror) | Every pulled card becomes exactly one record in our own copy; pulling it again changes nothing. | Proven | 3,625 person-links checked across repeat pulls, 0 changed, 0 lost; production copy is live and fresh (Western Slope 1,040 cards, Camellia 60) | 2026-09-20 |
| 2. Status | Every AppFolio status word maps through one explicit table, never guessed. | Proven | 0 unmapped statuses, including the “Cold” status that was missing one lane | 2026-09-20 |
| 3. Person | One human gets one person id, forever; a re-pull never loses it. | Proven | 22 checks pass, 0 fail, on the real-data corpus across all three clients | 2026-09-20 |
| 4. Household | Co-applicants get grouped from our copy, matching how the old system grouped them. | Proven | All household/deal checks pass for JP&Co, Situs and Western Slope (2 Western Slope checks can’t run — every group in this window has just one member, a data gap, not a bug) | 2026-09-20 |
| 5. The page (one row per person) | The prospects list is built straight from our copy, one row per person, their homes listed underneath. | In review | Card-based view: 1,040 AppFolio cards fold to 973 people, 104 groups (the old page showed 157 rows with 39 duplicate groups); grouping same-person cards into one row is the last piece before the flip | 2026-09-20 |
| 6. PropFlow CRM (Camellia) | Camellia, which has no leasing PMS, runs as its own record owner through the same engine and the same checks. | In review | Adapter and setting merged and live; Camellia’s copy is syncing; a full before/after proof that Camellia’s page is unchanged is still queued | 2026-09-20 |
| 7. Write-back replay | Every historical write-back replays under the new model with the same result as before. | Proven | A year of Western Slope write-backs replayed, 0 grouping changes; Situs and JP&Co had no write-back history yet to replay | 2026-09-20 |
| 8. Concurrency (real database) | The same checks run against a real, shared database, not just an in-memory test. | Proven | 1,279 rows written through the real production path and cleaned up (0 left); repeating a pull of the same card made zero writes | 2026-09-20 |
| Go-live: Western Slope flip + live check | Turn Western Slope’s prospects page onto the new, one-row-per-person list, and confirm it live. | Queued | Waiting on phase 5’s grouping piece; Fede’s call once that and the checker below are clean | 2026-09-20 |
| Go-live: one-time cleanup of invented rows | After the flip, remove or fold the rows the old model invented, with a backup first. | Queued | Dry run at Western Slope: delete 117 invented/copied rows, fold 18, keep 15 real PropFlow-only leads, leave 23 for a human call; real run waits for the flip, under Fede’s go | 2026-09-20 |
| Go-live: false green-check repair | Fix the proof checker itself where it was reporting a pass that wasn’t real. | Done | A pass that could never fail (the database-lane seeder dropped the fields it needed) fixed with a real grading test; three separate checker mistakes found and corrected during the run | 2026-09-20 |
Situs Group has no production organization yet, so it has no live page to flip — its numbers above come from the harvested test pull, not production.