Map Guide
PIN COLORS (Return on Cost)
0–15% ROC
15–30% ROC
30–50% ROC
50–100% ROC
100%+ ROC (burn-lot territory)
Ghost pin — negative ROC at asking price
DEAL STATUS DOTS
Screening
Analyzing
LOI Submitted
Under Contract
Closed
Passed
OTHER MARKERS
Pulsing pin = listed within 7 days
Switch to the Assumptions tab above to tune the SFR pro forma — every parcel reprices live as you drag. The map opens on viable deals only (ROC ≥ 0% at asking price); use the ROC filter to widen.
SFR Acquisition — Strategy
We identify single-family-zoned LA County parcels — teardown or vacant — where the spread between land cost and a new-construction $/SF exit is large enough to pencil. We acquire, build one modern modular SFR per lot, and sell it. Baseline economics: $500/SF all-in ($425 hard + $75 soft, configurable) against a $1,000/SF+ target exit. Build-to-sell only; BTR is a future addition. One home per lot for v1.
Market
This app covers LA County only (City + all incorporated cities). All listings, comps, and zoning data are LA-specific. Vacant Land + Single Family Residential are both admitted to the acquisition layer; vacant lots are the preferred build-to-sell target and run the pro forma off defaultHomeSf with demoCost = 0.
VHFHSZ: Very High Fire Hazard Severity Zone is an informational flag only in the SFR app, NOT a knockout. The Jan-2025 Palisades burn footprint is a priority target — post-fire vacant lots are surfaced via the burn-zone overlay (toggle in the filter bar) and the 🔥 badge on deal cards. Insurance + WUI code surcharge belong in the per-deal pro forma, not the eligibility gate.
Zoning coverage: 4-endpoint cascade (City of LA / Santa Monica / Malibu / LA County DRP) confirms zone for ~80% of slice parcels. Parcels in uncovered cities (Beverly Hills, WeHo, Culver City, Inglewood, Pasadena, Glendale, Burbank, Long Beach) fall back to the Redfin property-type mapping with a zoningUnconfirmed flag on the card.
Pro Forma Model
Every parcel runs through the SFR pro forma (see src/models/proforma.js):
Sell value = homeSf × exitPsf. sellingCosts = sellValue × sellingCostPct (default 4%).
Build cost = (hardPsf + softPsf + siteWorkPsf) × homeSf + demoCost. Defaults: $425 hard + $75 soft, $0 site / demo per Appendix C.
Financing cost = loanAmount × (rate÷12) × holdMonths × drawFactor. loanAmount = LTC × (land + build); default LTC 70%, rate 10%, hold 14 mo, drawFactor 0.60.
Total cost = landCost + buildCost + financingCost. Gross profit = sellValue − totalCost − sellingCosts.
Returns: ROC = profit ÷ totalCost. ROS = profit ÷ sellValue. ROE = profit ÷ equityNeeded (where equityNeeded = totalCost − loanAmount).
Two Land Solvers
The acquisition decision always turns on “max land price.” The model exposes both forms:
(a) Simple — target gross return on net sales (LP-facing, transparent, default heatmap metric):
maxLand = netSales − buildCost − financingCost − (netSales × targetGrossReturnPct)
Default target 20%. landPctOfValue = maxLand ÷ sellValue is the gut-check ratio (Palisades-class baseline ~25.8%).
(b) Residual — target return on cost, time-aware:
maxLand = ((sellValue − sellingCosts) − allInBuildPsf×homeSf×(1 + roc×holdMonths÷12)) / (1 + roc×holdMonths÷12)
Default target ROC 25% annualized. Plug the residual maxLand back as landCost and the deal yields exactly the target ROC.
Deal signal = maxLand vs. asking. The gap is the opportunity.
Capital Stack & Fund Fees
Debt: loanAmount sized from LTC; default 70% (range 65–80). Rate 10% (range 10–11). Origination fee 1.25%.
Equity: equityNeeded = totalCost − loanAmount. Split GP coinvest (default 0%) vs. LP.
Land draw: landDraw = max(landCost − lpEquity, 0) — portion of land returned as a draw.
Fees: Acquisition 2% of land. Construction Mgmt 5% of build. Disposition 1% of sell value.
Waterfall (§6.5 simple form)
Net distributable = netSales − loanRepayment. Distributions in order:
1. Return of LP capital — pay LP equity back first, then GP coinvest.
2. 7% LP priority return on LP capital, time-prorated by hold months.
3. Developer fees — acq + constr mgmt + disposition.
4. Remaining profit split 50/50 LP / GP (configurable via gpProfitSplitPct).
Invariant: distributions sum to net distributable (residual ≈ 0). The fuller ROC-deficit promote tier (First/Second/Third) is a future seam in computeWaterfall.
Map Tools
Draw polygon — click the pencil icon to draw a custom boundary. Only listings inside the polygon are shown. Click × to clear.
Favorites — star a deal in the deal card to save it. Toggle “Favorites only” in the filter bar to isolate saved deals. Persists across sessions.
Deal status — use the dropdown in the deal card header to track workflow (Screening → Analyzing → LOI → Under Contract → Closed / Passed). Status dots appear on pins.
URL sharing — all active filters encode into the URL hash. Copy the URL to share a filtered view.
Layer Toggles
On-Market — active listings colored by net margin
Sale $/SF — sold comp dots + neighborhood grid (median exit $/SF per 0.01° cell)
Off-Market — cross-hair pins for direct-to-homeowner targets (see Off-Market tab)
Fire / Flood / Quake — hazard overlay layers from state GIS data
🏛 Historic — Toggles HPOZ (purple shaded areas) and HCM (purple dots) overlays across the full map. These designations are hard exclusions under SB 1123 §66499.41. Any listing or off-market search within an HPOZ or HCM boundary is flagged ‘🏛 Historic — UNQUAL’ and removed from the viable deal pool.
Deal Card Tools
Sale Comps — opens a full spatial comp table (radius search, grouped by SFR/Condo/TH, sortable, CSV export). Used comps highlighted with green bar.
Rent Comps — opens a spatial rental comp table (expanding radius search, match-scored 0–100, CSV export).
Lot layout diagram — expandable SVG showing setbacks, 20 ft driveway, unit footprints, and remainder area. Drawn from actual lot dimensions when available.
XLS — downloads a multi-tab Excel model: Assumptions, Sources & Uses, Cash Flow, Outputs, Exit Comps.
OM — generates a PowerPoint offering memorandum via API.
Teaser — downloads a 2-page deal summary PDF with key metrics and sensitivity table.
Off-Market Search Cards
Address search — type any California address. Active listings open their deal card. Saved off-market searches show “Off-Market — saved” label. New addresses create an Off-Market card from live parcel data.
Full parity — Off-Market cards mirror deal cards: Hero strip, Economics + Pro Forma, Site + DSCR Waterfall, Exit Pricing Comps, and full action bar.
Rent data — DSCR waterfall populates with nearby rental comp data (same spatial grid as standard listings). Shows Cons/Base/Aggr scenarios.
Deal status — dropdown in card header (Screening → Analyzing → LOI → Under Contract → Closed/Passed). Selecting a status auto-saves the off-market search.
Save — persists off-market search to favorites + localStorage. Blue pin appears on map, survives page refresh, and re-opens as an off-market card (not a standard deal card).
Export — XLS, OM, Teaser, Sale Comps, and Rent Comps all functional on off-market cards.
Share — copies ?search=lat,lng URL. Pasting into a new window reopens the off-market card (loads from saved data if available, otherwise re-fetches parcel data).
Edit Mode
Enter/Exit — click “✎ Edit” in the deal card header to enter edit mode. “✓ Done” saves overrides to localStorage. “↺ Reset” clears all overrides. Press Escape to revert to pre-session values.
6 editable fields — Asking Price, Exit $/SF, Build Cost $/SF, Units, Avg Unit SF, Monthly Rent. All other values update reactively via calculateProForma().
Live recalc — every keystroke (debounced 150ms) re-runs the full pro forma. Economics, Pro Forma, DSCR Waterfall, Hero strip all update in real time.
Persistence — overrides saved per-AIN in localStorage (sfr_overrides_<AIN>). An “✎ Edited” badge appears on cards with saved overrides.
Direct export — XLS, OM, and Teaser export immediately on click. When overrides are active, exports automatically use override values instead of original listing data.
Works on both — standard deal cards and off-market search cards. Off-market acquisition input integrates with the 6-field edit system.
Comp hiding — complementary to edit mode. Hide comps to curate the data source (recalculates exit $/SF), then optionally enter edit mode to override the result. Edit mode initializes from the comp-derived value.
Filters
ROC — range slider + preset chips (50%/30%/0%). Gross profit ÷ total cost at asking price. Drives pin color and is the SFR deal signal. Defaults to ≥ 0% (viable deals only); drag below 0 (or hit reset) to reveal non-viable parcels as ghosted context.
Lot SF / Lot width — permissive defaults (off). Restrict to the buildable-envelope band you target.
Acquisition price ≤ / Exit $/SF ≥ — bound the asking-price and comp-derived exit ranges.
Land basis $/SF ≤ / Slope ≤ — cap the land-cost basis and slope. Slope filter is now live (Phase 2c): USGS 1m LiDAR grades are stamped on every parcel via fetch_slopes.py; drag the slider to exclude steep/unbuildable lots. Lots with slope ≥15% show a cost-uplift warning.
Burn-zone parcels only — OFF by default. When ON, restricts the view to parcels inside the Palisades fire perimeter. Burn-zone parcels are never auto-hidden — they are TARGETS for build-to-sell SFR.
Zone toggles — R1 + LAND (vacant) ON by default; R2/R3/R4/MU OFF (toggleable). SFR universe is single-family-zoned + vacant residential.
VHFHSZ, Burn-Zone & Coastal Zone (Phase 2c)
VHFHSZ is a FLAG, not a filter. Stamped via local PIP against CAL FIRE GeoJSON. Surfaced on the card as ⚠ VHFHSZ flag; never drops a parcel.
Burn-zone = l.burnZone = "Palisades". Displayed as 🔥 BURN-ZONE TARGET. Surfaced, never suppressed.
Coastal Zone = l.coastal = true for parcels inside the CA Coastal Commission boundary. Displayed as 🌊 Coastal Zone — CDP required on the deal card. Informational only — never excludes. The Coastal Development Permit (CDP) adds 3–6+ months to entitlement. Toggle the coastal zone overlay in the filter panel to visualize the CCC boundary on the map.
Home SF per parcel — the “Home SF” field on every deal card is editable. Typing a number sets l._overrideHomeSf for that parcel, immediately re-runs the pro forma, and live-updates economics + waterfall. This overrides the global Home Size slider for that one deal.
Comp Confidence (Phase 2c)
The exit $/SF confidence label (High / Moderate / Low) on each deal card exit section reflects how reliable the cluster-derived exit value is: High = ≥10 comps within 0.5 mi; Moderate = ≥5 comps within 1.5 mi; Low = <5 comps OR radius >1.5 mi. Confidence is purely informational — it never changes the exit value or the ranking.
When confidence is Low, the exit sub-label turns orange. No pin color or rank change occurs. Use it to flag deals for deeper comp research before LOI.
Visual Encoding
Pin size — larger pins = bigger lots (≥15K SF = large, ≥10K SF = medium, <10K SF = small)
Land basis $/SF — green < $120, yellow $120–$160, red > $160
SFR-heavy warning — shown when >30% of comps are SFR; exit $/SF may overstate townhome value
Lot efficiency — buildable SF ÷ lot SF. Used in off-market gate (>70% required).
Heatmap Color Scale (Phase 3b-PREP)
Rescaled to the realized SFR exit-$/SF distribution observed in the SM+Palisades slice (~$840 P5 → $3,540 P95). The carryover 1123 band of $600–$1,000 painted every Westside pin red; the new band discriminates inside the $1.5K–$2.5K/SF meat of the market.
$840 — blue (cool / value)
~$1.5K — cyan
~$2.2K — green (mid Westside)
~$2.9K — yellow (luxury pocket)
$3,540+ — red (ultra-luxury / Palisades-cliff)
Data Age Indicators
Colored dots in the header bar show when each dataset was last refreshed:
< 3 days old
3–7 days old
> 7 days old
Age unknown
Datasets tracked: Listings, Comps, Parcels. Rental comp data age is tracked separately — rental comps are regenerated via fetch_rental_comps.py and stamped into LISTINGS_META.rentalCompsAge.
Access
Invite-only access. Contact matt@lucidresi.com.
How Exit $/SF Is Calculated
Exit $/SF is the estimated sale price per square foot for a completed new-construction single-family home on this parcel. The comp universe is restricted to detached single-family residences only (no condos, no townhomes, no multi-family) and to sales within the last 24 months. Comps are classified into three condition tiers, and the exit price prefers the truest comp pool (T1-New) and falls back gracefully when that pool is thin.
prefer T1-New regression → T1-Reno regression → T1-New median → T1-Reno median → T2 regression × (1 + uplift) → T2 median × (1 + uplift)
uplift = 18% (condition adjustment for older / unrenovated comps)
No floor. No ceiling. The model output is the number. Each cluster reports its exitSrc (which tier the price came from) so confidence can be judged at a glance.
SFR Comp Universe & Three-Tier Classification
Comps are spatially clustered (0.005° ≈ 0.35 mi grid cells) and bucketed into one of three tiers:
T1-New — Built within the last 5 years — the truest comp for a new-build exit; preferred when ≥3 prints exist in the cluster
T1-Reno — Near-new finish proxy: a mid-recency build (yb 2000–2020) with non-negative residual, OR an older build (yb ≥1900) selling >$100/SF above the neighborhood median (indicating a full remodel)
T2-Existing — Older / unrenovated baseline. Used as exit anchor only when T1-New and T1-Reno are both insufficient, and only with a +18% condition uplift
A cluster needs at least 3 comps in a tier to fit a weighted size-regression. Below that, the tier median is used. T1-Reno requires no premium — recently renovated SFR finishes are comparable to new construction in $/SF terms; the gap shows up only in T2.
Sale $/SF Color Scale
The Sale $/SF grid layer and comp popup colors use a 14-bucket cold-to-hot gradient:
$1,500+
$1,400–1,500
$1,300–1,400
$1,200–1,300
$1,100–1,200
$1,000–1,100
$950–1,000
$900–950
$850–900
$800–850
$750–800
$700–750
$650–700
<$650
Size Curve
Within each cluster and each tier (with ≥3 comps), the pipeline fits a recency-weighted linear regression of price = intercept + slope × sqft across comp sale price and square footage, then predicts the price at the 3,500 SF target home size. Output is converted back to $/SF for display. Comps outside 1,200–6,000 SF are excluded from the curve fit; comps with extreme slopes (<$200 or >$1,500/SF) are rejected as bad fits.
The 3,500 SF anchor matches our default new-build SFR home size. Larger or smaller targets are interpolated from the same curve via the KEY-panel home-size override.
Proximity Weights
0–0.5 miles 1.00
0.5–1.0 miles 0.80
1.0–1.5 miles 0.60
1.5–2.0 miles 0.40
Beyond 2.0 miles excluded
Recency Weights
0–6 months ago 1.00
6–12 months ago 0.85
12–18 months ago 0.70
18–24 months ago 0.50
Older than 24 months excluded
Comp Confidence
The model requires at least 5 comps. If fewer qualify, the search radius expands (up to 3.0 miles) and lower product tiers are added until 5 are found. Confidence is scored 0–100 based on comp count and method quality:
High (75+) — 10+ scored comps within search radius
Medium (50–74) — 5–9 scored comps
Low (25–49) — fewer than 5 high-quality comps; treat exit $/SF with caution
Very Low (<25) — sparse data; exit $/SF is unreliable
Outlier Trimming
Before computing the weighted average, the model trims outlier comps using a 1.0× IQR filter on $/SF. Trimming only activates when the pool has at least 5 comps and will never remove more than 40% of the pool, ensuring the average is not skewed by extreme values while preserving thin markets.
T2 Condition Uplift (When Used)
When a cluster lacks enough T1-New or T1-Reno prints to anchor an exit, the model falls back to the T2 (older / unrenovated) pool with a +18% condition uplift. This adjusts for the empirical gap between an existing-condition resale and what a new SFR build in the same submarket trades for.
The uplift is applied only when exitSrc is existing+uplift or existing-median+uplift. T1-Reno prints (recently renovated) are treated as comparable to new construction in finish level and require no premium.
Exit Source Codes (Confidence Signal)
Each cluster exposes the path the exit number was derived from, so confidence can be judged at a glance:
new — Strongest: ≥3 T1-New comps in the cluster supported a size-regression fit
reno — Strong: ≥3 T1-Reno comps anchored the regression (recent renovation ≈ new finish)
new-median / reno-median — Moderate: ≥3 T1 prints exist but the regression did not pass sanity checks; tier median used
existing+uplift / existing-median+uplift — Limited: no T1 prints in the cluster; T2 baseline used with +18% condition uplift
blended+uplift — Weakest: insufficient comps in any tier; blended cluster median used with half uplift. Treat exit with caution.
Comp Exclusion (Hide Toggle)
Exit $/SF reflects active comps only. Use the Hide toggle in the comps table to exclude individual comps based on local market expertise. Excluded comps remain visible at reduced opacity and are flagged (EXCLUDED: TRUE) in CSV exports but are removed from the exit $/SF derivation and all downstream exports (XLS, OM, Teaser).
Exclusions are per-deal and per-session — they reset on page reload. When comps are excluded, the exit $/SF is recomputed using the same three-tier preference logic on the remaining pool.
Zone Eligibility
Eligible parcels are single-family-zoned and buildable. In-scope zones: A, RA, RE, RS, R1, RU, RZ, RW1, and LAND (vacant residential). All other zones are out of scope.
Hard Exclusions
Two automatic disqualifiers — no override:
Historic Resource — Parcel listed or eligible under LA HCM, HPOZ (contributing), or CA Register of Historical Resources. Cannot build new SFR on a contributing historic resource. Flagged ‘🏛 Historic — UNQUAL’ on the deal card and removed from the viable pool.
Open Space / Protected Area — Conservation easement or similar restriction on development rights.
Informational Flags (never exclusions)
🔥 VHFHSZ — Very High Fire Hazard Severity Zone. Flagged on the deal card as an insurance cost input — not a knockout. Burn-zone and Palisades-perimeter parcels are acquisition targets for new-build SFR; insurance cost realities are surfaced on the deal card.
🌊 Coastal Zone — May trigger CEQA / California Coastal Commission review. Flagged informational only.
? Zoning Unconfirmed — Zoning inferred from Redfin property type rather than confirmed via city API (affects Beverly Hills, WeHo, Culver City, Inglewood, Pasadena, Glendale, Burbank, Long Beach). Verify with the city before acting on these parcels.
Lot Type
Corner Lot — Parcel touches 2+ named streets (OSM). Corner setbacks may differ; check local code. Shown as a blue tag on the deal card.
Alley Lot — Rear/side alley access detected (OSM highway=service, service=alley). May affect utility easements and rear setbacks. Shown as a blue tag on the deal card.
Standard — Single street frontage, no alley. No tag shown (default).
Note: Classification from OpenStreetMap. Verify against assessor maps.
Site Flags
⚡ Power Lines — Overhead power infrastructure detected within 80m via OpenStreetMap. May affect rear/side setback requirements or require utility relocation. Shown as an amber tag on the deal card. Verify with utility company and local building dept.
🏛 Historic Zones — Toggles HPOZ (purple shaded areas) and HCM (purple dots) overlays across the full map. Listings within these boundaries are hard-excluded and flagged on the deal card.
What Off-Market Means Here
Direct acquisition from homeowners before a property is listed, at prices reflecting current residential use rather than new-build SFR exit potential. The spread between acquisition cost and a $1,000/SF+ new-build exit is only available before the market reprices.
How Discount is Estimated
Estimated market value is derived from LA County Assessor data (assessed land + improvement value), time-adjusted to current date using ZIP-level appreciation rates. Off-market discount = (Est. Market Value − Max Offer) ÷ Est. Market Value. Pins with insufficient data to compute a reliable estimate are ghosted.
Viability Gate
Off-market pins only appear when all of the following are met:
Spread > $150/SF
Net margin ≥ 25%
Lot efficiency > 70%
No active fire zone
Slope < 15%
Why This Matters
Direct-to-homeowner outreach and speed of close (no listing process, no competing bids) compress the acquisition cost below what a listed deal would clear. That compression is the structural return driver at the land line.