Skip to content

Hoydoon

A location-driven real-estate marketplace on iOS and Android.

Role
Mobile Engineer
Context
Quorvix, client product
Timeline
Jul 2024 to Jan 2026
Platforms
iOS, Android
Status
Live
Hoydoon Discover screen: map search with rent and price filters, and an alert toggle for the area.

Overview

Hoydoon connects people who want to buy or rent property with listings and the agents behind them, in Nigeria and Somalia. Users browse on a map, filter by type, bedrooms and price, save favourites, leave reviews and message agents directly.

The app speaks English, Somali and Arabic, takes payments through Paystack and Waafi depending on the market, verifies users before they list, and is published on the App Store and Google Play.

My role

I built the mobile app in React Native at Quorvix and wrote the large majority of its commits: listings and listing creation, map discovery, realtime chat, push notifications, payments, localisation, reviews, favourites and authentication, and I handled the store releases.

The challenge

A property search is only as good as its sense of place, and a marketplace is only as good as its conversations. The map has to stay readable when many listings share a location, and chat has to feel instant on phones that keep going to sleep.

  • Many listings can share the exact same coordinates.
  • Chat messages must appear instantly and exactly once.
  • Two markets with different payment providers and languages.

Architecture

  1. React Native app

    Expo, TypeScript

    Built by me

  2. Maps and location

    Google Maps, device GPS

    Third party

  3. Realtime client

    Socket.IO

    Built by me

  4. Listings, chat and payments API

    Hoydoon backend

    Built by the team

Engineering challenges

Chat messages that appear once

problem
Messages were duplicating in conversations, and it took many rounds of fixes to pin down.
constraint
A sent message should show immediately, before the server confirms it, but the server also broadcasts the saved message back to the room.
approach
Each outgoing message gets a temporary ID and shows as sending. When the server confirms it, the local copy is replaced by the server’s version using that ID, and socket listeners are removed when a chat screen closes so no handler runs twice.
result
Messages appear instantly and exactly once, even after leaving and re-entering a chat.

A map that stays readable

problem
Listings in the same building or estate stacked on top of each other as one unreadable marker.
constraint
Every listing still needs to be reachable from the map.
approach
Listings are grouped by coordinates into a single marker showing a count. Tapping a single listing opens it; tapping a group opens a list of what is there. Results load page by page as the user explores, and the user’s location is shown with a radius around it.
result
Dense areas stay legible, and no listing is hidden behind another.

One app, two markets

problem
Hoydoon serves Nigeria and Somalia.
constraint
Each market has its own payment provider and its own languages.
approach
Payments route through Paystack or Waafi depending on the user’s market, and every string goes through i18next with English, Somali and Arabic translations.
result
One codebase and one release serve both markets.

Outcome

  • iOS + Android

    published on both stores

  • 3

    languages: English, Somali, Arabic

  • 2

    markets with their own payment providers

Technologies

  • React Native
  • Expo
  • TypeScript
  • Google Maps
  • Socket.IO
  • TanStack Query
  • Zustand
  • i18next
  • Paystack
  • Waafi