Search articles by title

Filter articles by category

This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
Showing 0 results
of 0 items.
highlight
Reset
Company Updates

Privacy at the Core of Grindr’s gAI Future

We updated our privacy policy. Here’s what that means for you.
7
min. read

Grindr is becoming an AI-first company. That means a faster, smarter, more personalized app that helps you connect with less effort and makes every conversation count.

We’re building this future with gAI (pronounced “gay-eye”), our proprietary AI technology designed around the unique needs, context, and culture of our community.

Our first AI-powered product, A-List, is already proving what this future can look like on Grindr. Powered by gAI, it helps our most engaged users cut through the noise by surfacing their most relevant chats and giving quick summaries so they can pick up right where they left off. Early feedback has called it our “best new feature,” and it’s only the beginning. 

In building these new features, we want to make sure you both know how they work and have control over whether and how they use your data. That’s why we’ve updated our Privacy Policy to share where AI will be used in the app, what information powers it (and what doesn’t), and the choices you can make about your data.

Beyond our Privacy Policy, as we roll out new AI features we’re also providing more plain-language notices and explanations, as well as new user controls over how your data is used. Your privacy isn’t an afterthought. It’s core to how we build Grindr.

The Key Points:

  • Simple explanations of when, where, and how the Grindr app uses AI. This includes powering features like A-List’s chat summaries, reconnection reminders, and personalized recommendations.
  • Opt out of AI-powered features at any time. Open the side drawer, tap Safety & Privacy Center > Privacy > Privacy Settings and then make your selections in “AI Technology Controls.”
  • Control how your messages are used. If AI features are enabled, your messages may be processed to deliver summaries or prompts. They are not used to train AI unless you’ve explicitly opted in.
  • Benefits for subscribers and free users. Most AI-powered features are available directly to subscribers, but free users may benefit through improved visibility and/or smarter connection opportunities.

What Stays the Same:

  • Sensitive health data is off limits. We never use sensitive health-related data such as HIV status, vaccine info, or poz tags for AI, advertising, or Grindr marketing.
  • Opt-in for training models. We will only use your sensitive personal information (sexual preferences, chat data, or certain tags/tribes) for AI training if you give us your explicit, separate permission. Open the side drawer, tap Safety & Privacy Center > Privacy > Privacy Settings and then make your selections in “AI Technology Controls”.
  • Trusted partners, strict rules. When we work with external AI providers, they are bound by data processing agreements that strictly limit how information can be used. These agreements ensure providers act only on our instructions, apply strong safeguards, and do not repurpose your information for their own purposes.
  • You’re in control. If you opt out of AI training, your data will no longer be used for this purpose from that point forward. To learn more about deleting your historical data, you can submit a request through our Privacy Center.

What You Can Expect from Us:

As we introduce new AI features, we’ll continue updating our policies. What won’t change are our values:

  • Transparency: clear, jargon-free explanations of how things work. 
  • Safety: keeping your information secure with industry-leading safeguards. 
  • Control: giving you meaningful choices about how your data is used. 

Grindr is the Global Gayborhood in Your PocketTM, and we’re expanding the app to be more useful and responsive to how people actually connect. Through our success, we aim to make a world where LGBTQ+ lives globally are free, equal, and just.

You can read the full Privacy Policy and manage your AI preferences in Settings.

We updated our privacy policy. Here’s what that means for you.
Company Updates

Come On Over: Aguilera Takes Over Grindr Notifications for Portola Music Festival

1
min. read

We’re giving Xtina the keys, because from one gay icon to another, the famous Grindr bloop deserves nothing less. From September 15-22, we’re changing the Grindr bloop to Christina Aguilera’s beloved track, "Come On Over Baby (All I Want is You)." to give your Grindr DMs a Grammy-winning upgrade.

We know the bloop is sacred. That’s why we’re only letting one of pop’s greatest diva’s mess with it—because there ain’t no other man, woman, or app sound that could do it better.

Xtina, who headlines Portola Festival presented by Goldenvoice in San Francisco on September 20, couldn’t resist the match-up. 

“Portola, Grindr and me? That’s a threesome I can get behind,” she said. “When that ‘Come on Over’ sound hits at the festival, or wherever you’re celebrating, I hope things get spicy!” 

Here at Grindr, we figured anyone who’s been telling men to come on over since 2000—and still knows how to keep things a little Dirrty—deserves control of your notifications.

The sound swap is automatic for US users with notifications on. Silent mode crew, this is your sign to turn the volume up. Just this once.

