First commit of anything substantial on honest-cam. The shape of the project is a monorepo with Python for the data and AI pipelines and a TypeScript slot reserved for a future API and UI. The first real piece of code is a document reorganization engine that can take the prior management company's 958-PDF mess and sort it into a clean canonical layout without any manual fiddling.
What's in the box
- Monorepo scaffold.
packages/py/for all Python work (ingest, CLI, eventually portal); space carved out forpackages/ts/later. - Document reorganization engine —
propco reorg bamboo-house. Reads a YAML mapping file that specifies old-folder → new-canonical-folder rules, walks the inbox, and classifies every PDF. - SHA-256 idempotency. Every copied file is hashed; re-running the command is a no-op because existing destinations are detected and skipped. Duplicates in the source are flagged but not re-copied.
- Bamboo House property config —
properties/bamboo-house/property.yamlwith account numbers, utility providers, DBPR info extracted from filenames the old PM used.properties/bamboo-house/mapping.yamlholds the old→new folder rules. - CI — Ruff lint + pytest on every push. 32 unit tests covering classification, folder matching (including trailing-space gotchas in real-world folder names), hashing, and the dry-run / execute split.
First real-dataset run
Found 958 files in inbox
To copy: 941
Already exist: 0
Duplicates: 17
Uncategorized: 0
Copied 941 files.
Zero Uncategorized is the stat I care about most — it means the YAML mapping covers every folder the old PM actually used, no files falling through. Seventeen duplicate SHA-256s also seems plausible for a hand-managed archive.
Re-run, same inbox:
To copy: 0
Already exist: 958
Duplicates: 0
Idempotency proven. That matters because the reorganize step is the entry to the whole pipeline — every later stage (OCR, field extraction, Xero sync) will run on the output of this, and I need to be able to re-run without fear.
Key files
| File | Purpose |
|---|---|
packages/py/src/propco/ingest/reorganize.py | Core reorganization engine |
packages/py/src/propco/cli.py | Typer CLI entrypoint |
packages/py/src/propco/config.py | Settings, property registry, path resolution |
properties/bamboo-house/mapping.yaml | Old → new folder mapping rules |
properties/bamboo-house/property.yaml | Property metadata |
logs/bamboo-house/reorganize-2026-03-28.md | Audit log from first run |
What comes next
The next thing to land is the OCR pipeline that reads each categorized PDF and pulls structured fields out into JSON sidecars. Then a Xero sync so the extracted invoices actually turn into bookkeeping entries. The project is called "propco" for now — that name won't survive — but the shape is already clear: ingest, enrich, sync, report.