AVIANCRE
A bird's-eye view of Providence commercial real estate, from 3D map to underwriting.
Live: https://aviancre.vercel.app
AVIANCRE puts Providence, RI on a 3D map and takes a property from first click to an
investment committee memo. Click any building to pull its public record (tax roll,
zoning, flood zone), then open a sample property or import a rent roll to underwrite it:
a lease-by-lease 10-year cash flow model, sensitivity grids, a max bid solved to a
target IRR, and an AI analyst memo written from the engine's output. It runs entirely in the browser: no backend, no accounts,
and an imported rent roll never leaves the user's machine.
Screenshots
Demo video: watch the 2-minute demo
What it does
- 3D map and public records. Click any building in Providence for its live record:
owner, land use, assessed value and taxes from the city's 2025 tax roll; year built,
building and land area, base zoning, overlay and historic districts and the parcel
outline from the city's parcel/zoning layer; flood zone and base flood elevation from
RIGIS's FEMA flood map.
- Address search. Type-ahead over every city parcel address, the sample properties
and imported deals; picking one flies there and opens its record.
- Citywide screening estimates. A map layer that prices every commercial parcel in
the city (about 3,100 of 4,800 lots) from public building data and the market
benchmarks and colors it by estimate ÷ 2025 assessed value relative to similar
properties (the median for its type). Click a parcel for the
NOI build beside its public record, or open the sortable, filterable screening list
to see where to look first. A screening estimate, not an appraisal.
- Filters. Asset type, size, occupancy, lease expiration, submarket, levered IRR and
max bid vs price, synced between map and list and shareable in the URL.
- Four persona views of the same property: Analyst, Broker, Developer and Investment.
- Underwriting engine. Commercial properties are modeled lease by lease, monthly:
escalations, renewal-probability rollover (downtime, free rent, TI, leasing
commissions), NNN / base-year / expense-stop recoveries, vacancy and credit loss,
debt, and a sale on normalized Year-11 NOI. Apartments are modeled unit by unit, with
loss to lease burning off at each roll, turnover costs and lease-up of vacant units.
An optional value-add plan renovates units as they roll and compares As-is with
Value-add at the same price.
Outputs include IRR (levered and unlevered), equity multiple, cash-on-cash, DSCR, debt
yield, WALT, NPV and plain-language warnings.
- Base / Downside / Upside scenarios. Run any property under three cases side by
side (rents, vacancy, exit cap, rollover and costs move together) and compare returns,
DSCR and max bid. Every case is a full engine run.
- T-12 import. Load a trailing-12 operating statement (CSV or Excel, mapped through a
screen) to replace the placeholder Year-1 expenses and other income with the
property's actuals, with a check of the T-12 against the model. T-12s stay in the
browser, like rent rolls.
- Live assumptions and saved cases. Edit any assumption and every figure updates.
Save edits as named assumption sets, switch between them, and export or import them as
files.
- Sensitivity grids and max bid. Exit cap × rent growth and price × exit cap grids,
every cell a full engine run. Max bid solves for the price that hits the target
levered IRR.
- Rent roll import. Load a rent roll from CSV or Excel. Yardi "Rent Roll with Lease
Charges" reports and plain apartment unit tables are converted automatically through a
mapping screen, checked against the file's own totals, and nothing is guessed
silently.
- AI analyst memo. A Claude Code skill runs the tests, exports the engine's results
as JSON, reviews a 12-point checklist and writes an investment committee memo, shown
in the app's Analyst memo tab. Every number in the memo is quoted from the engine;
the AI interprets, it doesn't calculate.
How it was validated
- Four independent Excel validations. The engine's output was matched to the cent against
separately built Excel models for:
- Atwells Retail Row (retail, NNN)
- Westminster Office Tower (office, base-year recoveries, vacant-suite lease-up)
- Fernhill Commons (apartments, unit by unit and month by month: renewals vs turnover,
loss to lease burning off, lease-up). The Fernhill model was built only from the written
inputs, rules and rent roll, and matched all 185 annual and 1,140 monthly values
(
docs/validation/).
- Fernhill Commons with the value-add plan on (renovations at each roll within the
pace, downtime, re-lease at market + premium, the reserve and its draws). Built only
from the written rules and inputs, it matched all 228 annual values, all 60
renovation schedule rows and every return metric
(
docs/validation/).
- Golden tests freeze all four results and check every cash-flow line in every year
within $1, plus price, loan, equity, sale proceeds, both IRRs, minimum DSCR and WALT
(Fernhill also checks its loan schedule by year to the cent, and every return metric;
the value-add test also checks every renovation schedule row).
They run at the assumption set each Excel model used (pinned in a validation fixture),
so the app's defaults can follow the market without breaking the match. They also run
after an assumption edit and reset, and after importing the same rent roll from CSV and
from Excel.
- 965 automated tests (Vitest) across the engine, sensitivity, max bid, rent roll
import and conversion, assumption sets, search, filters and the public-record clients.
Real market data
Market cap rates, vacancy and rents come from published Providence reports (NAR/CoStar,
Cushman & Wakefield) and debt rates from the 10-year Treasury plus lender spreads. Each
figure shows its source and date in the app and is labeled actual (ACT) or estimate
(EST), so an analyst can see what is data and what is judgment.
Data sources
| Data | Source |
|---|
| Tax roll (owner, land use, assessed value, taxes) | Providence Open Data, 2025 tax roll |
| Parcels, zoning, overlay and historic districts, building size | City of Providence ArcGIS Online, Parcel_Zoning_FL |
| Flood zone and base flood elevation | RIGIS, FEMA DFIRM Statewide Flood Hazard Areas 2022 |
| Basemap and 3D buildings | OpenStreetMap via OpenFreeMap |
| Neighborhoods (citywide estimates' submarkets) | City of Providence ArcGIS Online, Providence_Neighborhoods_(Polygon_Layer) |
| Office and shop tags (citywide estimates' office vs retail) | OpenStreetMap contributors via the Overpass API |
The app calls every source straight from the browser. The citywide estimates are the
exception: npm run citywide:refresh pulls the tax roll, parcel layer, neighborhoods
and OpenStreetMap tags once into a static snapshot (public/data/citywide/), and the
app loads that file when the layer is turned on. Coverage:
docs/citywide-coverage.md; method: docs/UNDERWRITING.md.
Sample data. The 11 sample properties sit on real Providence buildings, but their
names, tenants, rents and leases are fictional. Market cap rates, vacancy and office and
apartment rents are anchored to the NAR/CoStar Q1 2026 Providence-Warwick report and Cushman & Wakefield
MarketBeats, and loan rates to the 10-year Treasury plus CRED iQ spreads (Oct 2026); they
stay EST in the app with their source and date. Operating expenses and other
underwriting assumptions are rules of thumb, also EST. Public-record data is real.
Tech stack
React 19 · TypeScript (strict) · Vite 7 · Tailwind CSS v4 · MapLibre GL JS · Zustand ·
SheetJS · Vitest · Claude Code (AI analyst and rent roll skills) · deployed on Vercel
Run it locally
Requires Node.js 20.19+ (or 22+).
npm install
npm run dev # open the printed localhost URL
npm test # full test suite
More detail: docs/UNDERWRITING.md (engine, conventions,
validation) · ROADMAP.md · DEPLOY.md
Built by Henly Hiraldo · LinkedIn