Griffin Trygg
Get in touch

OperationsCorridor Property Management

Corridor PM Dashboard

The weekly property meeting in one place: leasing, make-ready, capital projects, delinquency and the owner call.

A house in cross-section, crews on scaffolding tending different rooms, one room lit

Why I built it

Our weekly property-management meeting covered capital plans, delinquency, vacancies, unit pricing and make-ready status, and every one of those lived in a different spreadsheet kept by a different person. The first twenty minutes of every meeting went to figuring out whose numbers were right. I built this so the meeting could start with the numbers instead of an argument about them.

What it does

  • Each property's weekly numbers in one place: occupancy, pre-leasing, delinquency, collections, and units at risk of sitting vacant.
  • A weekly report per property: leasing funnel, expirations and renewals, days vacant and estimated lost rent, delinquency, market rent schedule, and a running commentary log.
  • The weekly owner call runs from a fixed agenda, and each call snapshots the key numbers so week-over-week comparisons are fair.
  • Meeting notes come in from Granola and their next steps become tracked tasks. The tool proposes which are new, already open or done, and a person confirms.
  • Claude reads meeting notes to suggest capital projects, and reads contractor bid sheets (PDF or Excel) into comparison tables.
  • Capital projects tracked by property: budget vs. spend, percent complete, dated notes, photos and competing bids, checked against the general ledger.
  • A 14-step make-ready board from move-out inspection to move-in, plus per-unit inventory.
  • Market comps from the weekly rent survey, with week-over-week moves in rents, concessions and fees.
  • A shared calendar, a searchable library of SOPs and manuals, and access by role: admins see the portfolio, property managers see their own properties.

How it works

A FastAPI backend over Postgres owns the data. There are more than forty Alembic migrations in the repo, and nearly every one is a meeting where somebody asked for one more thing. The frontend is Next.js, one set of tabs per property.

AppFolio is pulled read-only across thirteen reports, with manual uploads as a backup. When we took over properties from a prior manager, their MRI exports, the owner's Google Sheet and some old tracker workbooks all imported into the same tables. A property onboarded mid-year looks like every other property.

Granola meeting notes sync every thirty minutes and the calendar feeds every fifteen. Migrations run on deploy.

Calls I made

Every screen says where its data came from

If a property's numbers still come from the prior manager's export, there's a banner saying so with the as-of date. I didn't want anyone reading last month's file as this week's numbers.

Claude suggests, somebody confirms

Task updates pulled from meeting notes and suggested capital projects sit as drafts until a person accepts them. Nothing changes on its own.

Imports are safe to run twice

Every importer defaults to a dry run. Onboarding a property is a step I can repeat, not a cleanup I have to get right the first time.