Portfolio Map — the guide

What to say, what runs when, where every file lives. Generated 2026-07-09 from the real folder tree — not written by hand.

Three ideas explain the whole system. One master file holds every number, and the website's database is a copy of it. Copying is not automatic — that step is called publishing. Only you rebuild the site from the master — two robots refresh a few live numbers on their own, but neither can move a rent.

Say this to Claude

Nothing on this page runs anything. Every button copies text to your clipboard — that is all it does. The purple phrases copy what to say to Claude. The grey copy buttons next to a folder copy its full path. The black boxes copy a command to paste into a terminal. Reading this page is always safe.

Click any purple phrase to copy it, then paste it to Claude.

master file

Your working copy. One file on your computer, data\properties.json, that holds every number in the portfolio — every rent, every tenant, every square foot.

Robots update it. You edit it. Nobody else can see it.

LIVE SITE

What everyone else sees. portfolio.tuckerdevelopment.com — the dashboard Aaron, Teresa and Lindsey open.

It is a copy of the master file. The parts that matter — tenants, rents, lease terms, abstracts — only change when you publish.

Two robots do write here on their own, and both are SYNCED-tier: the 7:50 job pushes Henry & District apartment lease-up, and the sync refreshes GL spend and redeploys the page. Neither can touch a rent, a lease term or an abstract.

Think of it like a document you are drafting. The master file is the draft open on your desk. The live site is the printed copy you handed to the room. Editing the draft changes nothing in their hands until you print a new one. Publishing is printing.

So if someone says “the site is wrong,” the first question is not what broke — it is has it been published since the change? The two disagreeing is normal, not a bug.

master file Changes your draft. The site still shows the old numbers until you publish.
LIVE SITE Prints a new copy. Everyone sees it within seconds.
changes nothing Just looking. Nothing is written anywhere. Safe to run at 2am, twice, by accident.
files only Writes a document into Dropbox. Touches neither the draft nor the site.

Update the portfolio

master fileLIVE SITE~1 min
The everyday one. Files anything sitting in _INBOX, runs all six importers, checks the write-lock, publishes to the live site, re-pushes every lease abstract, then reports any new deal folder. If an importer tried to move a rent, a lease date, an option, a contact or a loan term, it stops and restores the master rather than publish.
changes nothing~30 sec
Does everything above except publish — then puts the master back exactly as it was. Nothing is kept. Use it when you have dropped a file you are not sure about and want to see what it would do first.
master file~30 sec
Files _INBOX, imports, audits the write-lock, and keeps the fresh data in the master — but never touches the live site. This is exactly what the 8:15 and 12:15 syncs run, which is why the site can sit a few hours behind the master by design.
LIVE SITE~1 min
The master is already right; just push it live. Skips the importers and the write-lock audit entirely. Use after I have hand-edited something — a rent, a contact, a new tenant.

Check on it

changes nothing~1 min
Broken connections, stale data, dropped updates — read-only. Catches a dead lease-folder link, a rent that no longer matches its schedule, and a LAR the site has not caught up to.
changes nothing~1 min
Any signed deal filed into an Executed Deals folder that nobody has abstracted or added to the portfolio yet. This is how Intuit and Charles Schwab surfaced.
changes nothing~1 min to report
First it only reports which links are dead — nothing is written. Repairing is a second, deliberate step (--apply), then a publish. Run it after a folder move: 45 links broke silently when South Loop and 900 West moved.

Email → portfolio

you decidedepends
Reads the tickets the poller staged out of Inbox\Claude and works them with you. AR and sales spreadsheets are already filed; contact forms, COIs and estoppels wait for your approval.
changes nothing15 min to capture
Captured as an instruction ticket within 15 minutes, day or night. Never executed unattended. The poller has nobody watching it, and an email sitting in a folder is not proof of who wrote it.

Leasing

master fileLIVE SITE~15 min
Reads the executed lease (documents prevail over any summary), abstracts it, adds the tenant, and clears the vacancy out of the leasing pipeline.
files only~10 min
Produces the 14-section .xlsx and the parsed JSON the site renders inline.
master fileLIVE SITE~5 min
Hand-keyed today — nothing imports leasing_json. Only District and Henry have live LARs; for everything else, email me the leasing status or just tell me.
master fileLIVE SITE~5 min
Returned form → Asana master list → portfolio. GATED: you see a diff before anything is written. A wrong billing contact misroutes an ACH pull.

Occasional

LIVE SITE~1 min
sync_lods.py, run by hand. LODs never change, so publishing preserves them rather than regenerating them.
master file~1 min
The change-detector on its own. Updates the master, never publishes.

What flows from where, when