Making sure you're set:

  1. Tap your profile photo.
  2. Go to Settings.
  3. Select Notifications.
  4. Make sure the Sound toggle is on.

After September 22, the bloop returns. Until then, let Xtina handle your intros—she knows what a gay wants from a first impression.

Watch the teaser here on YouTube Shorts.

Note: To hear the new 'bloop' in your app, make sure you are updated to the latest version of Grindr (Version 25.15.10).

Grindr For Equality

Grindr Celebrates ‘World Sexual Health Day’ with Profile Health Fields and Filters

Great sex starts with honest conversation, and Grindr makes those connections easier than ever.
4
min. read

This World Sexual Health Day (September 4th), we’re spotlighting Grindr profile features—like health-related fields, testing reminders, and search filters—that help you share your sexual health practices openly and connect with partners who do the same. Because when everyone’s on the same page, everyone has more fun. 

Why Sexual Health Transparency Matters

Being upfront about your health practices is sexy. It shows you value yourself and your partners. When you share your HIV status, PrEP use, or testing dates, you're creating space for trust and reducing anxiety around those first conversations. You're also helping fight stigma by normalizing these discussions across our community and making it easier for everyone to prioritize their health.

Sexual Health Tools at Your Fingertips

We believe in reducing stigma and facilitating conversations so users can make informed decisions around their health. Grindr makes it easy to share your sexual health practices directly in your profile. Under Edit Profile → Health, you’ll find fields for:

  • HIV Status 
  • Last Tested Date for HIV (if you want, Grindr can use your last tested date to send you periodic reminders to get retested)
  • Sexual Health Practices:
    • Condoms
    • I’m on DoxyPEP
    • I’m on PrEP
    • I’m HIV undetectable
    • Prefer to discuss
  • Vaccinations for COVID-19, mpox, and meningitis

Note: Every field is optional. You control what you share and can update your information anytime. Your health data stays within your profile—we never share it beyond what you choose to display. Grindr also never shares your health information with any advertisers or third-party services. Additionally, we never use health information for our AI training or AI-powered features. 

Filters Profiles by Health Practices

For the first time, you can now filter profiles by Health Practices. At the same time, completing the Health Practices section on your own profile makes it easier for like-minded people to find you. It’s a simple way to connect with partners who share not only your interests, but also your approach to health and care.

Resources When You Need Them

Need more information? The app's side drawer contains our Sexual Health FAQs and links to our Safety & Privacy Center and other trusted health resources. 

Grindr for Equality, our social impact initiative, partners with organizations worldwide to make sexual health information and services like this more accessible directly through the app.

Take Action Today

This World Sexual Health Day, take five minutes to review and update your health information in your profile. Choose what feels comfortable to share—even small steps toward openness help build a culture where sexual health is simply part of how we connect.

We understand that stigma and access barriers exist differently across communities. Share what feels safe for you, knowing that each person who adds their health information makes these conversations a little easier for everyone else.

Because better communication leads to better connections—and better sex.

Great sex starts with honest conversation, and Grindr makes those connections easier than ever.
Lifestyle

The Impossible Balance of Breaking Up Online

As two fist-bumping exes learned last week, breaking up is hard to do—but doing it in front of millions of strangers is even harder.
5
min. read

In case you missed it: in a now-deleted TikTok, two gay lifestyle influencers announced the dissolution of their 12-year relationship, and the apparent mismatch in their moods sparked days of widespread jokes and speculation about who dumped whom and why.

While we genuinely feel for anyone navigating a public breakup, the spectacle got us thinking: why did a couple with an impressive following—but not exactly Brad and Jennifer levels of fame—feel they owed the internet a joint announcement in the first place? Was there any way this could have gone well?

After a deep dive into dozens of similar videos—most of which are called "we broke up" with varying levels of caps lock—we've noticed a pattern. Break-up reveal videos rarely land the way anyone hopes. 

Why the format feels uncanny

We all know that all lifestyle content, especially when centered around a seemingly perfect relationship, is performative. Not in a bad way, but it’s literally catered to be watched by an audience. 

The best of them feel real enough to suspend your disbelief: a “get ready with me” video can seem like a peek into a couple’s morning; a direct-to-camera address can feel like chatting with a bestie, even if you can’t talk back.

But a joint break-up video just doesn’t map to any real-life scenario. In the offline world, exes share that news with friends and family privately, personally, and typically separately

So right away it’s uncanny: why is this couple explaining they’re no longer together… together? 

