How I Built a Property Management Platform with AI Agents


I run the tech side of a property management brokerage in Santiago, Chile. Multiple users, everything from leases to billing to audits. The system that runs all of this — CPA25 — handles the entire operation.

This is not a story about how AI is magic. It’s about what actually works when you’re building production software with AI tools.

The 5 rewrites

CPA25 is the fifth version of the same system. Here’s the timeline:

  1. Google Sheets (~2016) — The classic. Worked until it didn’t. Formulas breaking, no audit trail, data everywhere
  2. PHP (CodeIgniter) (~2017) — My first “real” version. Got the job done but the codebase turned into spaghetti fast
  3. PHP v2 (~2018) — Tried to fix the mess. Made a different mess
  4. Django (~2020) — Better architecture, but the ecosystem felt heavy for what I needed
  5. Next.js + Supabase (2024-present) — CPA25. The one that stuck

Each rewrite taught me what the system actually needed. By the fifth time, I wasn’t guessing anymore.

What CPA25 does today

It’s not a side project. Real people use it every day:

  • Property management: leases, contracts, monthly billing
  • Financial operations: settlements, payment tracking, owner reports
  • Auditing: full activity log, IP tracking, change history
  • Email marketing: MailEagle — a custom email system built inside CPA25. 1,395 contacts, 21 API endpoints, 144 tests
  • Public website: property listings, maps, bilingual (ES/EN), powered by a separate Astro site that pulls from CPA25’s API

The stack: Next.js 16 + Supabase + NextAuth, 1,230+ tests across 5 services.

The AI setup that actually works

I use Claude Code as my main development tool. Not as autocomplete — as a team.

Here’s the setup: 6 agents running in parallel, each in its own git worktree.

AgentBranchRole
MainmainFeature development + coordination
Securityaudit/security-reviewSecurity audits, generates SECURITY_REPORT.md
Testingfeat/testingWrites E2E + unit tests, generates TEST_REPORT.md
Socketfeat/socket-realtimeWebSocket/real-time notifications
WhatsAppexp/whatsappExperimental WhatsApp bot with AI
Roadmapfeat/roadmapPlanning and feature specs

Each agent has its own CLAUDE.local.md with specific instructions. They don’t touch each other’s files. The main agent coordinates.

Why worktrees?

Git worktrees let you have multiple branches checked out simultaneously in different directories. Each agent works on its own copy of the repo without conflicts. When work is ready, I merge.

This means the security agent can audit the codebase while the testing agent writes tests while I’m building a feature. In parallel. No context switching.

What actually works

  • Security reviews catch real bugs. The agent found CSP issues, missing rate limiting on financial endpoints, and auth edge cases I missed
  • Test coverage grows without me writing tests. I build the feature, the testing agent writes the tests
  • Separation of concerns is enforced. Each agent has clear boundaries. No one steps on anyone’s toes

What doesn’t work

  • Coordination takes effort. I have to manually check reports and merge. There’s no automatic orchestration
  • Agents don’t understand business context deeply. They can review code but they can’t tell you if a feature is worth building
  • Long-running tasks can drift. If I don’t check an agent’s work for a few days, it might go in a direction I don’t want
  • It’s not free. Claude Code is $100/month. Worth it for me, but it’s a real cost

The boring parts that matter

The AI setup is the flashy part. But most of what makes CPA25 work is boring:

  • 5 rewrites of domain knowledge. I know the property management business inside out because I’ve modeled it 5 times
  • Real users giving real feedback. The team uses this daily. They don’t care about the tech — they care if it works
  • Incremental improvement. I’m not building from scratch anymore. I’m adding features to a system that already works

Takeaways

  1. Rewriting is not failure. Each version taught me something the previous one couldn’t. The fifth version works because the first four existed
  2. AI agents are tools, not teammates. They don’t have opinions about your product. They execute well within clear boundaries
  3. The business side matters more than the code. A system matters because people depend on it, not because of how many lines it has
  4. Worktrees + specialized agents is underrated. If you’re using AI for coding, try giving different tasks to different agents instead of asking one to do everything

I’m Eduardo, dev from Santiago, Chile. If you want to talk about AI-assisted development or building real products, find me on X.