TS Industry
Dating agencyLegacy migrationRedesign

Planet Romance

A complete redesign and technical overhaul of an established dating agency - migrating sixteen years of data from three legacy systems into one modern platform.

Role
Redesign · Development · Data migration
Type
Dating agency · B2C
Status
In production
16 years
of historical data migrated
3 → 1
legacy systems unified
2 domains
one codebase (men / women)
44,000
photos converted to WebP

// Starting point

Sixteen years of data across three different systems

The agency has run for sixteen years and went through three different apps in that time. Client data, their profiles and photos were scattered across systems that never really talked to each other - different formats, inconsistent records, duplicates. The brief was a complete redesign, a new UI and above all unifying this history into one modern platform without losing anything.

// Migration

Unify the history without losing a single profile

The hardest part wasn't visible: moving data from three legacy systems into a new schema. I dealt with inconsistencies, merging duplicate clients and archiving fields that didn't fit the new model but couldn't disappear.

Photos were a chapter of their own - I ran the entire photo bank through a compression pipeline (resizing, WebP conversion) and moved it to object storage. Old passwords are migrated lazily: on first login they're silently rehashed to a modern format, so nobody had to reset anything.

  • Migrating data from 3 systems, handling duplicates and inconsistencies
  • Converting the whole photo bank to WebP and object storage
  • Lazy migration of old passwords - no reset needed for users

// Architecture

Two domains, one app

The platform runs as one codebase across two domains - the men's and women's versions differ in the profiles shown and the language, but share the same codebase and admin. A client fills a wishlist of profiles and sends it to the agency as expressed interest; the agency then handles it in its own internal admin. Paid membership via Stripe unlocks a higher tier of service.

  • One codebase serving two separate domains (men / women)
  • Wishlist → expressed interest → agency's internal workflow
  • Membership and payments via Stripe
  • Page caching, photo optimization and observability via Sentry

// Stack

Next.jsTypeScriptReactPostgreSQLPrismaCloudflare R2StripeSentrynext-intlTailwind
Message on WhatsApp