That mismatch can create a sense of awkwardness. That’s why we get sing-songy declarations (see: “we are getting divorced!”) or couples inventing new corporate jargon to explain they will now be  “moving through the world unromantically,” 

It feels staged at a moment that really calls for space. Breakups are something we all go through, and usually they’re private, even when messy. Watching them turned into content can feel like peeking at something we shouldn’t. 

The impossible balance

But you can also see the bind for creators, too. What are they supposed to do—ignore the speculation? Address it? Either choice leaves them exposed. That tension is exactly what makes these videos feel impossible to win.

And often, creators explain that the trappings and pressures of internet fame made it harder to be themselves. They made careers out of broadcasting every part of their lives to their followers, so when it ends, the silence feels just as performative as the announcement. 

That’s the impossible balance at the heart of these videos: the more they try to close the loop for their audience, the more it risks pulling them deeper into the spectacle. 

They're messy

These videos carry uneasy, sometimes contradictory notes. But, as the fist-bumpers proved, it’s the bits of seeming reality sprinkled in that cause the real trouble.

Because as manufactured as social media may be, it’s still created by real people in real pain. And while no one knows what they’re truly going through, the internet will inevitably seize on any available hint to piece the story together.

In practice, these videos that are framed as a departure from your regularly scheduled programming become just another genre of content. Heartbreak turns into meme fodder, while offhand lines like “we both grew apart, but I guess he grew apart from me faster than I grew apart from him” stick forever in your brain.

It’s understandable why creators feel they owe something to their supporters. But the best move here is to keep it simple: as much as fans care, they also know it’s all a performance, and that real life is messy. They don’t need mom and dad (or dad and dad or mom and mom) to sit down and spell it out.

In the end, maybe the only thing more awkward than watching two people break up online is realizing the internet has become part of the relationship itself. And like most third wheels, it doesn’t make the split any easier.

As two fist-bumping exes learned last week, breaking up is hard to do—but doing it in front of millions of strangers is even harder.
Engineering

Optimizing Chat Systems with Hazelcast: Efficient Message Routing for Grindr

10
min. read

One of the biggest projects we’ve undertaken, probably since Grindr was founded, is a complete rebuild of our chat system. For an application like Grindr, a robust chat system is essential as it is core to how our users interact with each other. Every day, millions of chats are sent through Grindr, facilitating connections, conversations, and community-building among our users. Ensuring that these interactions happen seamlessly and reliably is our top priority, which is why we’ve invested significant resources into this overhaul, and I am excited to share more about the updates we have made.

Like most chat systems, messages are sent and received using websockets. When the app starts up, a websocket session is opened, authenticated, and kept alive while the app is open. Each time a message is sent, the recipient receives their copy of the message over their websocket connection.

Also like most modern services, our chat platform is deployed into a container based environment. This means we’re running multiple pods for each service. Imagine we have some service that is handling the websockets I just mentioned — call this the “websocket-service.” When the app starts up, and a websocket connection is established, one of the running websocket-service pods is selected to handle that connection.

You can see here that there are three websocket-service pods running. Sam’s phone has an open websocket to pod 1, and Jeff’s phone has an open connection to pod 3. Persisting a sent message is trivial — the pod with the connection can perform any message checks, sanitization and logic required — and then send a response back to the sender

Message Routing

However, one of the challenges becomes how to route messages from the pod that is handling the sent message to the pod that has a connection open for the recipient.

When user Sam sends a message to user Jeff, the sender’s websocket frame is delivered to the pod that user Sam is connected to (pod1). However the recipient’s websocket frame must originate from pod3, since that’s the pod that Jeff’s phone is connected to. Further complicating matters are the fact that users may have multiple devices operating at the same time (i.e Jeff could have connections to pod3 and pod2 and both need to receive the message), and the fact that these pods are ephemeral and should support rolling deployments.

A simplistic approach involves putting all outgoing messages onto a single pub/sub channel (e.g. a Kafka topic) and having all pods subscribe to all events, skipping messages for consumers not connected to their pod. But that approach won’t scale horizontally, limiting your message throughput to the maximum number of messages each single pod can handle. Other alternatives we considered include Akka and a Redis pub/sub channel per pod.

Hazelcast

The solution employed at Grindr is to create a Hazelcast distributed topic per pod as part of the pod’s initialization logic. Each pod consumes only from the single topic created for it, but any pod can publish a message to any topic.

As you can see in the above diagram, we have three topics and three pods. Each pod subscribes to the topic they own, and in this example, pod2 is broadcasting messages to each of the other two topics. The idea is that when a pod receives an incoming message from a websocket, it publishes to each of the topics that have an open connection for the recipient.

