RBL Dating Platform
Lead Engineer · RBL Matchmaking LLC · 2024 · Shipped
Node.jsExpress.JsPostgreSQLReact NativeReactiOSAndroid
RBL is a dating platform that had been running since 2015 on PHP and MySQL, with 170,000 users, when I was brought in early in 2024 to add features. Two of them were not possible on the existing system. Location matching compared city names inferred from IP addresses, so "people within 50 km" could not be expressed. And the schema was normalised to the point that reading one profile joined several tables. I made the case that this was a rewrite, not a refactor, and got it.
The new stack is Node.js with Express, PostgreSQL with PostGIS for real geospatial queries, and a flatter schema built for reads. The mobile client moved to a current React Native codebase and the admin panel was rebuilt in React. The rebuild took about three months.
The migration could not stop the product. I put a dual-write proxy in front of both backends: every write from the legacy app was validated, transformed into the new schema, written to the new backend, then transformed back and forwarded to PHP. A background job backfilled history. Both systems stayed in sync, so a user on the old app could chat with a user on the new one, and the PHP server was shut down only once adoption crossed a safe threshold. No downtime, and nobody was forced to update.
After launch the swipe endpoint climbed to six seconds under load, because matching ran the full geo and compatibility scoring on demand. I moved it to precomputed batches: a background job prepares each user's next matches, Redis holds them, and the API reads from cache. Response times went from seconds to milliseconds. Alongside that I built the image verification flow that reduces fake profiles.
The platform now serves more than 200,000 users with radius-based matching on a schema that does not need ten joins to read a profile. The full account is in How I migrated 170k users from PHP to Node.js without stopping the world.
