
What Made You Smile Today
What Made You Smile Today? began with one simple thought: good things deserve a place to be shared too. After reading an inspiring article by a close friend, I wanted to share it more widely—but couldn’t find a space focused only on positive moments. So I built one.
By Ranjith Kumar Kakkarayil · Published · Updated
What Made You Smile Today?
whatmadeyousmile.today is a public feed of small good things. You share one sentence, a photo, or both, about something that made you smile today. Someone's dog. A song on the radio. A stranger holding the door.
That's the whole idea.
Why I built it
Most of the good moments in my day never get shared. They feel too small for a normal social app, where every post quietly turns into a bid for attention. You think about how it will look, who will see it, and whether anyone will react. The moment itself gets lost.
I wanted a place where small is the point. You post for the moment, not for reach.
What I left out on purpose
The design of this app is mostly about what it doesn't have:
- No follower counts. Nobody is building an audience.
- No comments. Nobody has to brace for replies.
- No view counts and no rankings. A post never has to perform.
- No ads and no tracking cookies.
There is only a heart, and it means one thing: "this made me smile too." You can see how many hearts a post has, but not who left them.
How it works
- Anyone can read. The feed is public, and you don't need an account to browse it.
- An account is only for taking part: posting, leaving a heart, or following someone.
- Posts are grouped by day, newest first. Every day has its own page, so you can go back and see what made people smile on any date.
- "Today" means your today. A post counts toward the writer's own local day, wherever they are in the world.
- A smile photo wall shows every shared photo in one grid.
Following, but private
Sometimes you want to keep up with the people whose smiles you like. So you can follow someone, and their posts show up in a Following tab. But following is completely private. The other person is never told, and there are no follower numbers anywhere. It's a reading list, not a scoreboard.
Tagging
You can tag someone in a smile with their @username. If they use the phone app and have turned on tag notifications, they get a gentle "You were tagged in a smile." The app never sends them a tag from someone they've blocked, and the same person can't notify them over and over.
Communities
A smile can also belong to a community: a school, a workplace, a team, an event, a neighborhood, a coffee shop. Each community gets its own smile wall. Anyone signed in can suggest one, and a moderator approves it before it appears. Verified communities get a badge and can embed their wall on their own website, which is a nice way for an office or a school to show what's been making its people smile.
Daily reminder
The iPhone and Android apps can send you one gentle reminder a day, at an hour you choose, to stop and think about what made you smile.
Keeping it kind
An app built around good things still needs moderation. Anyone signed in can report a post. When several people report the same one, it's hidden until a moderator looks at it. Moderators can remove posts, send the author a private note, or close accounts that break the rules. In the phone apps you can also block someone.
Privacy, kept simple
I tried to collect as little as possible and say plainly what's kept:
- Your email, date of birth, and country are never shown. Date of birth and country are only used to check the minimum age, which depends on where you live.
- Photos are shrunk in your browser before upload, which also strips hidden details like location and camera info.
- The only cookies are the ones that keep you signed in.
- Visits are counted only by where they came from, such as a link or another website. There's no cookie, no IP address, and nothing that identifies you.
- Deleting your account removes everything right away: posts, photos, hearts, follows, and reports.
The full details are on the privacy page.
How it's built
I kept the stack small and boring on purpose:
- Web: a plain Node.js server with server-rendered pages and vanilla JavaScript. No frontend framework. Its only dependency is the Supabase client.
- Hosting: Netlify, with the API running as a single serverless function.
- Database and sign-in: Supabase (Postgres and Auth), with row level security turned on.
- Photos: Cloudflare R2.
- Cache and rate limits: Upstash Redis. If Redis is down, everything still works straight from the database.
- iPhone app: native SwiftUI.
- Android app: native Kotlin with Jetpack Compose.
- Push notifications: sent straight to Apple (APNs) and Google (Firebase Cloud Messaging), without any third-party SDK.
A few small touches I'm happy with:
- Every day and every post has its own shareable page, rendered on the server so it loads fast and previews well when shared.
- There's an RSS feed with one item per day, published once that day has ended everywhere in the world.
- There's an
llms.txt, so AI assistants can describe the site accurately.
What I learned
The hardest product decisions were the subtractions. Every social feature you can think of has a reason to exist, and each one pulls the app a little closer to being one more place to perform. Saying no to comments and follower counts made the app smaller, but it also made it feel like what I wanted it to be.
Even following, the one "social" feature I did add, only works because it stays private.
Try it
If something good happened to you today, however small, I hope you'll share it.
— Ranjith