The next part of the design is determining a way for the pod handling a message to know which topics to broadcast to. In order to ensure that the system scales as we add more users and more messages we need to only publish to the topics that are handling that recipient. As mentioned earlier, we can’t simply broadcast to every pod’s topic otherwise we’d be back to the simplistic approach that would be limited by the throughput of any single pod.

We solve this by using a Hazelcast distributed map, which is a shared data structure which any client can add a mapping to.

When a user connects to a pod, this map is updated with a mapping between the user’s id (unique per user) and the pod-id (generated on pod startup). So now, when a message is received from Sam that is intended to be sent to user Jeff, we look in the map for any pod-id’s associated with Jeff. With this list of Jeff’s pod-ids, we can publish outbound messages to only the topic for each of those pods.

When a user disconnects (shuts the app down, or the network goes away), the mapping is removed. So this map is a semi-real time association of which users are online.

Wrap up

What makes Hazelcast very useful here is that it provides both parts of the solution in a single service. We could store the distributed map using a redis cluster for instance, by having the user-id be the key, and the value be a Redis set of pod-ids. And instead of a distributed topic per pod, we could have a RabbitMQ queue or an S3 queue per pod. But hazelcast brings it all together in a single solution, with a very easy to use Java API.

This new system is designed to support the massive volume of messages exchanged daily, providing a faster, more reliable, and secure experience for our users.

Sex & Dating

What's Up with Guys Sending Nudes as Their First Message?

5
min. read

The English language gives us thousands of ways to start a conversation, and almost none of them involve revealing your genitals. And yet… a certain subset of guys online seems to have decided the most effective way to say hello is with a nude photo.

These men are committed to putting their best penis forward, despite broad consensus from the rest of the world that nobody likes a surprise dick pic.

So why do they do it? Is it a compulsion they can’t control? Their genuine best strategy for breaking the ice? Or just plain old exhibitionism? I wanted to understand what these cyber-flashers were thinking, so instead of blocking them on sight, I did the only thing I could: I asked.

The digital dark room

 You heard that right. For years now, I've responded to any anonymous nudes I receive with some version of: Why did you send that? 

(Ironically, the question usually gets me blocked. It seems the only thing worse than a surprise dick pic is surprise self-reflection.)

Most recently, I was browsing the grid when a guy sent me zero words and ten identical photos of his ass. When I asked what was behind this decision, he said there was no point in starting a conversation without establishing a baseline attraction. I didn’t disagree in theory, but I asked: why not establish that attraction with a photo of your face? 

He sent back a photo from his business school graduation, and told me he used to always send face pics first. But people kept asking for nudes, and often the conversation would dishearteningly fizzle out as soon as he sent them. Eventually, he decided it was best to start with nudes—give the people what they want!—and then see if there was any conversation left to be had.

You could sense a weariness in the way he explained this. Despite optically ambushing me with almost a dozen unsolicited photos of his body, he didn't see himself as a sexual aggressor. He saw himself as a victim, following the rules of a game someone else invented.

Most answers I’ve received boil down to this kind of pragmatism. “We're all on here to hook up, so we might as well cut to the chase." Guys who explain it this way are often bewildered when I won't immediately send nudes back. As one lovely gentleman put it just before blocking me: "How am I gonna eat at a restaurant if I can't see what's on the menu?"

Others have discovered, for one reason or another, they have a higher success rate with their body than with their face. Several guys suggested that some people who wouldn't give them the time of day based on a LinkedIn-friendly profile pic are suddenly eager to chat after seeing their dick. If they'd waited for permission to send XX pics, they would never have gotten the conversation going in the first place. And then there are the super DL senders—the ones who are only willing to provide pictures of their bodies, and hope that’s enough to entice you.

What I noticed again and again in these conversations is that the senders frequently were under the impression that everyone was opening with nudes—while that hasn’t been my experience on Grindr at all. I’ve had many chats, and many dates, come together without a single shared album. 

The ho-cial contract

It got me thinking about another gay phenomenon I’ve experienced.

Once, on a work Zoom, I was introduced to a clearly gay executive. We gave each other the briefest of nods—an acknowledgement of our shared culture—and then nodded our way through a pointless meeting. Later that day, he followed me on Instagram—fine, normal—and then a green circle appeared, revealing he had added me to his Close Friends. And that he had spent his afternoon baking in the nude.

