Project

Ravel: Visual Dating App

Role:

Lead Developer

Company:

OkCupid Labs

Ravel Visual Dating App

Ravel: A dating app for Instagrammers

Understanding the Challenge

Analyzing pain points in traditional dating apps

Understanding the Challenge

Back in 2013, dating apps were becoming mainstream, but something wasn't clicking. They were still these weird text-heavy experiences that felt nothing like how people actually connected in real life.

At OkCupid Labs, we kept hearing the same complaints from users: writing these forced profiles felt awkward, conversations started with cheesy pickup lines that went nowhere, and there was this constant pressure to be clever in your messages rather than just being yourself.

Meanwhile, Instagram was taking off. People were connecting through photos, starting genuine conversations based on shared interests, and it all felt much more natural. We'd hear things like, "When I see someone's photos, I get a much better sense of who they are than from reading a bio."

That's when it clicked. What if we created a dating app that leveraged this visual way of connecting? Instagram wasn't built for dating, but people were already using it that way informally. We saw an opportunity to blend social media behaviors with dating intentions in a more authentic way.

Identifying Core User Needs

Understanding user needs and market opportunities

Identifying Core User Needs

We talked to dozens of dating app users and social media enthusiasts to understand what was working and what wasn't in both spaces. Several patterns emerged quickly.

First, people desperately wanted visual expression. They felt text profiles boxed them in, while photos could show their personality, interests, and lifestyle in a more authentic way. A photo of someone rock climbing or cooking says more than listing "outdoors" and "cooking" as interests.

Second, conversation starters were a huge pain point. That dreaded "hey, what's up?" opener felt forced and awkward. People wanted natural ways to begin interactions based on genuine interest in something specific about the other person.

We also noticed an interesting gap between social platforms and dating apps. On Instagram, people were having casual, low-pressure interactions that sometimes developed into more, while dating apps felt high-pressure from the start. Users wanted something in between - a bridge from social to dating that didn't immediately put romantic pressure on every interaction.

Finally, control was critical. Women especially told us they wanted more say in who could message them, tired of being bombarded with unwanted advances on traditional platforms.

These insights became our north star as we started sketching out what would eventually become Ravel.

Project Constraints

Navigating technical and market constraints

Project Constraints

Building Ravel wasn't without its challenges. We were a small team with ambitious goals, working with technical limitations that shaped many of our decisions.

Mobile development was still evolving rapidly in 2013. Native iOS development meant Objective-C, which none of our team was particularly fluent in. We opted for RubyMotion, which let us write Ruby code that compiled to native iOS. This seemed like a perfect compromise at the time, giving us faster development cycles while still delivering native performance.

Or at least that was the theory. In practice, we ran into serious memory management issues that caused crashes for 10-20% of our users. Photo-heavy apps are memory intensive, and RubyMotion didn't give us the fine-grained control we needed. We spent weeks optimizing and rewriting key sections to improve stability.

Beyond technical challenges, we faced the classic onboarding dilemma: we needed enough information to create meaningful connections, but every extra step in signup reduced conversion rates. Finding that balance was a constant struggle.

And of course, we were entering an increasingly crowded market. Tinder was just starting to take off with their simple swiping mechanism. How could we differentiate while still feeling intuitive enough for users to understand immediately?

These constraints forced us to be creative and ruthless about priorities, focusing on core features that would make the biggest difference to users.

Research & Problem Definition

Deep dive into social and dating platform behaviors

Research & Problem Definition

Our research phase was eye-opening. We spent hours analyzing how people were already using Instagram in dating-adjacent ways, and the patterns were fascinating.

Users were creating genuine connections through comments on photos. A photo of someone at a concert might spark a conversation about music taste. A hiking picture could lead to recommendations for trails. These interactions felt natural because they started with shared interests rather than forced romantic intentions.

Hashtags emerged as a powerful tool. They created context and discoverability, helping people find others with similar interests. Someone might discover a potential connection through #surfing or #foodie tags rather than traditional dating criteria.

What made these interactions different from dating apps was the low-pressure starting point. Commenting on someone's coffee art photo is casual; sending a message on a dating app carries immediate romantic expectations. Yet these casual Instagram interactions sometimes evolved into more when mutual interest became apparent.

We synthesized these insights into a clear vision: create a photo-centric platform where connections start with genuine interest in shared activities, and romantic intentions could emerge organically rather than being forced from the beginning. The key ingredients would be visual profiles, hashtag-based discovery, and a consent-based messaging system that gave users control over who could initiate private conversations.

Core Interface Design

Designing a photo-centric dating experience

Core Interface Design

When it came to designing Ravel, we flipped the traditional dating app model on its head. Instead of starting with text profiles and adding photos as an afterthought, we put photos at the center of everything.

Users could pull in photos from Instagram, Facebook, or their camera roll to create their profile. No need to write lengthy self-descriptions or answer awkward personality questions. The photos spoke for themselves – showing hobbies, style, places visited, and general vibe.

