One-week buildJuly 2026 · 6 min read

How to Build a Maintenance Request App with AI

Small landlords and property managers run repairs out of text messages, and nothing has a status. A request app fixes one specific thing: every job has a state, a photo, and a timestamp, so nobody argues later about when a leak was reported. The build is a two-role app — tenant submits, manager triages — which means the interesting design decision is what each role can see, not the data model.

What a maintenance request app needs

  • Tenant submits a request with photos and an urgency level
  • Status pipeline: submitted, acknowledged, scheduled, done
  • Manager assigns a request to a contractor with a date
  • Threaded comments per request, visible to both sides
  • Push notification on every status change
  • Per-property history of all past requests

The screens

ScreenWhat it does
My RequestsTenant view — open requests with current status
New RequestCategory, description, photos, urgency, access notes
Request DetailTimeline, photos, comments, scheduled visit
InboxManager view — all requests across properties, filterable
AssignPick a contractor, set a date, add an internal note
PropertiesUnits, tenants, and per-unit request history

The data model

  • Property: address, unitLabel, managerId
  • Tenancy: propertyId, tenantUserId, startDate, endDate
  • Request: propertyId, tenantUserId, category, description, urgency, status, createdAt, accessNotes
  • RequestPhoto: requestId, uri, takenAt
  • Assignment: requestId, contractorName, contractorPhone, scheduledFor, internalNote
  • Comment: requestId, authorUserId, body, createdAt, visibleToTenant

The build prompt (copy this)

Paste this into ShipNative and it becomes a working React Native app with these screens, navigable in a live preview, in about two minutes:

A maintenance request app for small landlords and their tenants, with two roles. A tenant sees only their own unit: they submit a request with a category, description, photos, an urgency level, and notes about entry access, then track its status. A manager sees an inbox of every request across all properties, filterable by status and urgency, and can acknowledge a request, assign it to a contractor with a scheduled date, and add internal notes the tenant cannot see. Every request has a timeline showing each status change with a timestamp, and a comment thread where comments can be marked internal or visible to the tenant. Both sides get a push notification when the status changes. A Properties screen lists units with their current tenant and past request history. Screens: My Requests, New Request, Request Detail, Inbox, Assign, Properties. Needs accounts with a tenant and manager role.

Then iterate with small, screen-specific prompts (“make the primary button bigger”, “add an empty state”), preview on your own phone, and export the full Expo project whenever you want. The full method: how to build an app with AI.

How it makes money

Per-unit subscription billed to the landlord — roughly $1–3 per unit per month, with tenants always free. Charging tenants kills adoption instantly, and adoption on the tenant side is the entire value of the product. A free tier of one or two units gets solo landlords in the door.

Implementation and the revenue math for every model: how to make money from an app. When you’re ready to ship: App Store and Google Play publishing guides.

Build it now

The prompt above is free to run at shipnative.dev — working maintenance request app on your phone today, full code export, no credit card.

Frequently Asked Questions

How do tenants get into the app without a messy signup?

Invite codes per unit. The manager creates the unit and shares a short code or a link; the tenant installs the app, enters the code, and is bound to that unit with no address typing and no chance of attaching themselves to the wrong property. Expire the code once used, and let the manager regenerate it when a tenant moves out.

Does this need to handle emergencies?

It needs to be honest that it does not. An app is the wrong channel for a gas leak or a flood, and a tenant who waits on a push notification during a real emergency is a liability problem. Put a permanent line on the new-request screen giving the emergency phone number, and make the highest urgency level say "call, do not submit" rather than pretending the queue is fast enough.

How to Build a Habit Tracker App

Build a habit tracker app in an afternoon with AI — screens, streak logic, reminders, and …

See build plan →

How to Build a Workout Tracker App

Build a workout tracker app with AI — exercise logging, routines, progress charts, and res…

See build plan →

Ship a real React Native app today

Describe, preview, and export Expo code — free to start.

Build with ShipNative →