Skip to main content

Command Palette

Search for a command to run...

I Built a Discord. Nobody Talked.

A real-time community chat from scratch (no third-party SDK, custom everything). People called it purgatory. This is about what that taught me, and why I think the problem was never the product.

Updated
5 min read
I Built a Discord. Nobody Talked.
T
Founder of Tenor + Otherplace Studios tech products + art

There's a specific kind of silence that happens after you ship something you believed in.

Not the silence of a failed product. Pre-launch was beyond what we planned for. We got way more paid subscribers than expected for an early adopter community.

But the silence of a full room where nobody's making eye contact.

That's what Tenor's community page felt like for a while, and I'm still thinking about why.


The Build

We (Tenor founders, Andres and Tiffany "TC") didn't use a third-party chat SDK. No Stream, no Sendbird, no shortcut. We built the whole thing in Next.js and Supabase: real-time websockets, presence tracking, typing indicators, optimistic UI so messages feel instant before the server even responds. Polls embedded directly in the feed. Private channels with invite cards. A custom loading screen with a pixel animation of the Tenor logo, 15 squares staggered in at 60ms intervals.

That last detail, well, nobody asked for it. We just thought it should feel good to arrive somewhere. Much like how components get generated on our canvas, we thought it’d be cool for the community to also feel like a canvas.

The architecture is clean. The real-time layer runs on a single Supabase channel per conversation, carrying new messages, deletions, reactions, and presence all at once. DMs are fully separate, canonical, deduplicated. The component system means messages can be polls, roadmap cards, showcase shares, channel invites. It behaves the way you'd want a community to behave.

We were proud of it. We still are.

And then we opened the doors.


The Room

Here's what I expected: curious people, early adopters, the kind of builders who have opinions about things and aren't afraid to share them in a room that isn't Twitter. A realm for free thinkers, honestly. That's the energy we were building toward.

Here's what happened: people looked around, didn't say much, and described the experience as "purgatory."

Tenor community member, "purgatory" comment

Purgatory. For a space we designed to feel like an arrival.

I sat with that word for a long time.


The Part That Hit the Competitive Nerve

Recently I saw a well-known designer on X/Twitter ask his audience: "which type of community you want for a new app I'm about to launch?"

The replies were unanimous. Discord.

Tenor community member comment, Discord competitor

We had built a Discord-like community. Custom, considered, no third-party overhead. But the response to ours was minimal. His hadn't even shipped yet and the excitement was already there.

I know what that feeling is. It's not jealousy, exactly. It's the particular frustration of watching clout do the work that craft was supposed to do.

And then the second thought (the honest one) was: will those people actually show up when he launches? Will they talk, or will they just agree in the replies and disappear?

I don't know the answer.


What I Think Is Actually Happening

We are all talking parrots of a social order.

I mean that with affection and exhaustion in equal measure. We say we want community. We respond enthusiastically to the idea of community. And then when the room exists and the chairs are out and nobody's performing, we don't know what to do with ourselves.

The engagement follows clout, not curiosity. People don't want a realm for curious thinkers. They want to be seen being curious by someone whose opinion of them matters. The in-crowd dynamic isn't something that happens in communities; it IS the community, at least right now, in this particular moment of internet culture.

Since the problem was never the product, I keep wondering if its that we evolved for a specific kind of belonging: physical, local, reciprocal. We've been trying to replicate that in spaces optimized for scale and visibility. The chat is never going to feel like the village. Maybe we need to stop pretending it can.

Or maybe community just takes longer than a launch window (I do see the hypocrisy in my whining). Purgatory is what the early days of any real thing feel like, and the people who stayed in Discord built their cultures over years, not weeks.


What Building a Discord Taught Me

The technical decisions, I'd make again. Owning the infrastructure means owning the experience, and the experience is where trust gets built or lost. It mattered too much to us as design and engineering founders. The pixel loading animation, the optimistic UI, the unified poll votes across reshared channels, those details matter. Not because users notice them consciously, but because they feel the difference between something that was thought about and something that wasn't.

Poll UI component built and made by Tenor

What I underestimated was the social architecture. The technology can be right and the room can still be quiet. You can build the most considered space and still have people standing at the entrance, waiting to see who else walks in first.

Nobody wants to be the first one talking in an empty room. That's not a product problem. That's a deeply human one.

So now I'm thinking differently about what it means to launch a community. Less "open the doors and see who shows up" and more "be in the room first, consistently, until the room has a reason to exist." The builder has to be the culture before the culture shows up.

That's the thing I'm taking forward. We shipped the space without seeding the feeling.

The room is still there. We're still in it.

Come find us when you're ready.

Or open your own canvas and give us a try.

TC, founder

tenor.design