You drop a filein _INBOX\ or the property's folder
The router reads the Yardi property code from inside the file. You never hunt for the right folder.
You drop an emailinto Outlook Inbox\Claude
Swept every 15 minutes, day or night. AR + sales spreadsheets land in _INBOX\. LARs file to District/Henry. Instructions become tickets.
8:15 AM & 12:15 PMthe scheduled sync
Snapshots the database first, routes _INBOX, runs every importer, audits the write-lock, updates the master — and stops. Emails you what changed, what's broken, what's stale.
You say refresh the portfoliothe only step that rebuilds the site
Publishes the master into the site's database and re-pushes every lease abstract. Tenants, rents, lease terms and abstracts only ever change here. ~1 minute.

The clock

WhenWhoWhat
07:46robotBack up the live database — before anything writes to it.
07:50robotPush Henry & District apartment lease-up straight to the live site — one of only two robots that can. SYNCED data only.
08:15robotDetect changes → update the master → email you what changed, what is broken, what is stale. Never rebuilds the site from the master.
09:00robotFile the Asana payroll invoice.
12:15robotSecond detection pass, for anything dropped after breakfast.
every 15 minrobotSweep Inbox\Claude. Runs 24/7 whenever the laptop is awake.
wheneveryouRefresh the portfolio. Everything staged goes live.

Laptop asleep? Nothing runs, and nothing is lost — the mail waits on the server and missed jobs catch up on wake. The live site is never published unattended.

Every field is one of three things

The test: could a wrong value here cause a mis-bill or a legal defect?

SYNCED · robots may write

A stale AR number is embarrassing. It does not invalidate a lease or misroute a payment.

AR aging · sales · NOI · recovery PSF · resi lease-up · as-of dates
GATED · you approve first

A source file exists, but the value must never apply itself. A wrong billing contact misroutes an ACH pull; a wrong notice address makes a default notice legally defective.

contacts · notice address · rent schedule · options · CAM PSF · loan terms · lease folder link
HAND-KEYED · only you

Judgment, not data. No source file exists — someone read a lease and formed a view.

watch notes · litigation flags · ownership · debt structure · lockbox code · LODs · LAR pipeline

Where every source lives

All under C:\Users\KateLawson\Tucker Development Dropbox. A means the flow is live; means the folder exists but nothing recent is in it.

The copy button puts the full Windows path on your clipboard — paste it into Explorer. It opens nothing.

