laravel.md
Real estate brokerages: reporting dashboard using Laravel
Summary
A reporting dashboard blueprint for real estate brokerages built with Laravel on Ample. Domain schema: listings (reference, address, price, listing_type, publishing_status, agency_id): property listings with publishing status; agencies (name, license_number, region): agencies or branches; listing_media (listing_id, object_key, cdn_key, sort_order): public media per listing; reports (agency_id, period, object_key, generated_at): agency-scoped reports; exports (id, definition, object_key, row_count, generated_at, authorized_role): generated artifacts and who may download them. Public information: published listings with media, agent and agency profiles, buying and selling guides. Keep 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 Laravel: 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).
Infrastructure requirements
- Compute: verified (Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.)
- Postgres: verified (Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.)
- S3-compatible object storage: verified (Buckets are S3-compatible with issued credentials; PutObject and GetObject are verified by canary. Other S3 operations are not verified.)
Prerequisites
- A Laravel project (composer install --no-dev from composer.lock, then FrankenPHP serving public/ (php-server with the index.php fallback) reading PORT on the php-8.5 template)
- A PostgreSQL driver reading DATABASE_URL (auto-provisioned when omitted)
- Bucket credentials from
ample bucket createpassed as encrypted S3_* environment variables - A review of which real estate brokerages data classes may be handled at all; this blueprint models public information only
Exact tested configuration
- template:
php-8.5 - runtime:
php - size:
s-1vcpu-1gb - install:
composer install --no-dev --prefer-dist --no-interaction --no-progress --optimize-autoloader - start:
frankenphp php-server --listen :$PORT --root public
Steps
Model the real estate brokerages domain. Create the tables listings, agencies, listing_media, reports, exports. Property listings with publishing status live in listings; keep the sensitive classes (vendor and buyer identity, offers and negotiations, unpublished listings) out of this schema.
Workflow step 1. Model report definitions scoped to the agency
Workflow step 2. Generate report artifacts from queries and store them with metadata
Workflow step 3. Authorize downloads (401 without identity)
Workflow step 4. Deploy and verify an authorized export and the rejected anonymous request
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 --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...Verify. Run the pattern self-test(s) from the example (/p/generated-downloads) and your own acceptance checks for the real estate brokerages workflow.
ample logs <deployment_id> --kind build
Tested examples
- Laravel pattern fixture (tests/deploy-canaries/laravel-patterns): Verified generated downloads basis for this blueprint.
Success checks
- app responds on its public URL (
/on the live URL, expect ample canary laravel patterns) - generated-downloads self-test from the example (
/p/generated-downloadson the live URL, expect see the pattern fixture checks)
Limitations
- The technical basis (generated downloads on Laravel) was verified with the pattern fixture; the real estate brokerages schema and workflow are an original design for this blueprint and were not executed as a separate application.
- No health, financial, privacy or other compliance claim is made. Only listings with publishing_status = published appear publicly; offers and identities are out of scope.
- Public content and synthetic examples only until actual data-handling requirements have been reviewed.
- Verified on the php-8.5 template at s-1vcpu-1gb; region, request-duration limits and other sizes are unknown or unverified.
- Managed PostgreSQL 16 only; extensions, connection limits and backup or restore procedures are not verified.
- PutObject and GetObject with path-style addressing are verified; other S3 operations and CDN cache rules are not.
Cost estimate
Estimated 10.00 USD per month (size prices from pricing.toml at build revision a1b8c38919e59cd035ebabaced73cf84ece24371).
- app server x1
s-1vcpu-1gb: 5.00 USD - managed PostgreSQL database x1
s-1vcpu-1gb: 5.00 USD
Always-on monthly price of the tested sizes; apps and databases auto-pause when idle. Buckets are allocation-priced per quota and not included.