One hour earlier, we'd exchanged polite hellos with our bosses on the line. Now, the only thing blocking his full penis from view was a blueberry muffin.

I didn't ask him why he did it—after all, we had a (lol) professional relationship to preserve. But I did wonder: in his mind, was my being gay and online enough to act as de facto consent to seeing this kind of content?

Other people who post this kind of stuff to Close Friends have told me about their thinking, and their answers are pretty close to what the ass-first MBA guy told me: they saw themselves as following a norm that others had established. They were doing it because that’s just what gay guys do.

The perception gap

That’s the weird thing about online spaces: we all imagine them differently. In real life, we're used to a venue and a crowd setting the tone. Whether you're at a warehouse party or a library, your behavior will likely match those around you.

Online, it feels like you're in a crowd. You're seeing a ton of faces side-by-side as you scroll, but you're usually only interacting in private conversations, with no window into what anyone else is experiencing. It's easy to assume your experience is universal even when it’s not.

I don’t think most people sending nudes first, especially on an app like Grindr, are trying to be overly aggressive. But for many, Grindr is a digital dark room where your mere presence is implied consent to see whatever anyone wants to share. And some assume that if you're in the gay community at all, you're sexually driven in such a way that nudes won't offend you, be them on Grindr, Instagram, or Pinterest.

That’s what’s great about the internet: we can find our people and make it whatever we want it to be. But that’s also why it’s so important to confirm your recipient is on the same page before exposing yourself to them. Even if you’re a nudes-first kinda guy, make your dick your second message—and a fair warning your first.

Company Updates

Introducing Map View: A New Way to See Who’s on Right Now

Your favorite feed just got a visual upgrade. Right Now comes to life with a live map of who’s down and around.
4
min. read

When we launched Right Now, we wanted to make in-the-moment meetups simpler. You’re horny. You’re bored. You’re fresh out of the gym. You’ve got 40 minutes before dinner. Right Now helps you skip the scroll, post what you’re into, and connect with people who are ready— Right Now.

It worked. You got on board. You made it hot.

But we wanted to go further. Or actually—closer.

Introducing Live View in Right Now

Starting today, you can see who’s posting in Right Now—and where they are. Instead of only browsing the feed, you’ll now have the option to explore a live map of guys nearby who are down right now.

You’ll see Right Now users’ profiles placed on the map in real-time. Once you tap their profiles, you’ll see their Right Now post—what they’re looking for, if they’re hosting or travelling. Tap around. Zoom in. Check who’s a few blocks away or just around the corner. It’s everything you love about Right Now, but now with something a little more visually appealing.

Built for Immediacy. Designed for Control.

Just like the original Right Now feed, the Right Now map is designed for speed. The map updates in real time, showing who’s available and where (note: your location is an approximation), so you can meet faster and with zero confusion.

Don’t want to show up on the map? No problem. You can keep using Right Now the way you always have.

Safety First

You’re in control. You can choose to appear on the map or keep using Right Now without map visibility. If you opt in, your location is shown as an approximate area, not an exact address. You can set how much it’s offset within a range you select for added privacy and safety, and you can change or turn this off at any time.

Where It’s Available

We’re rolling out Map View to select cities first: Chicago, Washington, DC, Anchorage, Berlin, Oslo, Singapore, São Luís (Brazil). If you’re in one of these places and have the latest version of the app (25.13 or higher), open the Right Now feed and tap the map toggle to explore. More cities are coming soon.

Get On. Get Seen. Get Off.

Right Now has always been about making things easier for you, your time, and your body count. It all just got faster with the new map 

So go ahead. Check out Right Now, tap the map, and hook up ASAP.

Your favorite feed just got a visual upgrade. Right Now comes to life with a live map of who’s down and around.
Grindr For Equality

Protecting the Right to Love and Marry Whomever We Choose

3
min. read

At Grindr, we believe that all love deserves dignity and recognition. That includes the right to marry the person you love.

Fighting for marriage equality isn’t something we’ve ever had to workshop. From our earliest days, we’ve stood for connection, freedom, and self-determination for LGBTQ+ people worldwide. Our platform exists to serve our global community whose relationships, families, and futures deserve full legal recognition. This commitment is reflected not just in our product, but in our partnerships, advocacy, values, and mission. 

Through Grindr for Equality, we’ve supported major wins like the legalization of same-sex marriage in Thailand and the advancement of civil union rights in Czechia. That support takes different forms: financial backing, safety tools, and using our platform to amplify the people doing the work on the ground.

