page:blueprints:property management:reporting dashboard:django

Property Management: Reporting Dashboard Using Django

A reporting dashboard blueprint for property management built with Django on Ample.

Domain Schema:

Public Information: available rentals, office contacts, application process. Kept out of scope until handling is reviewed: tenant identity and payment history, inspection reports with personal data. Tenant data is personal and often regulated; only published listings and office-scoped reporting are modeled.

Technical Basis Verified on Django:

An export query rendered to a CSV artifact stored with metadata in a private bucket and returned only to an authorized caller (401 without token, export=ok rows=3).

Representative Queries:

Resource Requirements:

Infrastructure Requirements:

Prerequisites:

  1. A Django project (pip install into .ample/python from requirements.txt, then waitress serving project.wsgi from run.py reading PORT on the python-3.12 template)
  2. A PostgreSQL driver reading DATABASE_URL (auto-provisioned when omitted)
  3. Bucket credentials from ample bucket create passed as encrypted S3_* environment variables
  4. A review of which property management data classes may be handled at all; this blueprint models public information only

Tested Configuration:

Workflow Steps:

  1. Model the Property Management Domain: Create the tables listings, agencies, maintenance_vendors, reports, exports.
  2. Workflow Step 1: Model report definitions scoped to the agency.
  3. Workflow Step 2: Generate report artifacts from queries and store them with metadata.
  4. Workflow Step 3: Authorize downloads (401 without identity).
  5. Workflow Step 4: Deploy and verify an authorized export and the rejected anonymous request.
  6. Deploy: Run the synchronous deploy once and read the result.
  7. Verify: Run the pattern self-test(s) from the example (/p/generated-downloads) and your own acceptance checks for the property management workflow.

Cost Estimate:

Limitations:

Examples:

Success Checks: