Listroh

Create Top 10 lists, share your opinions & discover.

Visit Website
May 20, 2026 I shipped a social app with $0 infrastructure cost. Here's everything the story, the stack, the mistakes, and the honest numbers

WHERE THE IDEA CAME FROM

I have a habit. Whenever I'm free I end up on YouTube watching Top 10 videos.

Top 10 movies of all time. Greatest footballer/clubs ever. Best street food in New York, LA etc in the world. Top 10 songs by decade. I've watched hundreds of them.

And every single time, I'd be watching and thinking ,I sometimes disagree with some of that. My #1 is completely different. Why isn't [X] on this list?

At some point I thought wouldn't it be nice to have a place where I could write my own Top 10 and share it? Not a YouTube video that takes weeks to produce. Just the list itself. My opinion, ranked, out there for people to agree with or argue about.

I looked for that app. It didn't exist.

Twitter is too fleeting a thread disappears in 24 hours.

Notes apps are too private nobody sees them.

Letterboxd is great but only covers films.

Reddit gets buried in comments.

Nothing existed specifically for the ranked opinion itself.

So I built Listroh.

WHAT IT IS

Listroh is a social app for creating and sharing Top 10 lists on anything.

Two modes:

Top 10 Lists pick your 10 favorites in order, choose a category, submit for review, publish to the global feed. Other users discover it, save it, favorite it, follow you.

Normal Lists completely private. Watchlists, reading lists, personal ideas. Never shared, never visible to anyone.

The categories cover Entertainment, Music, Sports, Food & Drink, Travel, Technology, Gaming, Books, Fashion, Lifestyle, Cars & Bikes, and Science each with sub-tags.

The idea is simple: if millions of people watch Top 10 videos on YouTube every day and have strong opinions about every single one there should be a place for those opinions to live.

THE STACK (serverless, $0/month at launch)

Flutter + Provider (Android live, iOS coming)

Supabase (auth, Postgres, realtime, storage entire backend)

Hive (local list drafts, offline persistence)

Twilio (phone OTP ~$0.0075 per SMS)

--dart-define for credentials, no .env file

Total infrastructure cost at launch: $0/month

Upgrade trigger: ~2,000-3,000 MAU Supabase Pro ($25/month)

No custom server. No Express. No Django. Just the Flutter client talking directly to Supabase via REST and websockets. RLS policies handle all access control at the database level.

THINGS THAT TOOK LONGER THAN THEY SHOULD HAVE

1. Supabase realtime DELETE events return null for oldRecord unless you set REPLICA IDENTITY FULL on the table.

2. AnimationController.isDisposed is not a public API in Flutter stable. Track disposal with a manual bool _disposed = false flag.

3. Positioned inside LayoutBuilder inside Stack crashes at runtime. Positioned must be a direct Stack child. Use CustomSingleChildLayout instead.

4. Play Store rejected READ_MEDIA_IMAGES permission. image_picker 1.2.1 uses Android Photo Picker automatically — remove the permission from manifest entirely. No code changes needed.

5. Supabase .eq('profiles.username', x) only filters the join, not the rows returned. Resolve username to UUID first, then .eq('owner_id', uuid).

6. Phone-registered users have emailConfirmedAt == null. Had a bug where the submit button was blocked for all phone users because of an email verification check that should only apply to email users.

THE MODERATION DECISION

Every Top 10 list goes through human review before going live. Deliberate choice.

Most UGC feeds degrade fast once you open them up spam, low-effort content, duplicates. We wanted the global feed to feel like it's worth browsing, especially with a small initial user base. Every list that appears there should be worth reading.

Tradeoff: slower time-to-publish. Benefit: quality stays high.

At scale this needs an admin panel. Currently done via Supabase SQL Editor. That's the next thing to fix.

THE NUMBERS (honest)

Launched: recently

Downloads: early stage

MAU: growing

I'm not going to dress up numbers that don't exist yet. The honest stage is: live, real users starting to come in, feedback loop beginning.

WHAT I'M WORKING ON NEXT

iOS version (Flutter codebase ready, needs Apple Developer account)

Push notifications via FCM (highest retention impact)

In-app notification inbox

IF YOU'RE BUILDING A FLUTTER + SUPABASE APP

RLS does the heavy lifting for security design policies carefully before launch

Realtime requires REPLICA IDENTITY FULL for DELETE events

Free tier is genuinely sufficient until you have real traction

New tables after May 30 require explicit GRANT statements before PostgREST can access them add grants as part of every table creation from now on

Happy to go deep on the stack, product decisions, or moderation approach.

The app: https://play.google.com/store/apps/details?id=com.listroh.listroh - Android.

I started this because I was tired of watching someone else's Top 10 and wishing I could publish mine.

If you've ever paused a Top 10 video and thought "that's wrong, here's the real list" Listroh is for you.

What would you change? What's missing? Open to all feedback from the IH community 👇

Comment

About

Best films I've seen. Greatest albums. Places I need to eat before I die. But I never had a good place to share them social media felt too noisy, notes apps felt too private. So I built Listroh, a place for lists.