This work is part of our broader mission to help create a world where LGBTQ+ lives are free, equal, and just. Building the Global Gayborhood in Your Pocket means more than just helping people connect. It means making sure our community is protected, respected, and empowered. That belief has guided us since day one. It still does.

Marriage equality is a fundamental human right that every LGBTQ+ person deserves and one that Grindr will always fight for worldwide. That commitment remains unchanged. A message from our CEO, George Arison, reiterating our position can be found here

Company Updates

No Place for Hate on Grindr

Our community guidelines ban discriminatory or exclusionary content and we’re committed to applying them consistently across the platform.
3
min. read

There is no place for hate on Grindr. 

Per our Community Guidelines, discriminatory language, hate speech, abusive statements, and exclusionary “no” statements – including those targeting race, ethnicity, religion, nationality, gender identity, or other protected characteristics – don’t belong on Grindr. 

Instead, we encourage people on Grindr to express their desires in a positive way by stating what they are looking for.

More than a year ago, in response to a rise in user escalations, we temporarily introduced an additional layer of moderation at the profile level to more proactively address inflammatory content – in this case, the phrase “No Zionists.” 

We recently removed that technical block, but our policies remain the same: discriminatory or exclusionary content has no place on Grindr, and we apply this policy consistently across all profiles and user chats. 

We rely on our community to help uphold these values. If users see a profile that violates our guidelines, we ask them to flag it in the app. Our moderation team reviews flags and takes appropriate action.

Read more on how Grindr moderates content and profiles here

Our community guidelines ban discriminatory or exclusionary content and we’re committed to applying them consistently across the platform.
Company Updates

Introducing Grindr Presents: All of Our Content, Now Inside the App

All of Grindr's Content. All in one place.
3
min. read

Until now, Grindr’s original content—videos, editorials, music drops, and more—lived off-platform. You’d tap a link in your inbox, get routed to a browser, and maybe come back, maybe not. It worked, but it wasn’t seamless, and it wasn’t built for how people actually use the app.

Grindr Presents fixes that.

What It Is

Grindr Presents is a new in-app content hub for curated gay content from Grindr. From entertainment to editorials to exclusive drops, everything lives inside the app now—no extra tabs, no platform jumping.

The best part? Grindr Presents is the only place to watch uncensored versions of series like Who’s the Asshole. These are the cuts you won’t find on Instagram or YouTube. Longer, sharper, and exactly how they were meant to be seen…and heard.

Why You’ll Love It

  • Culture Without the Click-Away: All your favorite Grindr-produced content now lives inside Grindr.
  • More Reasons to Open the App: Uncensored content, editorial pieces, and more will keep things fresh and give you more reasons to check in daily.
  • Uncensored: Grindr Presents is the only place where you can find fully uncut versions of our content.

How to Get Started

  1. Open the Grindr app.
  2. Tap the side tray.
  3. Enter Grindr Presents and start exploring.

We didn’t build this just to be cute (though it is). Grindr Presents is part of a bigger shift: making Grindr not just where the gays are, but where the culture is. So go ahead. Tap in. Stay a while.

It’s all happening inside Grindr.

All of Grindr's Content. All in one place.
Sex & Dating

Why Does Love Always Seem to Live in Another City?

It’s a devastating moment, isn’t it?
4
min. read

After eons of disappointing dates, you finally, finally meet someone who checks all your boxes. You’re flirting, marveling at your easy chemistry (and his magnificent dimples). And just as you’re wondering where he’s been hiding all this time, you get your answer: in Cleveland. Or Austin. Or Rome. 

Because he’s only visiting.

Ughhh. Of course. Your new boyfriend lives hundreds of miles away. You ask yourself if it’s even worth going on the date you just arranged, before definitely going on the date. 24 to 48 hours later, you two have fallen madly in love… just in time for his sled ride back to Antarctica. 

Other times, you’re the exotic specimen who has to disappoint someone else. 

It doesn’t matter if you’re hosting or traveling. There’s something undeniably magical—and tragic—about an out-of-town romance. It leaves you breathless, and then leaves you questioning why you never meet guys like that who live in your zip code. But would you be better off dating in another city? Is love really waiting just a plane ride away, or is it all an illusion?

Why it might be a mirage

Before one or two wonderful dates with men from New York, LA, or Birmingham convince you to pack your bags and break your lease, consider that your long-distance love story may not be all it appears to be. It’s possible that what is so amazing about vacation romances is that they’re short.

You know the number one cause of death for promising new relationships? Second dates.

