Applied AI · multi-tenant platform · current work
Keystone platform
One platform for a real-estate investing operation · St. Louis
A multi-tenant backend and operator console that takes an investor from messy lead data to a closed deal: lead generation from public notices, market imports and inbound sites; follow-up in one CRM; an evidence-backed offer range; a photo-based property brief after the walk; and buyers matched to what comes through. Built for a first client, now being generalized for more than one operator.
In development · one operator · first tenant was a client engagement- 01Find and organize leads
- 02Follow up in one CRM
- 03Offer range from evidence
- 04Walk, photograph, brief, close
The problem
A real-estate investor’s day is scattered across sources that don’t talk to each other: public foreclosure notices with a 20-day clock, expired listings and tax-delinquent lists, inbound sellers from the website, photos on a phone after a walk, a spreadsheet of buyers. Every hand-off between those is where leads go cold and numbers get invented. The first client, a St. Louis investor, needed one place where a clean lead arrived on time, follow-up was tracked, an offer had evidence behind it, and a walked property came back as a brief rather than a pile of photos.
What I built
I designed and built the platform as its only engineer and operator: a multi-tenant FastAPI backend on Cloud Run, a Next.js operator console on Vercel, and the pipelines between them. For the first tenant it ran as three audience-specific sites feeding one CRM, an inbound triage service (Scout) that weighed seller leads, a bulk-import pipeline (Deal Hunter) for distress lists, and a public-notice pipeline that put a clean lead in the CRM the day a property hit 20 days from foreclosure. The current work generalizes that into a platform any investor can run their business on, with a research console and a matching buyer system at the center.
The operator’s journey
Six stages, each labeled with what is built, what came from the earlier client build and what is still direction.
- 01
Find and organize
Built for the first tenantDeal Hunter normalizes mass imports (expired listings, tax-delinquent and other distress lists), deduplicates and matches records, and ranks them against the tenant’s buy box. The public-notice pipeline extracts notices, enriches them with property details and delivers qualified leads the same day. Three audience-specific sites capture inbound sellers into one CRM.
- 02
Follow up
Built for the first tenant · CRM being replacedScout scored inbound seller leads against the buy box and pushed them to the CRM with a verdict. Lifecycle automation created follow-up cadences by status with a dedup guard, drafted call-prep briefs and queued outbound email and direct mail. The first tenant’s CRM was Podio; a Keystone-owned CRM is the direction and not yet built.
- 03
Preliminary offer range
Built · in use nowThe research console turns an address into a value range from county public records: bounded lookups, validated comparables, a deterministic $/sq ft range with a confidence tier, and a fail-closed state when the evidence isn’t there. That is the recorded replay below.
- 04
Walk, photograph, brief
Earlier build retained · being folded into the consoleWalk the property, take photos and notes, send them to Scout. PropertyVision analyzes the photos, a repair estimate is priced from a tiered catalog with risk multipliers, and the result is a property brief with a maximum allowable offer and estimated repairs, for the operator to review. It worked in practice: well over the 17 photos in the documented test went through it and the estimates were usable for offer decisions, though I never measured accuracy as a percentage. It is a working tool, now being brought into the console.
- 05
Match buyers
Intake and matching built · distribution offBuyers and capital partners enter their criteria as structured profiles; the platform matches incoming deals to them. Welcome emails and deal-package distribution stay switched off pending review, so matching is operator-visible, not automated outreach.
- 06
Contract, underwrite, close
Direction · not builtContract generation and underwriting to close are the next stages of the journey and exist as design direction only. Nothing on the site claims them as working software.
Built for more than one investor
Every record, buy box and rule is scoped by tenant: API keys carry a tenant and a scope (read, write, paid API, admin), the buy box zones and thresholds live in per-tenant config, and the staged PostgreSQL schema enforces row-level security on every tenant table. The first tenant was a client engagement; the platform runs today with one operator and no paying customers.
Where AI actually sits
Language and vision models sit where the input is unstructured: extracting fields from public notices and inbound email, analyzing property photos for the repair estimate, and drafting call-prep and contact summaries for a person to read. Scoring, ranking, the offer range and the maximum allowable offer are deterministic rules over validated fields. An early extraction run wrote borrower names into address fields, which is why the data contracts now forbid person-identifying keys outright, and why every model output is a proposal a person reviews rather than a write.