Nirvani
Receipts
Exhibit A

A prompt is a sentence.
This is a system.

"I could do this with one ChatGPT prompt." — Some guy, recently

We built a live Maricopa County real estate intelligence platform. 1,144,243 parcels scanned. 244,653 flagged with distress signals. 170,326 unique owners surfaced. A 0-100 motivation score per parcel. Mini-CRM, AI cold-call dispatch, daily lead briefing, the works. Built. Deployed. Running every day at 6am MST.

The numbers

What actually ships in the box.

1,144,243
parcels analyzed
244,653
distress shortlist
170,326
unique owners surfaced
57,872
absentee + LLC + out-of-state trifecta
26,796
parcels at score 50+
4,321
parcels at score 70+ (call first)
113
ZIP codes (full Phoenix metro)
8
weighted distress signals
13
CRM lifecycle stages

The stack

Every layer doing real work, not just sitting there.

Ingest
Maricopa Assessor ArcGIS REST scraper Python + httpx. Paginates 575 calls of 2,000 records each. Distress flag inference + motivation score computed at write time.
575 calls · daily
Storage
Supabase Postgres 244K rows, 16 columns, 8 indexes. GIN index on distress_flags[]. Owner portfolio view materialized for sub-50ms lookups.
160 MB · indexed
Frontend
Cloudflare Pages dashboard at redeal.nirvani.ai Static HTML/JS, gated by Cloudflare Access (email-PIN). Server-side filtered queries paginated 5,000 at a time.
zero-trust gated
Intelligence
Anthropic Claude /api/script Per-lead personalized cold-call opener, SMS, voicemail script. Pulls distress signals + property facts to generate human, specific copy.
on-demand
Voice
Bland AI outbound caller /api/bland-call "Casey" persona auto-dispatches the call. Owner-friendly script under 90 seconds. Lead status flips to "dialing"; call_id logged.
$0.15 / minute
Email
Cloudflare Worker + Resend Cron at 6am MST. Pulls top-100 leads, formats branded HTML brief, attaches CSV, sends to inbox.
cron · daily
Deploy
Cloudflare Pages + Workers, DNS-aware 3 separate Cloudflare projects + 1 scheduled Worker. CNAMEs scripted. SSL cert auto-provisioned in 2 minutes.
infra as code

The brain

Not a prompt. An actual scoring engine.

Score 0-100+
Weighted distress flag algebra Absentee +10 · Out-of-state +15 · Entity +10 · Held 10y +10 · Held 20y +15 · Value-add +8 · Cheap $/sqft +12 · Rental +5. Trifecta bonus +10. Sleepy long-term landlord bonus +10. Clamped at 100.
SQL · in-DB
Portfolio
Owner aggregation across 170K owners Materialized owner_portfolios view. Per-row "+N more parcels" badge surfaces sweet-spot (3-30) solo investors vs Wall Street (50+).
live · indexed
REIT watch
Institutional landlord inventory mapped Invitation Homes 2,500+ parcels. Tricon 470. Progress Residential 461. American Homes 4 Rent 441. Yamasa 1,076. Tracked for dispo activity.
filter chip
CRM
13-stage lead lifecycle with notes new → dialing → VM left → contacted → interested → appt set → walked → offer out → under contract → closed / dead / DNC. Notes textarea, auto-save on blur. Status dot on every row.
persistent

The receipts

What a prompt cannot do.

Pull 1,144,243 records live from a paginated REST API and persist them.
Run a cron job every morning at 6am MST without you opening a browser.
Send an actual transactional email with a CSV attached.
Dispatch a real outbound phone call to a real human via a real telephony provider.
Remember what status you put on lead #3840 N 43rd Ave when you come back tomorrow.
Aggregate 170,326 unique owners across a county to spot portfolio holders.
Authenticate you with zero-trust gating so your competition cannot peek at the list.
Hold a 160 MB indexed Postgres table and answer sub-second queries against it.
Update a Supabase row from a Cloudflare Pages Function called by your dashboard.
Replace PropStream, BatchLeads, DealMachine, a CRM, an autodialer, and a mailing service in one URL.
What a prompt can do: generate a single piece of text. Useful! That's exactly what we use Anthropic for inside this system: per-lead personalized scripts on demand. That's one layer. We have seven.

Bottom line

You don't replace a system with a sentence.
You replace a single text generation with a sentence.
We replaced the whole funnel.