How many times have you told your friends you’ve met your husband, only for it to fizzle out a few weeks later? (Side note: any married person who brags about instantly knowing they would end up with their spouse should be forced to disclose how many times they thought that incorrectly about someone else first.) 

When your burgeoning romance is cut short by a flight home, it never has to be tested. It’s a trailer for a relationship that will never hit theaters, and thus will never have to be rated Fresh or Rotten.

For years, there was a guy I thought I’d be dating, if only we lived on the same coast. When I finally did hop coasts, we immediately got together… for one mediocre date. The fantasy man, it turns out, was a lot more charming (and a lot less into pickleball) than the real one. 

There’s also a risk, when you’re the one traveling, of associating all the positive feelings and things you like about a place with the person who lives there. Your Parisian paramour may have shown you the Venus de Milo, but he didn’t sculpt it.

Why it might be real

But that doesn’t mean the connection is all in your head. There might be a legit explanation for this phenomenon—a reason why residents and visitors click at a deeper level than two fellow townies. 

Travel inherently opens you up to new experiences. Exploring somewhere new makes you, or the guy that’s visiting you, unusually open-minded—totally along for the ride. And coming from separate worlds means you get to meet each other free of context, with few pre-conceived notions (or IG mutuals).

Travel makes you fully present, which makes it the perfect time to let someone new into your life.

And as disappointing as it can be to find out you two may not have a future, knowing this is all you get further opens you up to the moment. You put your concerns and calculations about practical compatibility on hold, and risk a little more intimacy, knowing you have nothing to lose. You make the effort to see them as much as possible in their limited time.

There’s a lesson to be taken away here. It’s not about the geography; it’s about the energy. Next time you’re having a beautiful tryst with a foreign stranger, hold onto that feeling of opening yourself up to one wonderful night or weekend… and then try to bring it to your next date with someone from your own town.

Show the same enthusiasm and willingness for a romantic adventure. Focus on being open-minded, present, and excited… even if you know they’ll still be there tomorrow.

Why it might be a good thing?

In the meantime, before you spend too much time mourning what could have been, take a moment to appreciate what is.

Not that long ago, the gay lifestyle involved a lot of secrecy and subterfuge. The changing world and advent of dating apps means we’ve gone from meeting in the shadows to connecting across the globe. 

I say lean into these city-crossed romances. Put yourself on the grid in Rio while you’re still planning your trip in Jersey, and find someone to share your life with… for as long as you’re going to share a time zone. 

You may not get a husband out of these encounters, but you also won’t get another ex crowding up your city, another face to politely greet at the same three bars every weekend for the rest of eternity. 

Instead, you’ll have a would-be lover who will harbor an unrealistically romanticized portrait of you, just as you will for them. You’ll have a familiar, chiseled face to call on whenever you visit their neck of the woods. And—unless you made some sort of Before Sunrise-esque pact not to exchange contact info—you’ll have someone to chat with, flirt with, and exchange *tasteful* photos with online for years to come.

And you never know! If you do keep the connection going past baggage claim, what starts as a layover may one day become your final destination.

It’s a devastating moment, isn’t it?
Engineering

@ViewConfigurable - A better way to build SwiftUI components

7
min. read

TL;DR: SwiftUI makes customizing views feel effortless — until you build your own reusable components. Here’s how we built a macro to fix that. Try it out with SPM: https://github.com/grindrllc/view-configurable

We’ve all been there before.

You create a nice simple View for your team to use. Perhaps something like this:

public struct GrindrButton: some View {  private let title: String  private let onAction: () -> Void  public init(title: String, onAction: @escaping () -> Void) {     self.title = title    self.onAction = onAction  }  public var body: some View { ... }}

Everything is going great and people are adopting this awesome new component 🎉. Then, along come some requests:

  • “Can I change the text color of the button?”
  • “Can I change the button background color?”
  • “Product wants this to have a corner radius of 5, not 8”
  • “Hey font needs to be bold. Thx. Have it ready by tomorrow”
  • … and on and on

Now that nice pretty component is starting to look like this

