Lease management app scaling
Lease management app scaling and launch checklist
A lease management app stays fast by paginating every list, indexing the main questions, and deferring heavy work until a measured trigger fires. At launch, apply 5 rules, watch 7 signals and hold the performance targets below.
Last checked
Rules to apply at launch
- Pagination: Rent roll, ledger, work order and audit lists use keyset pagination on (date, id) with indexed filters; no OFFSET.
- Caching: Portfolio summaries (occupancy, arrears) are rolled up daily and cached per org; tenant and owner pages read their own rows without shared caches.
- Rate limits: Tenant request forms, uploads and payment initiation are rate limited per user and IP; public listings are rate limited per IP.
- Storage: Photos and documents use presigned PUT into private buckets, are resized on a worker, stored under non-guessable keys and served by signed URLs.
- Data growth: audit_log and payments are partitioned by month when they exceed 20M rows; locked statements and inspection reports become read-only.
Performance targets
| What to measure | Target |
|---|---|
| Rent roll (5,000 units) | p95 < 600 ms from rollup tables |
| Tenant portal page | p95 < 300 ms |
| Monthly charge generation (10k leases) | < 60 s asynchronous |
| Owner statement close (200 properties) | < 90 s asynchronous |
What to watch
- Metric arrears total by age: by portfolio and age bucket.
- Metric work order age: open work orders by priority.
- Log financial audit log: request id, actor, lease id, action; personal fields excluded.
- Trace rent payment trace: checkout, webhook, allocation, receipt.
- Slo charge generation correctness: zero duplicate or missing monthly charges per lease.
- Alert unallocated payments: payments unallocated beyond one day.
- Alert audit chain break: any verification failure pages immediately.
Recurring work
- generate_charges: runs cron daily. Guard: idempotent via unique (lease, kind, period); reads the lease version in force; skips ended leases.
- rent_reminders_and_late_fees: runs cron daily. Guard: one notice per (charge, step); late fees applied once per charge and only per the lease terms.
- lease_expiry_alerts: runs cron daily. Guard: one alert per (lease, threshold).
- close_owner_statements: runs cron monthly and manual. Guard: locks the period, refuses if unallocated payments exist, stores a checksum.
- scan_uploads: runs queue (jobs) on upload. Guard: type and size caps, no read until clean.
- compliance_certificate_alerts: runs cron daily. Guard: one alert per (property, certificate, threshold).
Add when the numbers say so
- Read replicas: Portfolio analytics and owner exports run on a read replica when primary CPU > 60% sustained.
Deferred until it is needed
| Deferred | Adopt it when |
|---|---|
| Public listings and applicant screening | customers manage vacancy marketing in-app. |
| Accounting export to a GL | customer requires double-entry books. |
| IoT and smart-building integration | facility customers with building systems. |
| Read replica for analytics | primary CPU > 60% sustained. |
On Forge64
Forge64 matches your description to one of 25 reference architectures, writes the plan and data model into the project, generates the app, and runs a quality gate over the code before you see it. Each app gets its own Postgres database and sign-in with no per-user fee. Hosting on Forge Cloud and Forge Payments are rolling out.
Every metered resource on Forge64 has a hard cap, so a traffic spike stops at your limit instead of becoming a surprise bill. This is a reference design for the category, not a promise that every item is generated today. Built-ins such as background jobs, file uploads and search are rolling out; email sent from your app is coming soon, so anything here that needs it is something you add yourself for now.
FAQ
- When should I worry about scale for a lease management app?
- Not before a measured trigger fires. For example, for "Public listings and applicant screening": customers manage vacancy marketing in-app.
- What performance targets should a lease management app aim for?
- Rent roll (5,000 units): p95 < 600 ms from rollup tables. Tenant portal page: p95 < 300 ms. Monthly charge generation (10k leases): < 60 s asynchronous.
- Does Forge64 cap my usage costs?
- Yes. Every metered resource has a hard cap, and paid plans add an overage spend cap that you set.
Build your app with Forge64
One prompt to a running app with auth, database, hosting and payments. Start free, no credit card required.
Start building for free