35 new assertions in scripts/regression.mjs pinning the canonical mezz / refi / after-tax / cost-seg numbers within tolerance. /api/preset-check exposes the diagnostic snapshots; the regression suite asserts every IRR, MoIC, balance, tax figure, and verdict. A refactor that drifts the math fails that suite, which is run by hand against a candidate before a release.
What shipped, and when.
A day-by-day record of what landed in Underwrite, kept by hand. Page 22 of 23.
Want to verify? The six files the decision depends on are rendered from the live source at /methodology/engine.
Filter by engine, UI, AI, ops, marketing or fixes.
Monte Carlo, Deal Strength composite score, sensitivity curves, break-even cushions, risk-adjusted returns, tenant concentration, hotel ops overlay, GP coinvest sweep, debt sizing optimizer, NOI decomp, a below-NOI leasing-capex parser, and 15 more analytics. The day the memo went from 'pro forma + waterfall' to 'institutional IC packet.'
RETURNS sheet gains a full AFTER-TAX ECONOMICS block when the tax overlay is enabled: depreciable basis, annual depreciation, cost-seg breakdown if active, accumulated depreciation, exit cap-gain + recapture tax, pre-tax IRR vs after-tax IRR vs MoIC, tax drag, plus footnotes on NOL and state tax configuration.
- engine
Optional state-level tax rates (ordinary and cap gains) added flat to federal. Cap gains rate defaults to state ordinary when undefined since most states tax LTCG as ordinary. Closes the third remaining tax simplification on /methodology/beyond-phase-1.
Generate-with-AI button at the top of the IC memo. Claude drafts a 2-4 sentence IC opener in the voice of a senior MD, restates the engine's outputs in plain English, never recomputes. Auto-clears when the deal changes so the analyst can't end up with a stale summary describing different numbers.
Optional. Negative taxable income accumulates as NOL balance offsetting future positive income, capped at 80% of current-year income (post-TCJA federal default). Per-year breakdown surfaces nolBeginning / nolApplied / nolGenerated / nolEnding so the trail is auditable.
- marketing
Curated public day-by-day shipping log. Maintained by hand so each entry is something a CRE underwriter cares about, not raw git noise. Tagged by category (engine / ui / ai / ops / marketing / fix).
ali@getunderwrite.com is now a mailto: link, getunderwrite.com is now an https://getunderwrite.com link. /tool/compare migrated to the shared SiteNav + SiteFooter (slipped through the earlier nav consolidation).
After-tax engine extended to support cost-seg acceleration: 25% of building basis reclassified into short-life buckets (weighted-avg 7yr), optional Year-1 bonus depreciation at a rate the user enters, since the rate in force for a given year is not asserted by the product. Cuts tax drag by 50-150bps on a stabilized deal.
- marketing
Every shared /tool?d=... link unfurls on LinkedIn / iMessage / Slack with that specific deal's name, grade letter, project IRR, MoIC, and verdict as the preview card. Every shared deal becomes a marketing asset.
- engine
Optional pass-through after-tax economics: straight-line depreciation (27.5y residential / 39y commercial), interest expense deduction, capital gains and Section 1250 recapture at exit. Surfaces after-tax IRR, MoIC, and tax drag in the Returns Summary + a dedicated After-Tax Economics section.
- engine
When hold period exceeds the senior loan term, the engine now models the actual refi: pays off the maturing senior balloon, originates a new loan at refi-LTV × terminal asset value, distributes the cash-out (or requires cash-in) as a Year-N equity event. New loan amortizes through exit at user-specified rate.
Optional mezzanine tranche on top of senior with its own LTV, rate, amortization, term, and origination fee. Both balloons pay off at exit. Validation guards for combined LTV, mezz spread over senior, mezz term vs senior, and blended DSCR cliff. IC memo and Excel both surface the tranche split.
Five TypeScript engine files (finance, proforma, debt, sources-uses, waterfall) rendered live from disk on a public page. ~430 lines of pure arithmetic, with inline annotations on what each block does and doesn't do. The move only an honest tool can make.
Claude reviews the deal qualitatively: red flags by severity, 3-6 diligence questions an MD would ask, market context, one-line summary. Strictly outside the deterministic math path. Disabled when Confidential Mode is on.
Drop a broker IM PDF and Claude extracts the deal parameters natively. Every extracted value carries a verbatim source quote (click to highlight in the textarea for text-paste, plain quote for PDFs). 10MB cap, validates substring match server-side.