My name is Paweł and I'm building HEYID, a chat app for meeting people from around the world.
The funny thing is that building the app was probably the easier part.
Now I'm facing a problem that you can't really solve with more code.
The empty room.
If you open a normal website and there are no users, it's not a huge problem.
If you open a chat app and there is nobody to talk to, the product feels broken.
And HEYID has an even bigger version of this problem because it's global.
Imagine opening the app from Poland and wanting to talk to someone from Japan.
If there are no Japanese users online, the translation doesn't matter.
Voice translation doesn't matter.
AI suggestions don't matter.
The whole product depends on another human being being there.
That's the part of building a social product I didn't fully understand when I started.
I spent months thinking about features.
Chat.
Translation.
Voice messages.
Language detection.
AI suggestions.
Profiles.
Search.
Premium.
And then I realized:
The most important feature is people.
😂
Now I'm spending much more time thinking about distribution than I expected.
Where do people who want to meet people from other countries actually hang out?
What makes someone stop scrolling and think:
"Yeah, I'd actually try this."
How do you get the first 10 people into the same place at roughly the same time?
How do you create conversations instead of just downloads?
And how do you do it without turning every social network into a giant advertisement for your app?
I'm still figuring this out.
I've been experimenting with Indie Hackers, social networks, SEO and different communities.
Some things worked better than I expected.
Some things got absolutely nothing.
And some of my "great ideas" produced basically zero response. 😅
But I think this is one of the most interesting parts of building a social product.
You're not only building software.
You're trying to create a small ecosystem where the software becomes useful because other people are there.
That's a completely different problem from writing code.
I'm curious how other founders dealt with their own "empty room" problem.
How did you get your first real users to actually interact with each other?
HEYID is live if anyone wants to see what I'm building:
I'm Paweł, building this from Poland, and I'll be around in the comments.
One shift that matters: stop measuring downloads or signups entirely and track peak concurrent users per language pair per hour. That's the only number that predicts whether the next visitor finds a human. And I'd push the "narrow corridor" advice one step further — language exchange is a wedge with built-in demand; communities like language exchange subreddits are full of people already scheduling conversations on Discord. You don't need to build the room from scratch; you need to become the better venue for a room that already exists. Borrow the density, then expand corridors one at a time.
PS: I just visited your site, and I would strongly recommend addressing these two things:
Don’t show Polish content by default. Make the site multilingual, ideally supporting the top five languages relevant to your audience. You can automatically detect the visitor’s browser language and display the appropriate language by default, while still allowing them to switch languages manually.
Be careful with screenshots containing foreign-language text. If the first screenshot someone sees is filled with unfamiliar characters, it could potentially scare people off or make the site feel less accessible. I’d recommend using a screenshot with localized text, or simply English as the default if you’re targeting an international audience.
Since I own a chat website myself, I think I can give you some useful tips, especially for the startup phase. Some of these ideas might feel a little unconventional, but they can work.
People have very little patience these days. They can make a judgment about a website within five seconds, so your first goal should be to keep them around long enough to give it a chance.
When someone enters the chat, give them something to do keep them enganged and while they wait. For example:
The important thing is that the waiting period should feel intentional rather than broken or empty.
Try to make sure your website has other content people can interact with while waiting for a conversation.
For example, you could have:
The idea is to avoid the feeling of “Nobody is here, so I'm leaving.” Instead, give them a reason to stick around for another minute.
You could also use something like: “Connecting you to another chatter…” Chatroulette did something similar back in the day. It gives the user the feeling that something is actively happening rather than simply showing an empty chat room. If nobody comes online, you could turn that into an opportunity: “Unfortunately, we couldn't connect you with someone right now. Leave your email and we'll notify you when someone matching your interests is available.”
Which brings me to the next idea:
Create a “Notify Me” list
Let people opt in to receive an email notification when someone is available to chat. You could optionally include a short form asking what kind of person or conversation they're interested in. For example, their hobbies, topics they want to discuss, age range, language, or other relevant preferences.
It will take some time to build up enough people, but it's potentially a win-win: you gain a legitimate lead from someone who has already expressed interest. The user gets notified when there is a better chance of finding someone to talk to.
As your database grows, you gain more opportunities to connect people with similar interests. Eventually, you could use those preferences to automatically match people when enough users are online.
Be active on social media
This one may be obvious, but being present on social media is important. You probably don't have time to sit behind every social channel all day, so use a content planner and spread your content throughout the week.
Think about topics such as:
The goal isn't only to promote your website. You also want to create conversations around it. When people see other people engaging with your content, the platform itself becomes more visible.
Create specific events that give people a reason to show up at the same time.
For example:
Promote the event on social media and let people sign up for it. Then send email reminders before it starts.
This gives you the biggest chance that people with the same interest are online at the same time.
You don't need hundreds of people for your first successful event. If you can get a small group of genuinely interested people together and they have a good experience, you've created something valuable: your first proof that the community can actually work.
Once you've had that first success, you can repeat the format, experiment with different topics and gradually build a habit around specific events.
Hope it helps :-)
One angle I haven't seen mentioned much here: change the atomic unit from "room" to "appointment." An empty room feels like a failure; a kept appointment feels like a commitment. Something like "talk to someone from Japan for 10 minutes, Tuesday 8pm your time" — with a calendar slot and a reminder — converts the cold-start problem from "show up and hope" into "show up because someone is expecting you." Language-exchange meetups have run on exactly this forever.
Two practical consequences worth noting: (1) you can overbook early — 3 people in a 10-minute slot still feels alive, whereas 3 people spread across a 24/7 global room feels empty; (2) no-shows become measurable, so you learn which corridors actually have demand instead of staring at an empty room wondering. Your translation feature then becomes the reason the appointment is worth keeping, not the reason to open the app in the first place.
Curious whether you've tested anything time-boxed like this yet, or if the experiments so far were mostly open-ended rooms.
Before changing anything, I'd instrument the empty room as an explicit event. Most analytics on social products only record what happened, so "opened the app, saw nobody, left in 20 seconds" shows up as a short session rather than as the product's central failure. If you emit a match_attempted event with language pair, country and local hour, in a week you'll have a heatmap of when your liquidity is actually non-zero — and "global" stops being one problem and becomes a small number of hour-by-pair cells you can fill deliberately. The other reframe I'd offer: in every cold start one side has a deadline and the other has curiosity. "Meet people from other countries" is curiosity, and curiosity does not survive a single empty room. Language learners have a deadline — a trip, an exam, an interview — and they already schedule practice and pay for it on iTalki and Tandem, so they'll tolerate a scheduled window that a casual browser never would. Serve the deadline side first and the curious side becomes free supply for them. One caution on seeding: resist filling the room with bots or AI partners to hide the emptiness. Your entire premise is that another human is there, and the first time someone works out they were talking to a model you don't just lose that user, you lose the premise. What does your attempted-match data look like today — is there one pair and one hour where you already see more than a handful of simultaneous attempts? That cell, not the world, is probably the whole product for the next three months.
The Poland–Japan example makes downloads look like a misleading target. I’d track how many new visitors send a message, get a reply, and come back for a second conversation. If people send but nobody replies, you need overlap; if they never send, it might be the introduction or matching flow. Those seem like very different fixes.
The synchronous "cold start / empty room" dilemma is one of the toughest problems in real-time software. When we were designing real-time P2P networking protocols, we ran into the exact same dynamic: if a peer isn't there in the exact second you open the socket, the experience drops to zero.
A few patterns that have worked well for early-stage synchronous products:
Time-boxed "happy hours" instead of 24/7 availability:
When you have small initial numbers, spreading 50 users across 24 hours means an empty room 98% of the time. If you tell users: "The global lounge is open every day between 18:00 - 20:00 UTC", you concentrate all concurrent traffic into a 2-hour window where everyone gets paired almost instantly.
Constrain the language pair first:
Going completely global on day one dilutes density. Picking just one high-intent pair (e.g., English learners in Japan paired with native speakers looking to learn Japanese) lets you recruit on specific communities (like r/language_exchange) where supply and demand are already looking for each other.
Asynchronous fallback / bridge:
If no one is available live, instead of showing a dead room, let the user record a 30-second audio prompt or question ("What did you have for lunch today in Tokyo?"). The next person who opens the room hears it, replies, and that can trigger a notification to re-engage the first user synchronously.
Keep pushing through this phase — solving the initial concurrency threshold is hard, but once you hit critical mass in one niche, the network effect takes over!
The Poland→Japan example is the brutal version of the empty room — even with users, time zones keep it empty. What worked for a social side project I was involved in: pick one corridor first (say Poland ↔ one country) and run scheduled open hours so early users actually overlap. Density before geography.
Not to sound harsh, but this is the third post mentioning the problem with distribution, saying the built part was easy. What "founders" stopped doing today is to have their idea validated by potential users prior to building a product. Since it is so easy to build an app nowadays, many developers build one in a weekend. Yet it doesn't mean there is need for such an app.
How did you realize there was need for an app like this given we have all these social media available?
To actually give you some advice; try to go to different communities across platforms like Internations or other travel related platforms, which gather users from all around the world and organize webinars, offline events for them. Join them and ask them if they would use it for connecting with each other or even offer it to Internations as a product they could use across their global platform.
Bot posts probably..
The chicken-and-egg problem is the biggest challenge with a two-sided platform. I went through it when I built Lawnnear for lawn care operators and customers. I’ve since stepped away from it and am focusing on my new SaaS product, undresss.ai.
Arcana04's scheduled-window idea is the right one. Two things I'd add on top of it:
Make each window about one language pair, not the whole world. People learning Japanese already want 20 minutes with a native speaker, and they gather in specific places: language-exchange subreddits, Discord servers, HelloTalk groups. "Polish-Japanese hour, Thursday 12:00 UTC" is something you can post there that reads as an invitation to an event, not an ad for an app. One pair that's full beats forty pairs that are empty.
Let the empty moment still produce a conversation. When nobody is online, let people write a first message that's delivered when a match arrives, and email them when someone answers. Then a visit at 3am isn't wasted; it's a conversation that starts later.
Which pair gets the most attempted matches right now? That's probably the one to fill first.
The empty room problem is brutal for anything synchronous. One thing that's worked for other real-time apps: instead of keeping the room open 24/7, batch demand into scheduled windows ("chat happens at 8pm CET, get notified") so the few users you do have actually overlap instead of spreading thin across timezones. Doesn't solve it long-term, but it can get you enough simultaneous people that the first impression doesn't feel dead.
Same wall here, from the other side. I'm building a security tool, so there's no empty room, but there's an empty dashboard: it only gets interesting once real traffic hits it, and nobody sends real traffic to a tool they haven't tried. The one thing that has started to work for me is doing the first interaction for the person. Instead of "try it", I run it against their own site and send them the result, so the first conversation already has content in it.
For a chat app the equivalent might be seeding the room yourself on a schedule: pick two time windows a day where you and a couple of friends in different countries are guaranteed online, put that on the landing page as "live now", and treat the first ten users as people you personally talk to. Ten people who had one good conversation will each bring one more. Zero people who opened an empty room will bring nobody.
I built a little anonymous venting site, so a social product with no social part is painfully familiar 😅 Can people leave a message for someone to find later, or do both people need to be online together?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
The "empty room" problem is the part of building a social product that no amount of engineering solves, and I think you nailed the real reason: for most products, being early is annoying. For a chat app, being early is fatal. The user doesn't see "we're just getting started." They see "broken."
You said the most important feature is people, and that's the whole game in one sentence.
One thing worth thinking about: you can't solve cold start by getting 10,000 users. You solve it by getting 10 users into the same room at the same time, on purpose. The trick most social products miss is that the first cohort should be designed, not acquired. Pick a specific shared interest, a specific time window, a specific reason to be there — "Japanese and Polish language learners, Tuesday at 8pm UTC" — and let that cohort grow organically. It feels artificial, but it works better than any ad.
Question for you: how are you thinking about the ratio of real users to bots or seeded conversations? Every social product I've looked at faced this — some seeded content, some didn't. Curious which side you land on.
The translation angle is genuinely interesting, by the way. That's the part of HEYID that could be a real wedge, if you can find the room where people actually want it.
Following along from Tunisia. Cold start is the hardest problem in product — respect for attacking it directly.
Dealing with the same cold-start problem on a fanbase-battle site. Two things helped more than any channel:
For a chat, maybe the equivalent is a scheduled "room of the day" with a fixed topic and time, so 5 people overlap instead of 50 spread out. Curious which language pair gets you the most overlap so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
I'd solve this with time instead of geography: give people a reason to show up at the same clock moment, like a nightly scheduled "global hour," so density happens on a schedule instead of hoping enough strangers are online at once. When we launched SocialPost.ai, founders showed up reliably for a scheduled thing, a live cohort, a fixed posting window, far more than for an always-on tool with no reason to open it right now. Manufacture the coincidence instead of waiting for it.
what i have learned is first thing first before any development is getting the right users radar then channel your app towards that position
I’d treat this as a density problem before a distribution problem: pick one narrow corridor and a recurring 30-minute window, then recruit both sides specifically for that session. Measure the percentage of sessions that produce a two-way exchange within 60 seconds, median wait time, and seven-day return rate—not downloads. If the other side is missing, a visible queue or scheduled match is better than pretending the room is live. Once one corridor has repeatable liquidity, copy the playbook to the next corridor instead of opening the whole world at once.
The “empty room” problem is brutal for social products because users judge the product by who is there, not just by how well the app works.
I’d probably focus on creating density in one small community, timezone, or use case first instead of trying to make the whole global network feel active from day one. Once one pocket feels alive, expansion becomes much easier.
The empty-room problem is probably the hardest part of something like this. Getting people to sign up is one thing, but getting enough of the right people there at the same time is a different problem.
I’d probably start much narrower than “global chat” and focus on one type of person or use case first. Then figure out where those people are already looking for ways to meet others internationally. That might give you some interesting distribution opportunities beyond just promoting the app itself.
The “first 10 people in the same place at the same time” framing is spot on. Have you found a small recurring time window or country pair that creates enough density to make the first session feel alive?
Eye opening - better tech does not instawin audiences in the room...
As a lifelong techie comms guy - I hadn't considered this... so now I have to figure out how to sleep again after reading this.
Good work and keep up the effort! We need more of this.
I build directory software, and directories live with this exact problem - a directory with no listings is as dead as a chat with no people. The industry answer is to seed the supply side before anyone arrives: the content exists before the community, so the first visitor never sees an empty room. You can't seed humans, and the "make the room smaller" advice already here is right. What I'd add: you can seed the reason to be there. A chat that's just "come talk" needs a crowd; a chat with a fixed ritual - one hour, one prompt, one host who opens the room every day - needs twenty. The ritual is the listing. If you had to pick one recurring window and one conversation prompt to run every day for a month, what would they be?
For a global chat, I'd start with one narrow recurring window rather than global coverage. Pick one corridor and schedule a 30-minute live room around an existing community ritual, then measure conversations per active minute rather than signups. If that works, expand corridor by corridor.
The "make the room smaller before you make it bigger" advice above is the answer — I'd just add one thing: schedule the room. Pick a weekly one-hour slot, announce it everywhere, and be there yourself every single time. An empty room that fills up predictably beats a 24/7 room that's empty 23 hours a day. People don't join empty spaces; they join events.
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
Interesting approach. What was the hardest part to get right?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
Interesting approach. What was the hardest part to get right?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
shit bot
Interesting. How are you measuring whether it is working?
How did you decide this was worth building in the first place?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
What made you pick this stack over the alternatives?
Good point. Did you test that with users before committing to it?
Good point. Did you test that with users before committing to it?
Appreciate the honesty here, most people only share the wins.
This is useful. How are you finding your first users so far?
Nice work shipping it. What has been the biggest challenge since launch?
Great breakdown. What feedback have you had from early users?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Really relatable. How much time do you put into this each week?
Interesting approach. What was the hardest part to get right?
Make the room smaller before you make it bigger. A global chat with 30 users is empty 23 hours a day, but the same 30 people booked into one hour feel like a crowd.
Concretely: pick one language pair and one time slot (for example Polish and Japanese learners, twice a week at a fixed hour) and announce it as an event, not an app. Language-exchange groups already run scheduled sessions like that, so that's where the first ten are. Once a slot fills reliably, add a second one. Open "anytime" chat only when the scheduled slots are overflowing.
The download count doesn't matter much until two people are reliably there at the same time.
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
Curious how long it took before you saw the first real results?
Interesting. How are you measuring whether it is working?
Interesting approach. What was the hardest part to get right?
Clear and practical, thanks. Did anything surprise you along the way?
Nice work shipping it. What has been the biggest challenge since launch?
Have your experiments revealed a specific user or geographic group that creates conversations reliably, or are you still seeing downloads without enough simultaneous activity?
This is useful. How are you finding your first users so far?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
Really relatable. How much time do you put into this each week?
Really relatable. How much time do you put into this each week?
This is useful. How are you finding your first users so far?
Interesting approach. What was the hardest part to get right?
This is useful. How are you finding your first users so far?
one thing that helped us with the same problem: make it worth opening even when nobody is there. something a person can do solo, so the first visitor doesnt bounce. and then pick one fixed hour a day when you personally show up to talk. 10 people at the same time beats 100 spread over a week
This is great work — what's the biggest thing you'd do differently if you started over?