How to build a vendor portal for real estate brokerages with Django on Ample | Ample

The short version

A vendor portal blueprint for real estate brokerages built with Django on Ample. Domain schema:

Public information: published listings with media, agent and agency profiles, buying and selling guides. Kept out of scope until handling is reviewed: vendor and buyer identity, offers and negotiations, unpublished listings. Only listings with publishing_status = published appear publicly; offers and identities are out of scope. Technical basis verified on Django: a role-to-document access model with negative tests (401 without identity, 403 for the wrong role) and a private-bucket round-trip for the allowed role (private=ok).

What it needs

Before you start

How to do it

  1. Model the real estate brokerages domain
    Create the tables listings, agencies, listing_media, reports, document_access. Property listings with publishing status lives in listings; keep the sensitive classes (vendor and buyer identity, offers and negotiations, unpublished listings) out of this schema.

  2. Workflow step 1
    Model vendors scoped to the agency with roles

  3. Workflow step 2
    Authorize document access by vendor and role (401, 403 negative tests)

  4. Workflow step 3
    Store vendor documents in the private bucket

  5. Workflow step 4
    Deploy and verify the negative tests and an authorized download

  6. Deploy
    Run the synchronous deploy once and read the result. Re-running with no change is a no-op.

    ample deploy . --name <app-name> --public --start "python3 run.py" --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...
    
  7. Verify
    Run the pattern self-test(s) from the example (/p/private-document-library) and your own acceptance checks for the real estate brokerages workflow.

    ample logs <deployment_id> --kind build
    

Tested examples

How to know it worked

Cost estimate

Estimated 10.00 USD per month (size prices from pricing.toml at build revision ca0b484a7a9957c573a88d3a32dc603c3c10135a).

Upper-bound monthly price of the tested sizes. Buckets are allocation-priced per quota and not included.

Verification evidence

Execution binding

MCP tool ample_deploy (registry mcp:ample_deploy), schema hash 876465fce906da0c observed 2026-09-22T00:31:22.774679+00:00 at revision e6446ceea69b. Binding state at export: schema_changed. Required scopes: servers:write, databases:read, buckets:read.

Typed next actions

Actions describe possible next steps. They are typed data, not commands, and grant no permission. Public discovery never provisions anything; planning requires your own authenticated token and approval happens in your client.

Identifiers and status

Recipe page:blueprints:real-estate-brokerages:vendor-portal:django. Revision r1.

release published support verified execution blocked (schema_changed: live tool schema differs from the recorded binding)

Formats: HTML | Markdown | JSON contract