← Back to work

BrokerLoop

In Store Review

Replaces stale, unverified property portals with a mobile-first broker marketplace where every listing is admin-verified and auto-expires — submitted to Google Play and the App Store.

4
Apps
32K
Lines of code
80
REST endpoints
16
Mobile screens
01

The problem it solves

Indian property portals are drowning in listings that are expired, duplicated, or were never real in the first place. Seekers waste hours calling on flats that were rented out months ago; honest brokers get buried under the noise their dishonest competitors generate. Nobody in the chain trusts the inventory.

The root cause is structural: no portal enforces a lifecycle on a listing. Once posted, a listing lives forever — so the data rots by design. Fixing the trust problem means fixing the data model, not adding another report button.

02

What I built

A four-app platform — an Expo React Native mobile app for brokers and seekers, a Next.js admin dashboard, a TypeScript Express API, and a marketing site — built around one idea: listings are stateful objects with an enforced lifecycle. Every listing passes admin verification before going public, carries an expiry set at verification time (30 days for rent, 60 for sale), and is retired by cron the moment it lapses. Search runs on geospatial indexes; brokers get quota-based subscriptions; and the whole thing shipped through EAS production builds into both app stores — including surviving a real Apple review rejection.

Broker posts
(mobile)
DRAFTED →
UNVERIFIED
Admin
verifies
VERIFIED
+ expiry set
Seekers search
(geo-indexed)
Cron expires →
SOLD / EXPIRED
03

Key features

04

Tech stack

MobileExpo SDK 54 · React Native 0.81 · React 19 · expo-router · TanStack React Query · socket.io-client · expo-notifications
AdminNext.js (App Router) · React 19 · TypeScript · Tailwind CSS v4
BackendNode.js · Express · TypeScript · Socket.io · JWT · Twilio OTP · Swagger/OpenAPI · Winston
DatabaseMongoDB Atlas · Mongoose 8 · geospatial 2dsphere indexes
InfraCloudinary media pipeline · Firebase FCM + Expo push · EAS Build · Render · Vercel
05

Impact

4
Production apps
Mobile, admin, API, marketing site — one person, end to end
80
REST endpoints
Across 10 versioned routers, 8 data models
2
App stores
Submitted via EAS production builds
1
Apple rejection cleared
Guideline 5.1.1 — guest browsing + account deletion shipped
06

Decisions worth talking about

Fix the data model, not the moderation queue

Stale listings aren't a moderation problem, they're a schema problem. Making expiry a property of the listing itself — set at verification, enforced by cron — means the inventory cleans itself. The admin's job shrinks from policing everything forever to one decision per listing.

Quotas before payments

Brokers get subscription plans with listing quotas (rent/sale limits) tracked in the data model — but there's deliberately no payment gateway yet. Monetization mechanics are cheap to add later; retrofitting quota enforcement into a live marketplace is not. The plumbing shipped first.

What an Apple rejection teaches you

Apple rejected the first submission under Guideline 5.1.1 — the app demanded login before showing anything. The fix (guest browsing plus in-app account deletion) made the product better, not just compliant: seekers can now evaluate the inventory before committing an identity to it. Some constraints are good product managers.