the app i built so people could say the thing they'd never say out loud.
an anonymous confessions app. two worlds: personal and professional. nobody knows it's you. everybody feels it.

yes, it's real and live. go tap something. ↙
it started on a very normal terrible monday. and ended as somewhere to put the sentence.
everyone at work was in a mood. snappy, tired, quietly done with the day. and nobody was going to say anything. we're all far too professional for that.
so on a break i built a dumb little thing: a page where you type the sentence you're not saying, hit send, and it just… goes. no name. no profile. no "wait, who posted this."
i shared the link with a few people. and something weird happened: they came back and said they felt lighter. one of them said it was the first honest thing they'd done all week.
that was the whole insight. people don't need advice. they need somewhere to put the sentence.
there was exactly one rule. nobody can ever know it's you. every other decision bent around it.
most apps treat anonymity as a toggle in settings. here it's load-bearing. the thing that identifies you (who wrote a post) never leaves the server. the app you hold literally cannot see it. it only ever reads a version of the feed with the author erased.
that one constraint quietly deleted half the features a normal social app would have. which turned out to be the best thing about it.
anonymity isn't a feature here. it's the product. take it out and there's nothing left worth protecting.
the thing you can't tell your family isn't the thing you can't tell your team. so there are two of you.
personal is the warm world: home, love, family, the 2am stuff. professional is the cool world: work, money, the things you'd never say in a standup.
same you. two rooms. the whole app changes temperature when you switch: colour, mood, the kind of confession you see.
↑ go on, flip it.
it's an anonymous message app. it did not need to feel this good. but the whole thing runs on a tiny physics engine, so.
you don't scroll a list here. you move through confessions one card at a time, and every interaction has a little bit of hand-feel built in.
a card you can throw.
each confession is a card you can throw. it tracks your finger 1:1, tilts as you drag, and commits when you pass 92 pixels, or flick it fast enough.
drag me. i tilt. throw me. i go. →i have a hundred people i could text right now and not a single one i could call crying at 2am.
the only public reaction is warmth.
tap "felt this" and hearts spray across the entire screen. no likes counter to win, no leaderboard. just, someone out there felt it too.
tap it. trust me. →the quiet skip.
no downvote exists anywhere in the app. if a confession isn't yours, the card just exhales: drifts down, blurs, and dissolves. the person who wrote it never knows. nobody gets dunked on here.
there is no downvote. on purpose.
writing one is its own little ritual.
pick a mood, decide if replies are on, and hit release. the words literally fly up out of the card and vanish into the feed. ✈️
280 characters. that's the whole diary entry.
an anonymous feelings app is a moderation minefield. this was the hardest design problem, and it wasn't a screen.
if strangers can post anonymously, you have to decide, in code, what a stranger is allowed to feel out loud. and catch the exact moment it stops being a feeling and becomes harm.
so every confession passes a layered guard before it's ever seen. a fast rule pass catches the obvious: slurs, attempts to out someone, self-harm methods. then an ai safety model reads the rest.
the tuning is the whole thing: it lets raw venting through (anger, jealousy, grief, even "i don't want to exist right now") because that's the point of the app. it only blocks genuine harm: threats, hate, targeting a real person, anything illegal.
and crisis language never just gets blocked. it opens a soft door instead: real helplines, a gentle "you deserve someone real on the other end," and the choice to still let the feeling out.
the hardest problem wasn't a layout. it was deciding what a stranger is allowed to say when no one knows it's them.
this is how people talk when they're sure no one's watching. a few, lightly, from the wild side of the feed.
i keep trying to fit into this generation, but my heart keeps looking for a world that doesn't exist anymore.
🤍 felt this 8.2kwtf is spilling? i can say any and everything without coating. straight up. no shame baby.
🤍 felt this 5.4kis it just me or is everyone surviving on cc like we have no real money fr.
🤍 felt this 7.1ki'm the friend everyone vents to. no one's ever asked if i'm okay.
🤍 felt this 6.8kevery one of these would be unsayable with a name attached. that's the product doing its job.
designed in claude design. built in claude code. i mostly just kept good taste and said "no" a lot.
i mocked the entire thing up in claude design first: every screen, in real html and css, as a proper handoff bundle. two-world palette, space grotesk for chrome, lora serif for the confessions, the little speech-bubble mask as the logo.
then claude code turned the handoff into a live product: a next.js progressive web app on the front, supabase on the back. anonymous sign-in, a strict "author never leaves the server" rule enforced in the database, edge functions as the only way to write, and realtime so a "felt this" from a stranger lands on your screen the instant they tap it.
the ai moderation layer runs card-free. the whole thing ships as an installable app. it is, genuinely, an anonymous message app that took a suspicious amount of engineering.
a lot of app for a place to whisper into.
building for anonymity is mostly an exercise in restraint. every feature you don't add is a kind of care.
i kept wanting to add things: profiles, streaks, a little dopamine counter. and almost every time, the right answer was no. the app is good because of what's missing from it.
and the dumb monday lesson still stands. sometimes the whole product is just giving a person a safe place to finish a sentence they've been holding for years.
say the thing you've never said.
see it live →