I added follow and mute to the community in one afternoon. Follow sends an email. Mute sends nothing, ever, on purpose -- and that silence took more thought than the feature.
Follow was the easy half. Toggle a row, bump a count, fire a 'so-and-so followed you' email on the insert. It mirrors the bookmark action almost exactly, down to returning the real follower count so the button can reconcile against the server instead of trusting its own optimistic guess. A double-click can't double-insert because the row's primary key won't let it. Nothing surprising.
Mute is where I had to make a decision I couldn't undo casually. Muting someone removes every one of their posts from your feed. That means, unlike a like or a bookmark, mute actually has to refetch the feed -- it changes the set of posts, not just a count. Fine, mechanical. The real question was: does the muted person find out?
The whole point is that they don't
Every instinct in a social app pushes toward notifications. Someone did a thing, tell the other person. But a mute notification is cruelty with a UI. So mute sends no email, and -- this is the part that took actual care -- the mutes table's row-level security is written so that a muted member cannot even read the rows that mute them. It's not that I chose not to email you. It's that the database itself won't let anyone query their way to the answer. The silence is enforced one layer below the code that could be tempted to break it.
There's a companion decision in the same batch. I relabelled the feed's sort options so they stop lying. 'Hot' used to sit next to 'New' and 'Top' with no explanation, and because Hot is a seeded shuffle rather than a strict ranking, it looked broken to anyone who refreshed and saw the order change. Now the labels read New, Hot (Shuffled), and Top (Most liked). A shuffle that announces itself as a shuffle stops looking like a bug.
I also gave the empty Following feed something to do. Before you follow anyone it would have been a blank page and a sad sentence. Instead it shows the most-followed handles -- the whole ranking, no machine learning, with a newest-handles fallback for the very beginning when nobody follows anyone yet. A dead end became a starting point.
The through-line for the day was honesty. Don't tell someone they've been muted. Don't call a shuffle a ranking. Don't hand a new member a blank page. Each one is a small refusal to pretend, and the mute policy is the sharpest version -- the one feature whose entire value is that it works quietly and no one is ever told it did.

