Real estate
Maintenance requests for a property manager
Tenants report a maintenance problem with a photo from their phone. The property manager assigns it to a contractor, the contractor updates the status and uploads proof when done, and the tenant follows progress without calling. The landlord sees cost per property.
Automatically generated draft
Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.
Section 01 · What has to work
The entire lifecycle of a maintenance request, from a tenant's photo to a contractor's proof of completion, must be visible to all parties without anyone needing to place a phone call.
Section 03 · Screens
Every screen, and what it is for.
- ›Tenant: Report Issue — Tenant creates a new request with a photo. The photo upload must feel instant.
- ›Tenant: My Requests — Tenant views the live status of all their open and past requests. Status updates must appear instantly.
- ›Manager: Triage Dashboard — Manager sees new requests, assigns contractors, and reviews completed work. New requests must appear instantly.
- ›Contractor: My Jobs — Contractor sees assigned jobs, updates their status, and uploads proof of work. New assignments must appear instantly.
- ›Landlord: Portfolio Overview — Landlord views total maintenance costs aggregated by property and date range. Cost totals must be instant.
Anything not on this list is not in version one. That is what keeps a fixed price fixed.
Section 04 · The data model
What it stores, and who can read a row.
user
id uuid, email text, full_name text, role enum(tenant, manager, contractor, landlord), phone_number text
Access · User reads their own row. Manager reads their associated users.
property
id uuid, address text, landlord_id uuid, manager_id uuid
Access · Associated landlord, manager, and current tenant can read.
maintenance_request
id uuid, property_id uuid, reported_by_id uuid, assigned_to_id uuid, description text, status enum(new, assigned, in_progress, pending_approval, completed, closed), created_at timestamptz
Access · Associated tenant, manager, contractor, and landlord can read the row.
request_update
id uuid, request_id uuid, author_id uuid, comment text, photo_url text, created_at timestamptz
Access · Anyone who can read the parent request can read its updates.
invoice
id uuid, request_id uuid, contractor_id uuid, amount_cents int, description text, issued_at timestamptz, paid_at timestamptz
Access · Associated manager, contractor, and landlord can read the row.
Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.
Section 05 · States
New → Assigned → In Progress → Pending Approval → Completed | Closed(reason)
Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.
Section 06 · Where this breaks
What bites products like this one.
Large phone photos on poor tenant connectivity will cause upload failures and discourage reporting.
Perform image resizing and compression on the client's device before the upload begins.
A manager reassigns a job just as the original contractor marks it complete, creating data conflicts.
Use state-aware updates (e.g., `UPDATE ... WHERE status = 'assigned'`) to prevent illegal state transitions.
Access control flaws could expose landlord cost data to tenants or one contractor's jobs to another.
Enforce all access rules in the database using row-level security policies based on user role and relationships.
Section 08 · Deliberately left out
What version one does not do.
- ×In-app contractor payments — we will track invoices, but payment happens offline. Add when invoice volume justifies the integration overhead.
- ×Contractor scheduling and availability calendars — assignments are simple notifications. Add when managers need to optimize assignments across many jobs.
This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.
Still open
What we would ask before quoting.
- How are users (tenants, contractors, landlords) onboarded and associated with specific properties and property managers?
- Does a single landlord own all properties, or do we need to model multiple, distinct landlords?
- When a contractor submits proof and an invoice, who gives the final approval that the cost is accurate and work is satisfactory?
Your product, not this one
Get this written for what you are actually building.
Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.