Wheatland Marketplacewmp7 live / 12
Executed DealsTUCKER DEVELOPMENT\WHEATLAND MARKETPLACE\Leasing - WMP\Executed Deals17 tenant folders · touched 2015-03-25
AR agingTUCKER DEVELOPMENT\WHEATLAND MARKETPLACE\Leasing - WMP\AR Analytics - Current1 files · touched 2026-07-02
Sales reportsTUCKER DEVELOPMENT\WHEATLAND MARKETPLACE\Leasing - WMP\Sales Reports20 files · touched 2026-07-02
GL (YTD)TUCKER DEVELOPMENT\WHEATLAND MARKETPLACE\Leasing - WMP\GL Analytics - Current2 files · touched 2026-06-23
Broker LARsTUCKER DEVELOPMENT\WHEATLAND MARKETPLACE\Leasing - WMP\Broker Agreements and Status Reports2 files · newest 2016-09-01
Financial reportingTUCKER DEVELOPMENT\WHEATLAND MARKETPLACE\Accounting - WMP\Financial Reporting0 files
Huntington Shopping Centerhunt5 live / 9
Executed DealsTUCKER ACQUISITIONS\- OWNED ASSETS\HUNTINGTON\Leasing\Executed Deals15 tenant folders · touched 2026-06-22
AR agingTUCKER ACQUISITIONS\- OWNED ASSETS\HUNTINGTON\Leasing\Current AR1 files · touched 2026-07-09
Sales reportsTUCKER ACQUISITIONS\- OWNED ASSETS\HUNTINGTON\Leasing\Sales Reports0 files
GL (YTD)TUCKER ACQUISITIONS\- OWNED ASSETS\HUNTINGTON\Leasing\Current GL1 files · touched 2026-06-23
Broker LARsTUCKER ACQUISITIONS\- OWNED ASSETS\HUNTINGTON\Leasing\Broker Status Reports0 files
South Loop Marketplaceslm8 live / 11
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\SOUTH LOOP\Leasing\Executed Deals21 tenant folders · touched 2025-01-10
AR agingTUCKER ADVISORS\- MANAGED ASSETS\SOUTH LOOP\Leasing\AR Analytics - Current1 files · touched 2026-07-08
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\SOUTH LOOP\Leasing\Sales Reports18 files · touched 2026-07-06
GL (YTD)TUCKER ADVISORS\- MANAGED ASSETS\SOUTH LOOP\Leasing\GL Analytics - Current1 files · touched 2026-06-23
Broker LARsTUCKER ADVISORS\- MANAGED ASSETS\SOUTH LOOP\Leasing\Broker Status Reports0 files
Financial reportingTUCKER ADVISORS\- MANAGED ASSETS\SOUTH LOOP\Accounting\Financial Reporting0 files
900 West900w5 live / 9
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\900 WEST\Leasing\Executed Deals21 tenant folders · touched 2024-07-09
AR agingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\900 WEST\Leasing\AR Analytics - Current1 files · touched 2026-06-30
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\900 WEST\Leasing\Sales Reports11 files · touched 2026-07-06
GL (YTD)TUCKER ADVISORS\- MANAGED ASSETS\ASANA\900 WEST\Leasing\GL Analytics - Current1 files · touched 2026-06-23
Broker LARsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\900 WEST\Leasing\Brokerage Agreements and Status Reports\Office Status Reports10 files · newest 2017-06-01
Financial reportingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\900 WEST\Accounting\Financial Reporting0 files
The Henry at Harms Woodshenry4 live / 4
Executed DealsTUCKER DEVELOPMENT\THE HENRY\Leasing - The Henry\Executed Deals6 tenant folders
Broker LARsTUCKER DEVELOPMENT\THE HENRY\Leasing - The Henry\Broker Status Reports24 files · newest 2026-06-24
Resi weekly reportsTUCKER DEVELOPMENT\THE HENRY\Asset Management - The Henry\Weekly Reports52 files · newest 2026-07-05
District 1860district4 live / 4
Executed DealsTUCKER DEVELOPMENT\DISTRICT 1860\Leasing - District 1860\Executed Deals8 tenant folders · newest 2022-10-11
Broker LARsTUCKER DEVELOPMENT\DISTRICT 1860\Leasing - District 1860\Broker Agreements and Status Reports\Status Reports29 files · newest 2026-06-17
Resi weekly reportsTUCKER DEVELOPMENT\DISTRICT 1860\Asset Management - District 1860\Weekly Reports29 files · newest 2026-06-30
Eola Commonseola3 live / 8
Executed DealsTUCKER ACQUISITIONS\- OWNED ASSETS\EOLA COMMONS\Leasing\Executed Deals13 tenant folders · touched 2026-07-09
AR agingTUCKER ACQUISITIONS\- OWNED ASSETS\EOLA COMMONS\Leasing\Current AR1 files · touched 2026-07-07
Sales reportsTUCKER ACQUISITIONS\- OWNED ASSETS\EOLA COMMONS\Leasing\Sales Reports0 files
Broker LARsTUCKER ACQUISITIONS\- OWNED ASSETS\EOLA COMMONS\Leasing\Broker Status Reports0 files
1035 W Lake Stasana_1035lake3 live / 3
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1035 W LAKE\Leasing\Executed Deals3 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1035 W LAKE\Leasing\Sales Reports1 files · touched 2026-07-07
OnboardingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1035 W LAKE\Property Management\Onboarding\Tenants3 tenant folders
1115 W Fulton Stasana_1115fulton2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1115 W FULTON MKT\Leasing\Executed Deals3 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1115 W FULTON MKT\Leasing\Sales Reports1 files · touched 2026-07-07
1611-1617 N Damen Aveasana_1611damen3 live / 3
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1611-1617 N DAMEN\Leasing\Executed Deals4 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1611-1617 N DAMEN\Leasing\Sales Reports1 files · touched 2026-07-07
OnboardingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1611-1617 N DAMEN\Property Management\Onboarding\Tenants1 tenant folders
1627-1633 N Damen Aveasana_1627damen3 live / 3
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1627-1633 N DAMEN\Leasing\Executed Deals3 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1627-1633 N DAMEN\Leasing\Sales Reports1 files · touched 2026-07-07
OnboardingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1627-1633 N DAMEN\Property Management\Onboarding\Tenants2 tenant folders
1727-1731 N Damen Aveasana_1727damen2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1727-1731 N DAMEN\Leasing\Executed Deals1 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1727-1731 N DAMEN\Leasing\Sales Reports1 files · touched 2026-07-07
1927-1941 N Halsted Stasana_1927halsted2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1927-1941 N HALSTED\Leasing\Executed Deals4 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1927-1941 N HALSTED\Leasing\Sales Reports1 files · touched 2026-07-07
1947 N Halsted Stasana_1947halsted2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1947 N HALSTED\Leasing\Executed Deals1 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1947 N HALSTED\Leasing\Sales Reports1 files · touched 2026-07-07
1950-1954 N Halsted Stasana_1950halsted2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1950-1954 N HALSTED\Leasing\Executed Deals1 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1950-1954 N HALSTED\Leasing\Sales Reports1 files · touched 2026-07-07
1962 N Halsted Stasana_1962halsted2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1962 N HALSTED\Leasing\Executed Deals2 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\1962 N HALSTED\Leasing\Sales Reports1 files · touched 2026-07-07
312 N Carpenter Stasana_312carpenter2 live / 2
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\312 N CARPENTER\Leasing\Executed Deals2 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\312 N CARPENTER\Leasing\Sales Reports1 files · touched 2026-07-07
936 W Fulton Marketasana_936fulton3 live / 3
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\936 W FULTON MKT\Leasing\Executed Deals5 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\936 W FULTON MKT\Leasing\Sales Reports1 files · touched 2026-07-07
OnboardingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\936 W FULTON MKT\Property Management\Onboarding\Tenants1 tenant folders
939 W Fulton Stasana_939fulton3 live / 3
Executed DealsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\939 W FULTON MKT\Leasing\Executed Deals3 tenant folders
Sales reportsTUCKER ADVISORS\- MANAGED ASSETS\ASANA\939 W FULTON MKT\Leasing\Sales Reports1 files · touched 2026-07-07
OnboardingTUCKER ADVISORS\- MANAGED ASSETS\ASANA\939 W FULTON MKT\Property Management\Onboarding\Tenants1 tenant folders

