Inspiration Most people post on Instagram or X, and on both of them a post goes into a feed. A feed is ranked, and the ranking decides who sees it. You write something for the people who chose to follow you, and then an algorithm decides how many of them it reaches. Often the answer is: not many.

Japan has an answer to that, and it works. It is called a LINE Official Account: you send one message and it lands in every follower's chat list, the same way a message from a friend does. No feed, no ranking, no wondering whether it landed.

But look at who has one. Companies, shops, schools, celebrities, influencers — people who already have an audience, and the budget for a plan that lets them send at scale.

Reach opens that format to everyone else. A student illustrator with forty followers, someone teaching a small weekend class, a person who just wants to tell twelve friends what they are up to — all of them can stand on the broadcasting side, and what they send arrives.

Around that I built the other things people actually use social apps for: posts that unfold one message at a time, and rooms that open for an hour. I took what Instagram, X, note and LINE each do well, read them my own way, and rebuilt them in a shape that fits a channel you own rather than a feed you compete in.

What it does Reach gives anyone their own broadcast channel, and more than one way to use words in it.

・Broadcasts — one message goes to every follower's talk screen. Text, images, video. ・Spots — a room that stays open for up to an hour. It is a group chat that keeps the shape of a broadcast: the host and the people who came for the host. Everyone is in it at the same time and it ends when it closes, which makes it feel closer to going live than to a thread. Followers are notified the moment it opens. ・Posts — a single post is a sequence of messages, as many as you want to write. An illustration, a piece of writing, a series of photos: it arrives one message at a time and unfolds at the reader's pace instead of landing all at once. Each post carries a title and a cover image, and the feed shows only those — you open a post because of what it is, not because the first line was engineered to stop your thumb. ・Direct messages — followers can reply privately; only you see it. ・Memberships — set a monthly price and publish members-only broadcasts. Powered by RevenueCat. ・Creator tools — tiles (a custom button menu on every follower's screen), step sequences that auto-deliver messages after someone follows, auto-replies, and an earnings dashboard. How we built it Solo, as a university student in Japan.

・Expo / React Native (SDK 54, expo-router) — one codebase for iOS and web ・Supabase — Postgres, auth, realtime, edge functions. Row Level Security is where every access rule lives ・Cloudflare R2 — media storage ・RevenueCat — in-app purchases for memberships and creator support ・Stripe Connect — payouts to creators on the web side ・Sentry, Vercel, Resend, EAS Update Challenges we ran into Almost none of the hard parts were features. They were decisions about how the whole thing is put together.

Working out what this app should be. The hardest question was not technical. What does a social app look like if it is not a feed? I learned what a social app can be from the ones I use, and then had to decide what mine should be. The shape I settled on is words as the main medium, delivered in several different forms.

From there, the rest was working out what you can actually do with a channel you own. A post is a sequence of messages that arrives one at a time and unfolds at the reader's pace, instead of a wall of text you scroll. A spot is a room that opens for up to an hour and then is over, which makes text feel like going live. Tiles put a custom button menu on every follower's screen. Step sequences greet someone the moment they follow. Memberships live inside the same channel rather than on a separate page.

Designing the backend. The part I spent the most time on was not writing queries. It was deciding where each piece of information should live, and how the services holding it stay in agreement. Text in Postgres, media in object storage, subscription state owned by the payment provider, and a copy of enough of it on the device that the app opens instantly. Each of those can be correct on its own and still disagree with the others. Most of the design work was choosing a single source of truth for every fact, and deciding what the app is allowed to believe while it waits to hear from it.

Keeping it safe. Anything on the user's device can be inspected and replayed — the app is a convenience, not a gate. So the access rules live with the data itself, in one place every query passes through, rather than being repeated on each screen. Files obey the same rules as the rows that own them. And anything metered by usage is an attack surface, because a stranger with a script can spend my money.

Making it hold on a real device. Everything works on my machine, on a fast connection, with data I put there myself. A real phone loses signal, gets suspended and resumed, has a different screen, and holds whatever state the user left it in. Closing that gap — and keeping delivery reliable through it — has been most of the work since launch.

The parts that aren't code. Contracts, tax, banking, and a privacy policy that has to match what the database actually enforces. Carrying 1:1 messages makes this a telecommunications business in Japan, where those messages are legally protected, so the promise had to be true in the schema and not only in the document.

Getting the first users. Building the app was the half I was prepared for. Distribution is a separate discipline, and I would rather learn it by running it than postpone it.

Accomplishments that we're proud of I built a social app that connects people through text. Not video, not photos — words, in several different shapes. It is live on the App Store as a complete product: payments, payouts, moderation, push notifications, account deletion, legal documents, an admin console.

But what I am most proud of is how much of it I did not know when I started. Schema design, access control, realtime delivery, payments, release engineering — nearly every part was something I had to go and learn from scratch: books I had never opened, documentation I had never needed, ideas I had only seen named in a lecture. I learned them by building something that would break if I got them wrong, and that turned out to be a completely different kind of understanding from reading about them.

What we learned How services fit together. An app is now the visible part of a system made of other people's services — database, auth, storage, payments, push, error reporting, deployment — and most of the engineering is in the seams between them.

How to hold personal data. Where the rules belong, why they belong there, and how to design so that a mistake in one screen cannot become a leak.

How to design for more people than are using it today. Both in the database, where a query that is fine with ten rows is not fine with a hundred thousand, and in the interface, where a list that looks good with three items has to still make sense with three hundred.

How a product earns. Choosing between in-app purchases, subscriptions, and advertising is a product decision before it is a technical one, and each one changes what you have to build.

Marketing, UI and UX. Three things I assumed were downstream of the code, and all three turned out to shape it.

Legal compliance. Not as paperwork after the fact, but as a constraint that belongs in the design.

What's next for Reach ・Marketing. Paid campaigns are starting now. I want to learn what a real cost per install looks like, and which message actually moves someone to download. ・Standing up to growth. Every part of this was built by one person for zero users. Making it hold at a thousand — the queries, the realtime connections, the moderation load, the support — is the next engineering problem. ・Revenue that does not depend on individual creators. Opening the advertising slots the app already reserves, and bringing in advertisers as a second source alongside memberships. ・Making it faster and steadier. Startup time, how quickly a screen becomes usable, what happens on a bad connection. The premise of the app is that a message just arrives, so the experience has to feel that immediate. ・Android via Google Play, and filing the Japanese telecommunications business notification.

Built With

Share this project:

Updates

Submission history