LIVE
OMA OFFICE 7.3% ▼ vs nat'l −1170bps WEST OMA ~5.5% estimate DTOWN ~9.0% estimate MIDTOWN ~7.0% estimate ELKHORN ~7.0% estimate CLASS A FSG $27.17/sf ▲ CBRE YoY +2.3% YTD ABSORPTION +4K SF essentially flat OMA METRO JOBS OMA UNEMPLOYMENT OMA LABOR FORCE OMA OFFICE 7.3% ▼ vs nat'l −1170bps WEST OMA ~5.5% estimate DTOWN ~9.0% estimate MIDTOWN ~7.0% estimate ELKHORN ~7.0% estimate CLASS A FSG $27.17/sf ▲ CBRE YoY +2.3% YTD ABSORPTION +4K SF essentially flat OMA METRO JOBS OMA UNEMPLOYMENT OMA LABOR FORCE
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
Next step

Looking at a lease?

Tell us the size, timeline, and corridor. We'll match you to available suites and a tenant-rep broker who knows the submarket.

Tour request · 3 steps ● ~24hr response
01 · Space needs
Size, timeline
02 · Type
Class, corridor
03 · Contact
We follow up
Request a tour

Or reach NRS Properties directly