Changelog · Pulled from git history at build time
Every time the numbers moved.
Every update to the market data on this site is a git commit, and every meaningful change arrives as a reviewed pull request. This is the full audit trail — source-level, timestamped, unspun.
4 revisions on record
Methodology →
Revision Change
58a85ff
Apr 26, 2026
19:44
fix: audit all figures and claims — remove unsourced, align to market.json
Every dollar figure, percentage, and specific claim on the site now either cites a named primary source inline (NAI NP Dodge Q4 2025, CBRE Omaha/U.S. Q3 2025, Cushman Q4 2025, FRED) or is explicitly labeled a directional estimate. Unverifiable specifics are gone. market.json - Added CBRE U.S. Office Figures Q3 2025 as the cited source for the 19% national benchmark. - Dropped the "subtract $6-10/sf" FSG-to-NNN conversion rule-of-thumb from the rentNote. Reconciliations (aligned all pages to market.json) - 48.8M SF → 48.5M SF (NAI NP Dodge Q4 2025) across all pages. - West Omaha vacancy "5.5-6.2%" → "~5.5%". - Downtown vacancy "10-12%" → "~9%"; Class A rent "$20-26" → "$22-26"; Class B "$14-19/$14-18" → "$14-20". - Midtown "7-10%" → "~7%". Elkhorn "6-8%" → "~7%"; Class B "$14-20" → "$15-19". - "Metro average of roughly 8%" removed everywhere; replaced with NAI NP Dodge 7.3% + 7.3–10.6% broker-spread disclosure. - Quarter labels Q1 2026 → Q4 2025 · NAI NP Dodge · CBRE on all pages. - Hero labels "Class A NNN" → "Class A asking" (no cited lease convention). Unsourced specifics removed or softened - Cost-of-living "10% below national", "commute times under 25 minutes", specific drive times to Eppley, "I-680 in 10 minutes". - Parking "$75-150/mo" and "$50-150/mo" ranges. - TI allowance "$15-40/sf"; escalation "2-3% / CPI"; CAM cap "3-5%". - NNN expense breakdown ($2.50-4 taxes / $0.50-1 ins / $3-5 CAM) → replaced with structural "what it covers / primary driver" table. - Class A-to-C rent gap "$12-16/sf" → qualitative. - Tenant rep "saves 5-15%" → qualitative. - Coastal cost gap "40-60% below" / "$40-60+ NYC" → qualitative with pointer to current CBRE U.S. Office Figures. - Aksarben "75 acres"; Old Market "over 45 restaurants"; Upstream "14 Best of Omaha awards" / "110-year firehouse"; Elkhorn Public Schools "consistently ranked among Nebraska's best" — all softened. - ORBT "every 10-15 minutes" — now links to Metro Transit for schedule. Structural cleanup (judgment calls the user approved) - Fortune 500 claim → neutral "major companies headquartered in Omaha — Berkshire Hathaway, Union Pacific, Mutual of Omaha, Kiewit, FNBO". - Midtown/Aksarben sub-area rent table removed entirely (no broker publishes per-sub-area rent); UNMC, Blackstone, Midtown Crossing dollar callouts removed from body and FAQ. - Per-class vacancy columns (~5-6% / ~8-10% / ~12-15%) removed from all comparison tables on West Omaha, Elkhorn, Class A/B/C, and the pricing guide — no broker publishes per-class vacancy for Omaha. - Illustrative footnotes added under the homepage 5Y vacancy chart and Class A rent sparkline (only endpoints are cited). Millennium Plaza specifics left intact per user (first-party owner data). Made-with: Cursor
by Nathan Siahpush
adf003c
Apr 25, 2026
01:25
chore: port to Vercel + sync data to real Q4 2025 broker figures
Two related changes that came out of running the broker-refresh smoke test against live Claude + web search. Vercel port (the site is on Vercel, not Cloudflare Pages): - Replace functions/api/fred.ts (Cloudflare Pages Function) with src/pages/api/fred.ts (Astro endpoint, prerender=false). Same FRED proxy logic — bundles into a Vercel serverless function via the @astrojs/vercel adapter. - Add @astrojs/vercel@9 (Astro 5 compatible) and configure adapter in astro.config.mjs. - Remove wrangler.jsonc, .dev.vars references, @cloudflare/workers-types. - gitignore .vercel/ and .wrangler/ build directories. - .env.example: clarify ANTHROPIC_API_KEY belongs in GitHub Actions secrets, not Vercel env, and that GITHUB_TOKEN is auto-provisioned on workflow runs. Data integrity sync — replace inherited placeholder figures with real, cited Q4 2025 broker data (smoke test surfaced that the prior "Q1 2026" numbers had no matching public source): - Metro inventory: 48.8M → 48.5M SF (NAI NP Dodge Q4 2025) - Metro vacancy: 8.0% → 7.3% (NAI NP Dodge Q4 2025) — with note that brokers report 7.3-10.6% across different building universes - 2025 net absorption: +438K SF → +4,037 SF (Cushman Q4 2025 YTD). Two-orders-of-magnitude correction. Whole 2025 was essentially flat. - Class A rent: $22-30/sf NNN range → $27.17/sf FSG average (CBRE Q3 2025) — single cited point, correct unit, with a note on the FSG-vs-NNN distinction - Vacancy chart endpoint updated to Q4 2025 / 7.3% - Submarket-level figures kept as directional estimates with an explicit "submarketsProvenance" disclosure - Homepage prose paragraphs and stat strip rewritten to match the cited numbers; reference URLs added to meta.sources Methodology page additions: - "Why brokers disagree" section with a table of NAI NP Dodge / Colliers / CBRE figures and an explanation of building-universe definition - "Known limitations" section disclosing the three current gaps: unverified per-submarket figures, mixed FSG/NNN rent conventions, and approximate historical chart data Refresh script: - Add FORCE_REFRESH env var that bypasses the "is this newer?" guard so we can re-anchor stored data to current public sources even when our stored quarter is ahead of what's published. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
by notattheend99
884885e
Apr 24, 2026
23:46
feat: wire live data (FRED) and scheduled broker refresh
Phase 1 — live monthly FRED data on the ticker
- functions/api/fred.ts: Cloudflare Pages Function proxying
FRED series OMAH531UR (unemployment), OMAH531NA (nonfarm jobs),
OMAH531LF (labor force) for the Omaha-Council Bluffs MSA.
Hides FRED_API_KEY from the client; caches at edge for 1h.
- Header: ticker renders curated values server-side then
hydrates from /api/fred on load. Silent fallback to the
curated values if the fetch fails or key isn't set.
- methodology page copy updated to distinguish live-monthly
(FRED) from curated-quarterly (broker reports).
- .env.example with FRED_API_KEY, ANTHROPIC_API_KEY, GITHUB_TOKEN.
Phase 2 — scheduled broker-report refresh via GitHub Actions
- scripts/refresh-market-data.mjs: calls Claude Sonnet 4.6 with
the web_search server-side tool, finds the newest CBRE /
Cushman / NAI NP Dodge Omaha office reports, extracts
vacancy / rent / absorption, merges non-destructively into
src/data/market.json, rebuilds the ticker. Responds
{"noChange": true} when no newer quarterly report exists.
- .github/workflows/refresh-market-data.yml: weekly cron
(Sundays 14:00 UTC) + manual dispatch. Runs the script,
opens a PR via peter-evans/create-pull-request with the
diff, summary, and "needs-review" label. The PR history
becomes the audit trail.
- src/pages/changelog.astro: reads git log on
src/data/market.json at build time and renders the full
revision history — the transparency receipt.
- Footer + methodology cross-link to /changelog/.
Deploy requires three secrets: FRED_API_KEY (Cloudflare Pages
env), ANTHROPIC_API_KEY (GitHub Actions secret), and the default
GITHUB_TOKEN (automatic) for opening PRs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
by notattheend99
a35e8b1
Apr 24, 2026
23:39
feat: redesign site as Omaha Office Desk (Market Desk concept)
Repositions the site from "Your Guide to Office Space in Omaha" to "the real-time pulse on the Omaha office market." Full visual port across all 11 pages plus a new methodology page. - New palette: paper/ink-navy/signal-red/parchment (Tailwind v4 @theme tokens) - New typography: Inter + JetBrains Mono (for data/monospace labels) - New Header: scrolling ticker bar + brand mark + mono nav dropdowns with live submarket vacancy badges - New Footer: ink background, mono section heads, primary-source ledger row linking CBRE/Cushman/NAI NP Dodge/FRED; dropped "A Millennium Plaza property" attribution - Homepage: full Market Desk treatment — hero with live fact-sheet panel, oversized-numeral stat strip, submarket map + sortable list, 5y vacancy chart vs U.S. average, SEO essay retained - PageHero component: shared eyebrow/title/stat-chips pattern applied to 4 submarket pages, 3 guides, millennium plaza, contact, 404 - New /methodology/ page: explicit source attribution and update cadence — transparency as product - src/data/market.json: single source of truth for all market figures (header ticker, footer timestamp, homepage stats/submarkets/chart) - Restyled shared components: SubmarketCard, MarketStat, ComparisonTable, FAQSection, AmenityCard, AvailabilityCard, LastUpdated, CTASection - Preserved steel-* color aliases so existing utility classes map to the new palette during the port (ContactForm picks this up) - Kept 3 design-direction mockups under mockups/ as reference for the decision process Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
by notattheend99