Griffin Trygg
Get in touch

OperationsCorridor Property Management

MOR Dashboard & Investor Portal

Monthly operating report PDFs go in. A trailing-twelve portfolio view and an investor portal come out.

A circle of people seen from above, all looking at the same single sheet of paper

Why I built it

Monthly operating reports show up as PDFs in five different formats, depending on who manages the property and which accounting system they use. Owners, investors and lenders all want a trailing-twelve-month view, and each of them should only ever see their own properties. Before this, that meant somebody retyping numbers every month.

What it does

  • Upload a month's statements; they're parsed, reconciled, and surfaced as financials, occupancy, leases and CAM reconciliation.
  • Auto-detects five income statement formats: AppFolio, HAP/Section 8, Spectre columnar (industrial), RealPage budget comparison and Yardi net income.
  • Industrial rent roll, floor plans and CAM reconciliation renderer.
  • MOR Creator: per-property recipes that assemble the monthly deck from uploaded components.
  • A customizable board per user, and per-property grants for outside viewers.

How it works

One parser module handles every format, and both the dashboard build and the API read from it. There's no second copy to drift.

There's a reconciliation guard on the waterfall. NOI minus debt service, non-operating items, replacements and value-add has to equal net income within tolerance, or the figures don't publish. A bad parse shows up as a missing number, never a wrong one.

Staff sign in by email. Outside viewers get per-property grants, and every response is filtered on the server.

Calls I made

The repo only tracks folders I named

This project sits next to raw financials and QuickBooks backups, so the .gitignore is a whitelist. A new folder has to be added on purpose.

The schema fixes itself on deploy

A startup migrator adds any new model column, so a schema change ships without a separate migration step.