Skip to content

Maintenance

The Maintenance module is your work-order system: residents report issues, management triages and assigns them, technicians work them and upload proof-of-completion, and everyone has a clear audit trail.

What residents see

Residents have a Report a Problem flow:

  1. Pick a category (Plumbing, Electrical, AC, Pest, Structural, Cleaning, Security, Emergency, Other).
  2. Describe the issue. Add up to 5 photos.
  3. Pick a priority (Low, Medium, High, Urgent — Urgent escalates directly to management).
  4. Submit. Resident gets a ticket number.

After submission residents see: - Real-time status: Open → Acknowledged → In Progress → Awaiting Parts → Completed → Verified. - The technician's name and contact (when assigned). - Photos uploaded by the technician at each stage. - An estimated completion time, if management has set one. - A Rate this work prompt once the ticket is Verified.

What technicians see

Technicians (and contractors / artisans) see only the work assigned to them:

  • My queue — sorted by priority + age.
  • Each ticket has the resident's contact info, the issue description, photos, and a Notes field for status updates.
  • Update status — drop-down to move the ticket through the workflow.
  • Upload completion photo — required when marking Completed.
  • Request parts — moves the ticket to Awaiting Parts and pings management.

The Maintenance module works offline for technicians in basement mechanical rooms with no signal — status changes and photos sync once they're back online.

What facility admins do

Triage incoming tickets

The Open tab shows everything residents have just reported. From here:

  • Assign to a specific technician or artisan.
  • Re-categorize if the resident misclassified.
  • Bump priority (or downgrade if a resident over-classified everything as Urgent).
  • Add an internal note (residents don't see internal notes).
  • Set an SLA / target completion time.

SLA tracking

Settings → Maintenance → SLA Targets lets you set a target hours per (category, priority) combination — e.g.: - Emergency: 1 hour - Plumbing High: 4 hours - Cleaning Low: 48 hours

The dashboard shows tickets approaching or breaching SLA in red. Useful for end-of-month reports to the HOA committee.

Verification

Once a technician marks a ticket Completed, it sits in Awaiting Verification until either: - The resident confirms the work via the Rate this work prompt, or - 48 hours pass (auto-verifies, with a default 5-star rating).

You can manually verify a ticket if the resident is unresponsive but you've physically inspected the work.

Reports

The Reports tab gives you: - Tickets per category per month - Average resolution time - SLA adherence percentage - Top recurring issues (good for capital-planning) - Per-technician performance (tickets closed, average rating, time per ticket)

Photo storage

Each ticket can hold up to 10 photos (5 from the resident, 5 from the technician). Photos are stored encrypted and auto-archived after a configurable retention window (default 18 months). Settings → Maintenance → Photo retention controls this.

Categories explained

Category Typical issues
Plumbing Leaks, blockages, low pressure, water heater
Electrical Sockets, lighting, fans, breakers
AC A/C not cooling, noise, leaks
Pest Roaches, ants, mosquitoes, rodents
Structural Cracks, paint, doors, windows, locks
Cleaning Common-area cleaning misses
Security Gate issues, intercom faults, lighting outages
Emergency Fire, flood, structural collapse, gas leak — escalates immediately
Other Anything that doesn't fit the above

Tips

  • Photos are powerful evidence — encourage residents to attach them. A leaking shower with a photo gets resolved faster than one described in words.
  • Set realistic SLAs — if you can't actually hit a 1-hour Emergency target with your current crew, residents will lose faith in the number. Better to set 4 hours and consistently beat it.
  • Auto-verification at 48 hours is a feature, not a bug. Without it unresponsive residents keep tickets in limbo and skew your stats.
  • Connect Maintenance to Artisans — when an external contractor is assigned, they get a portal login (read/write only on their assigned tickets) and you don't have to relay messages.

Process flows

End-to-end procedures the maintenance team runs day-to-day. Steps are anchored to the actual UI labels.

Resident files a ticket

  1. Resident opens Maintenance+ Report an issue.
  2. Pick a category (Plumbing / Electrical / HVAC / Structural / Pest / Other) and an urgency (Routine / Soon / Urgent / Emergency).
  3. Free-text description + up to 4 photos / 1 short video. Optional: tag the unit area (kitchen / bathroom / balcony / common area).
  4. Submit — ticket lands in the mgmt triage queue with status New. Resident gets a confirmation email + a tracking number.

Triage + assign a ticket

  1. MaintenanceTriage filter (default: New).
  2. Open the ticket → review the description + photos.
  3. Action:
  4. Reject + close for non-issues (resident clarification, duplicate, out-of-scope) with a reason that's emailed back.
  5. Reassign category / urgency if the resident misclassified (e.g. RoutineUrgent for a real water leak).
  6. Assign to internal staff — pick from the staff roster; the staff member gets a push. Reception staff can also handle triage + assignment on facilities that grant them the maintenance module-role.
  7. Assign to artisan — picks from the Artisans module roster. The artisan picker hides suspended + blacklisted artisans (license expired or violation-threshold breach); the assign attempt against a blocked artisan returns ARTISAN_LICENSE_EXPIRED or ARTISAN_BLACKLISTED codes.
  8. Set the SLA target (default per category, mgmt can override). Status moves to Assigned — note: you cannot mark Assigned without specifying a technician (the form blocks save with INVALID_TRANSITION_NEEDS_ASSIGNEE).

Technician completes + uploads proof

  1. Assignee opens the ticket on their device (staff via the regular app, artisan via the vendor portal).
  2. Tap Mark in progress when starting work — surfaces in resident-facing status updates.
  3. After the work, + Add proof of completion — at least 1 photo of the resolved state, optional notes (parts used, follow-up needed).
  4. Tap Mark resolved — status moves to Awaiting verification; resident gets a push to confirm the fix.

Verify + close (auto-verification at 48 h)

  1. Resident opens the ticket → Confirm fix OR Reopen (with a reason).
  2. Confirm fix moves status to Closed + the SLA stops counting.
  3. Reopen puts the ticket back in front of mgmt with the resident's reason. Re-triage flows from there.
  4. If the resident doesn't respond within 48 h of Awaiting verification, the ticket auto-verifies + closes (configurable in Settings → Maintenance → Auto-verify after).

Resident cancels their own ticket

The reporter can pull their own ticket back before the work starts.

  1. Resident opens the ticket → Cancel ticket.
  2. Two cases depending on current status:
  3. Open (not yet assigned) — cancels free, no reason required.
  4. Assigned (technician picked but not yet started) — cancel requires a reason (typo / no longer needed / mistakenly reported / fixed it myself / other). The reason is emailed to the assigned technician so they don't show up to a no-op.
  5. Once In progress, the cancel button hides — at that point only mgmt can close the ticket (via Mark resolved or Reject).

Reception-role triage

Reception staff can handle the triage + assignment workflow for facilities that grant them the maintenance module-role (Settings → Users → role: reception with the maintenance module-role enabled). Reception users can:

  • Receive tickets from residents.
  • Triage + assign to staff / artisans.
  • Re-categorise + re-prioritise.

They CANNOT alter SLA targets, edit the SLA configuration, or configure photo retention — those stay mgmt-only. Useful for buildings where the reception desk is the first point of contact for resident issues.