Like and Paid Actions Colliding in the Same Interface
Free likes and paid direct requests shared the same action area, causing confusion, accidental taps, and unintended credit usage.
Case Study
A cross-platform dating app that replaces the mutual-match wait with a credit-powered direct request, so a conversation can start the moment a user wants it to, not whenever the algorithm allows.
Making Paid Access and Free Interaction Coexist in One Interface
Free likes and paid direct requests shared the same action area, causing confusion, accidental taps, and unintended credit usage.
Users had no way to distinguish genuine interest from casual swiping, making meaningful requests difficult to communicate.
The app needed fast, reliable messaging with real-time delivery, presence, typing, and delivery status.
Credit packs and subscriptions had to stay accurate across both App Store and Google Play.
The app needed to surface relevant, trustworthy matches using interests and location from the start.
iOS and Android needed a consistent experience and synchronized releases without separate native teams.
The feature the whole product is built around. Instead of liking and waiting, a user spends a credit and sends a message request directly to the person they want to talk to. Because a credit has real cost, the request carries information the recipient can read: this person meant it. Packs are sized to actual usage rather than arbitrary tiers, so the cost of starting a conversation stays legible.
Once a request is accepted, the conversation has to feel like a conversation. A persistent socket connection replaced polling entirely, so messages, presence and typing state move in real time and the layer is built for mobile reality, where connections drop in lifts, on trains, and between cells.
Two stores, two purchase types, one wallet. Consumable credit packs and recurring memberships were built on a single entitlement engine with server-side receipt validation, so the user's balance is the same number whether they signed in on an iPhone or an Android device and renewals, expiries and failures resolve without anyone at WeAmor touching them.
Discovery was built to work from a standing start. Rather than waiting on months of behavioural data, matching weights shared interests, location proximity and recent activity — with preferences the user sets explicitly rather than ones the system infers. Verification and moderation run underneath it, because a direct-request model only works if the profiles on the other side are real.
50K+
Live on Google Play and the App Store from a single Flutter codebase.
3×
Direct requests opened conversations a match-gated flow would never have produced.
90%
Separating free and paid actions in the backend and UI removed the mis-tap problem.
2
iOS and Android shipped and maintained in parity, without a second native team.
In our world, there's no such thing as having too many clients