Commands

Click a black box to copy the command. It is never executed — paste it into a terminal inside the Portfolio Map folder. Most of the time you can just say the phrase to Claude instead.

Refresh + publish
python refresh_portfolio.py
Import, audit, do NOT publish
python refresh_portfolio.py --no-publish
Read everything, change nothing
python refresh_portfolio.py --dry-run
Publish an already-correct master
python refresh_portfolio.py --publish-only
What's broken / stale / dropped
python scripts\audit_portfolio.py
New deal folders, dead links
python scripts\resolve_tenant_folders.py
Accept a folder you've handled
python scripts\resolve_tenant_folders.py --accept
Actually repair the dead links
python scripts\resolve_tenant_folders.py --apply
python refresh_portfolio.py --publish-only
See what a publish WOULD do
python cloudflare-infra\tucker_portfolio_cf\migration\generate_data_sql.py --dry
Rebuild this guide
python scripts\build_source_paths.py
python scripts\gen_portfolio_guide.py
Deploy the page itself
cd cloudflare-infra\tucker_portfolio_cf\pages
npx wrangler pages deploy . --project-name=tucker-portfolio-map --branch=main

The safety nets

Three things stand between a bad file and a broken site. The write-lock snapshots the master before the importers run and compares it afterwards — so even a brand-new importer nobody audited cannot quietly move a rent. The count gate refuses to publish if tenants or sales drop sharply. And after every publish the site reads back its own lease-abstract count and self-heals if any are missing.

If something does go wrong: every night's database snapshot sits in backups\\d1\\, and the master file is backed up before every single refresh.

Known gaps & traps

LARs are retyped by hand
Nothing imports leasing_json, so the leasing pipeline you see on the site is whatever a human last typed in. Only District 1860 (29 reports) and The Henry (24) have a live LAR flow. For every other property, email the leasing status into Inbox\Claude or just tell Claude. Right now the site shows Henry at May 27, while The Henry LAR_06.24.26.pdf has been sitting in Dropbox for two weeks.
Contacts take three manual hops
The chain is: returned contact form → Asana master list → portfolio. Nothing automates any of it, and propose_wmp_contacts.py only knows Wheatland. That is deliberate for now — a wrong billing contact misroutes an ACH pull — but it means a contact change is three separate steps.
Tenant ids are positional
Inserting one suite renumbers every tenant after it. That is why a publish has to delete and re-insert everything, and why notes, LOD buttons and the maintenance calendar must be captured and put back each time. It is the root cause behind most of the fragility on this page. Keying tenants on (property, suite) — a rule the database already enforces — would retire the whole class of bug.
Two websites share one database
The Portfolio Map and the Maintenance Hub are separate Cloudflare projects sitting on one D1 database. A portfolio rebuild can cascade into the hub's tables. The publish now refuses to run if it finds a table it does not know how to protect — but there are also two copies of [[catchall]].js, and both must be edited together.
Status codes lie
The site sits behind a login and falls back to the homepage, so a broken API can still answer “200 OK”. Check the body, not the code. And a correct deploy must print both Compiled Worker successfully and Uploading Functions bundle — without them the API is dead and the dashboard shows “No property data found.”