The hashtag system became our secret sauce. Users could tag their photos with hashtags representing both the content (what's in the photo) and their interests. A picture of a hiking trail might be tagged with #hiking, #nature, and #colorado. These tags served dual purposes: they helped with discovery and created natural conversation starters.

But here's where things got really interesting: the consent-based messaging system. Instead of allowing anyone to message anyone (which inevitably leads to unwanted advances), we created a unique interaction model. You could only begin a private conversation if you submitted a hashtag on someone's photo and they accepted it, or if you upvoted a hashtag someone else had added and the photo owner accepted that.

This seemingly simple mechanism created profound changes in user behavior. Conversations began through genuine shared interest in content rather than generic pickup lines. "I see you like #rockclimbing, have you tried the new gym downtown?" feels much more authentic than "Hey, what's up?"

The result was a more natural way to start meaningful connections, mimicking how relationships often develop in the real world – through shared interests and activities.

Discovery Mechanisms

Building sophisticated discovery features

Discovery Mechanisms

With photos and hashtags as our foundation, we built discovery features that felt both powerful and natural.

The most straightforward approach was hashtag matching. If you tagged your photos with #hiking, #dogs, and #tacos, you could find others who shared those interests. But we went beyond simple matching to create a more nuanced discovery system.

We built algorithms that looked at patterns across all your hashtags to suggest potential connections. Someone who tagged photos with #surfing, #beach, and #sunset might be matched with someone using #oceanlife and #waves, even without exact tag matches. This helped users discover people with similar vibes rather than just identical interests.

The tag upvoting system created another interesting discovery mechanism. When browsing, you could either add new tags to photos you discovered or upvote existing hashtags that resonated with you. This served multiple purposes: it improved the quality of tagging (making discovery better for everyone), indicated specific interests to the photo owner, and could initiate conversations.

We balanced these sophisticated features with familiar interactions users already understood. For quick browsing, we incorporated simple swiping interactions similar to what Tinder was popularizing. This gave users multiple ways to discover – intentional searching by interest or casual browsing by general appeal.

The result was a vibrant ecosystem where each interaction improved the system for everyone. The more users tagged and upvoted, the better our matching and discovery mechanisms became.

Technical Implementation

Building with RubyMotion and Rails

Technical Implementation

Building Ravel presented some interesting technical challenges. As lead developer, I had to make technology choices that would allow our small team to move quickly without sacrificing quality.

We chose RubyMotion for the iOS app, which let us write Ruby code that compiled to native iOS. This was appealing since our team had strong Rails experience, and it promised faster development cycles than Objective-C (this was pre-Swift). The backend was a straightforward Rails API server that handled user data, connections, and discovery algorithms.

We also built a complementary web experience that allowed for profile sharing and viewing outside the app. This helped with viral growth, as users could share profiles via social media or messaging.

Integrating with Instagram and Facebook was crucial for our onboarding flow. Users could pull in existing photos and social connections, dramatically reducing the effort to create a compelling profile. This integration also helped with user verification, reducing fake profiles.

The technical challenge I underestimated was memory management. With RubyMotion, we didn't have the fine-grained control over memory that native Objective-C would have provided. In a photo-heavy app, this became a serious issue. Users with lots of high-resolution images would experience crashes as the app ran out of memory.

We spent weeks optimizing image loading, caching, and memory usage. We implemented progressive loading, downsized images when appropriate, and carefully managed the image lifecycle. These optimizations eventually reduced our crash rate to acceptable levels, but it was a painful lesson in the tradeoffs of using abstraction layers over native code.

Despite these challenges, we had a robust analytics instrumentation that gave us incredible insight into how people were using the app. This data-driven approach allowed us to continuously refine the experience based on actual usage patterns rather than assumptions.

Outcomes and Lessons

Project outcomes and key learnings

Outcomes and Lessons

Ravel represented a genuine innovation in the dating app space, creating more organic connections through shared visual interests rather than forced text interactions.

Our hashtag-based interaction model succeeded in providing authentic conversation starters. Instead of the dreaded "hey" opener, users were talking about specific interests they shared. The quality of initial conversations was noticeably higher than on traditional platforms, leading to more meaningful connections.

The technical balance we struck wasn't perfect. While RubyMotion allowed us to move quickly, the memory management challenges cost us in stability. I learned an important lesson about selecting technologies: sometimes the newest, shiniest tool has hidden costs that only become apparent at scale.

What surprised me most was how our instrumentation revealed unexpected user behaviors. We built features assuming certain usage patterns, only to discover users creating their own innovative ways to interact. The most successful features were often those with enough flexibility for users to adapt to their own needs.

The project taught me to balance innovation with familiarity. We pushed boundaries with our interaction model, but still incorporated enough familiar patterns that users weren't completely lost. Finding that sweet spot – where an app feels fresh and exciting but still intuitive – is incredibly difficult but essential for adoption.

While Ravel was eventually sunset as OkCupid Labs evolved its portfolio, many of the concepts we pioneered – visual-first profiles, interest-based discovery, and consent-based messaging – have since appeared in mainstream dating apps. The project was ahead of its time in recognizing that romantic connections often start with shared interests and authentic interactions rather than algorithmic matching or superficial swiping.

What sticks with me most from Ravel is how important it is to build products that mirror real human behavior. The most successful digital experiences don't create artificial interaction patterns – they amplify and enhance the natural ways people already connect with each other. That principle has guided my approach to product design ever since.