I got tired of two things about online communities.
The first is that they don't die well. A subreddit or a Discord channel that was alive for a week keeps existing for years, and the emptiness is louder than silence — you open it, see the last post is from 2023, and leave. The second is that everything you say is pinned to a permanent profile. Even on "anonymous" apps, you accumulate a history, and the history becomes a reason not to say the true thing.
So I built Noding: an anonymous forum where any word becomes a room, and rooms decay when people stop talking.
The two rules
A word is a room. You type "late night thoughts" or "career anxiety" or "NBA" — if a room exists, you're in it; if not, it exists now. No creation form, no moderator to petition. The search box is the create button.
Rooms decay. Every room has an activity score. It gets bumped by visits and posts, and it decays with a 24-hour half-life when nothing happens. active → warning → dormant → gone from the plaza. If someone opens a dormant room again, it comes back with its history intact — the room only disappears from view, it doesn't get deleted. So the plaza always shows what's alive right now, and nothing has to be pruned by hand.
The identity part fell out of these two rules. If there are no profiles, what tells people apart? I ended up using the one thing that's already there: the path. The rooms you pass through, and the order you pass through them, draw a small graph. That graph is rendered as a mark next to your posts. Tap someone's mark and you see the rooms you've both been in — and nothing else. Their rooms you haven't visited stay blurred. It's the only social feature in the app, and it's asymmetric on purpose: it reveals overlap, never the other person's full history.
How it's built
Nothing exotic. TypeScript, Express, Socket.IO, MongoDB. React Native (Expo) for the iOS app, and the same codebase exported to web so it works in a browser without installing anything.
A few pieces that turned out to matter more than I expected:
-
The decay scheduler. A cron every 15 minutes recomputes
nodeActivityfor every room and moves rooms across lifecycle stages. The half-life is a constant; tuning it is the single most important product decision in the app, and it's one number. -
Path as data. Every move between rooms is logged as a weighted edge (
from → to, with dwell time). The user's identity mark is literally a rendering of that edge list. It also gives me a "people who walked a similar path" signal for recommendations, without ever asking anyone what they like. - Room similarity. Room titles are embedded and stored in Pinecone, so "late night thoughts" and "3am thoughts" know they're neighbors. This is what makes the search-box-as-create-button not fragment into a thousand near-duplicate rooms.
- Moderation before publish. Three layers on every post before anyone sees it: a pattern list, fuzzy matching against it, then an LLM pass. Anonymous and unmoderated is a bad combination; anonymous and moderated is fine.
- No account before consent. A small thing that bit me: the web app used to open a socket (and create a user) as soon as it booted, before the person had agreed to anything. Every crawler that rendered a shared link created a ghost user. Now nothing exists until someone taps "agree." Consent first, account second.
What happened when real people came
It's been running in Korea for a few months. The rooms people make there are mostly what I hoped for: venting about work, reactions to whatever happened today, "anyone else up at 2am."
Two numbers I keep coming back to. First: people who visit six or more rooms in their first session come back at a completely different rate than people who visit fewer. Depth on day one is almost the whole story. Second: the best users I've gotten so far didn't come from launches — they came from search. Someone typed a worry into Google, landed in a room, made their own room, and wrote the thing they couldn't say elsewhere.
I opened the English side of Noding this week. It's quiet — a handful of rooms, a few dozen posts — but alive.
The question I actually want answered
Does "rooms that die" feel right to you, or unsettling? And does path-as-identity read as privacy, or as nothing to hold onto?
If you want to poke at it, it runs in the browser with no signup: noding.app/en. I'm the only person building it, so I'll read everything.
Top comments (0)