public struct GrindrButton: some View {  private let title: String  private let backgroundColor: Color  private let textColor: Color  private let font: Font  private let cornerRadius: CGFloat  private let depressAnimation: Animation = .default  private let onAction: () -> Void  public init(title: String,        backgroundColor: Color = .yellow,       textColor: Color = .black,       font: Font = .body,       cornerRadius: CGFloat = 5,       depressAnimation: Animation = .default       // ... more configurations       onAction: @escaping () -> Void) {       self.title = title       self.backgroundColor = backgroundColor       self.textColor = textColor       self.font = font       /// ...etc  }  public var body: some View { ... }}

Everyone who uses `GrindrButton` now needs to:

  1. Make sure all initializer params are in order
  2. Worry about which of these params they actually need
  3. When they click into this file, it’s a mile long!

Native SwiftUI components are super flexible. Why don’t they have this issue?

At Grindr, we are building out our components in SwiftUI and this was a constant pain-point. To solve it, we asked ourselves “Why are Apple’s components so much cleaner and easier to use?” For example, Apple does not make you hand in the font, color, size, etc into the initializer. That would look like this:

var body: some View {  Text("Hello World", foregroundColor: .black, font: .body, style: .italic, ...)}

Instead, they took a different approach. At a high level, SwiftUI components have a separation between what is required (data) and what is optional (customizations). Let’s look at a few examples:

Text:

  • Required: String
  • Customizations: font, color, font-weight, …etc

// A string (ie - "Hello") is requiredText("Hello")   // Everything below is an optional customization  .font(.body)  .fontWeight(.bold)  .foregroundStyle(.green)

TextField:

  • Required: String, Binding<String>
  • Customizations: style, color, …etc

// "Hello" and $text are requiredTextField("Hello", text: $text)  // Everything below is an optional customization  .textFieldStyle(.roundedBorder)  .foregroundStyle(Color.blue)  // ...etc

Why can’t we have this?

Then we asked ourselves, “why can’t we have this?” Turns out, we can! We just have to write a ton of boilerplate code whenever we want to add another customization. Here is what our initial solution looked like:

public struct GrindrButton: View {  private let title: String  private let onAction: () -> Void  // customizations  private var textColor: Color = .blue  private var font: Font = .body  public init(title: String, onAction: @escaping () -> Void) {    self.title = title    self.onAction = onAction  }  var body: some View { // ... }}public extension GrindrButton {  func textColor(_ color: Color) -> Self {    var mutableSelf = self    mutableSelf.textColor = color    return mutableSelf  }  func titleFont(_ font: Font) -> Self {    var mutableSelf = self    mutableSelf.font = font    return mutableSelf  }}

All of a sudden, we had a SwiftUI-like syntax for our custom components! Consumers of our button could write code that looked like this

var body: some View {  GrindrButton(title: "Click Me", onAction: {})    .textColor(.blue)    .titleFont(.callout)}

What’s the catch?

Well whenever we wanted to add a customization, we need to add a private variable and create a new extension function with the weird mutableSelf syntax. We wondered — can this be automated?

Macros to the rescue 🦸

We wrote a macro called @ViewConfigurable to automate this. Here is how it works:

@ViewConfigurable // Step 1 - apply macro to viewpublic struct GrindrButton: some View {  // required  private let title: String  private let onAction: () -> Void  // configurable  private var config = ViewConfiguration() // Step 2 - add this var  public struct ViewConfiguration { // Step 3 - declare your ViewConfiguration struct    var titleColor: Color = .black    var buttonBackgroundColor: Color = .yellow    var titleFont: Font = .body    // ..etc  }  public init(title: String, onAction: @escaping () -> Void) { ... }  public var body: some View {    // Step 4 - Use the "config" var for customizations    Button(action: onAction) {      Text(title)        .font(config.titleFont)        .foregroundStyle(config.titleColor)    }    .background(config.buttonBackgroundColor)  }}

The macro will automatically generate those extension functions based variable names it sees in ViewConfiguration. It follows these simple steps:

  1. Creates an extension of your view type with the proper scope (public, internal, private)
  2. Inspects the ViewConfiguration struct
  3. For each variable in the structure (i.e. var titleColor: Color)
  4. Creates a function in the extension, using the variable name. For example, var titleColor: Color would create func titleColor(_ value: Color) -> Self

So, for the component above, a consumer could use it like this:

GrindrButton("Click Me", onAction: {})  .titleColor(.blue)  .buttonBackgroundColor(.red)  .titleFont(.callout)// or they could just stick with the defaults 👇GrindrButton("Click Me", onAction: {})

How has it worked so far?

It’s a new way of thinking about component building, but it’s been very helpful for us as a team! Having concise views makes it easier to read and reason about. Also, having small initializers makes it far easier to add components to your view — and then you can customize it just like you would any other SwiftUI view.

How can I use this?

We created a public git repo for this project: https://github.com/grindrllc/view-configurable . Paste this link into SPM to start using the @ViewConfigurable macro!

No results found.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.