Property manager
Raise a work order against a property, assign it to a contractor from the directory, and watch its status move without chasing anyone.
Property maintenance platform
A Kotlin Multiplatform maintenance workflow connecting property managers and the contractors who do the work — job assignment, proof of work, progress visibility, and manager approval in one system instead of four phone calls and a paper docket.

The problem
Context
A property manager looking after multiple sites is the hub of every maintenance job — taking the report, finding an available contractor, confirming the work happened, and answering for it if an owner asks later.
What kept breaking
Jobs lived in phone calls and messages, so nothing was searchable. Nobody could say which jobs were open right now without asking around. And "it's done" was a claim, not a record — which made invoice disputes unwinnable in either direction.
The real requirement
A shared state that all three parties read from and write to: the manager who raises the job, the contractor who does it, and the admin who oversees the whole portfolio.
Inside the app



The approach
Raise a work order against a property, assign it to a contractor from the directory, and watch its status move without chasing anyone.
Join by invite code, see assigned jobs, work through them, and attach proof of completion from the phone already in hand.
Oversee the full portfolio: every property, every contractor, every open job, plus billing and plan management.
Domain models, repositories, and business rules live in shared Kotlin so Android and iOS cannot disagree about what a job's status means.
Engineering highlights
Invite-code onboarding
Contractors are not customers — they should not self-register into someone else's portfolio. Access is granted by a manager-generated invite code, so the contractor directory stays a curated list rather than an open sign-up form.
Proof of work
Before and after records attach to the job itself, not to a chat thread. When an invoice is queried months later, the evidence is already sitting on the record rather than somewhere in a phone's camera roll.
Sync you can see
The dashboard states its own sync status rather than silently assuming it is current. A field worker with poor signal can tell the difference between "nothing to do" and "we have not heard from the server lately" — a distinction most apps quietly collapse.
Shared logic, native shells
Compose Multiplatform with Koin dependency injection and a local SQLDelight cache. Business rules are written once; each platform keeps its own native presentation.
Technology
More case studies
Three-app Kotlin Multiplatform delivery platform with dual video proof of delivery, expanding-radius dispatch, and server-enforced cash reconciliation.
Three-role snow removal management platform with live dispatch mapping, area measurement, photo verification, and Stripe escrow.
Every case study and product demo in one place, across logistics, field service, education, events, and SaaS.
Start the conversation
Job assignment, proof of work, and getting paid for it — if that runs on phone calls and a spreadsheet today, it is usually a strong candidate for the same treatment.