Case study · Home services

GharKo Sathi

On-demand home services in Kathmandu with KYC-verified professionals, escrow-held payments and a dispute process that both sides can see. Customer app, partner app and an operations console, live on iOS and Android.

6services
ID verifiedKYC
escrowpayments
iOS · Android · webplatforms
gharkosewa.com
GharKo Sathi
The problem

Trust was the product.

Booking a plumber or a mason in Kathmandu usually means a phone number from a neighbour and a cash negotiation at the door. If the work is bad, there is no record, no recourse and no way to check who entered the house.

The product had to solve trust before it could solve scheduling: prove who the professional is, hold the money until the job is accepted, and give both sides a paper trail when something goes wrong.

What we built

Two apps, one operations console.

  • Customer flow: service selection, transparent estimate, KYC-matched professional, live job tracking and escrow release on completion.
  • Partner app: onboarding with document capture, KYC review states, job offers, earnings and payout history.
  • Operations console: KYC queue, live jobs, dispute dashboard, refunds and city/service configuration.
  • Dispute path with evidence upload, a decision record and an audit trail attached to the job.
Architecture

How it is put together

customer app (Flutter)        partner app (Flutter)
        │                              │
        └────────── HTTPS ─────────────┘
                       │
              NestJS API (REST, JWT + server-side sessions)
                 │            │              │
           PostgreSQL     payment rails    document store
          (Prisma ORM)   eSewa / Khalti    (KYC, private)
                 │
        operations console (React)
                 │
        notifications: SMS + push

Stack

FlutterReactNestJSPostgreSQLPrismaeSewaKhaltiSMS/OTPDocker

Security and money

  • KYC documents are stored outside the public mount and served only through authenticated, authorised endpoints.
  • Payments are confirmed server-to-server with the provider before a job is marked paid; the client never decides the amount.
  • Sensitive account actions (phone change, payout details, account deletion) require step-up reauthentication.
  • Escrow state and dispute decisions are recorded as immutable events, not mutable flags.
Screens

Product surfaces

Marketing site: service catalogue, trust process and partner onboarding
Marketing site: service catalogue, trust process and partner onboarding
Similar work

Building something in this category?

We can walk you through the architecture, the payment integration and the failure cases on a call, including the parts that were hard.