Inspiration
Every messaging app I use is built to be instant, and most of what I read in them is forgotten a minute later. I wanted the opposite: a place where you write to one person, properly, and then wait for their reply the way people used to wait for the post.
Pen pals used to be how strangers in different countries got to know each other. I wanted to bring that back, keep the slowness that made it special, and drop the parts that made it hard: the postage, the lost letters, the weeks of waiting.
What it does
Letterway is a pen pal app where letters travel at postal speed.
- Find a pen pal. Discover shows people by what they like to write about, the languages they speak and where they live. Every week you get an introduction to someone new.
- Write a letter, not a message. There are no chat bubbles and no typing indicator. A first letter to a stranger is capped at 220 words, about a page, so nobody receives an essay from someone they have never met.
- It travels at postal speed. Delivery time comes from the real distance between you: half an hour at the post office, then about 380 km an hour. The average letter on Letterway travels 5,394 km. You can follow it across a map, and you get a notification when it lands.
- Break the seal to open it. A letter that has arrived waits in your postbox, sealed in wax, until you open it.
- Stamps from where it was posted. Every letter carries the stamp of the country it was sent from, with the distance it travelled printed as the denomination. Each letter you open adds its country's stamp to your album, which is a map of every country's outline.
- Dress your letter. Pick up to two stamps, a paper and a wax seal. There are 126 stamps, all drawn in code: postal classics, the four seasons, festivals, and a stamp from each of the 36 countries Letterway's users write from. Tap any stamp to read what it shows.
- Phone and web. There's an Android app and a full web app, and you sign in on the web by scanning a QR code with your phone.
Letterway Post
Writing letters is free and always will be. Letterway Post, the paid tier, adds dozens more stamps, papers and wax seals, three introductions a week instead of one, and a Post badge on your profile. The person you write to sees everything exactly as you chose it, even if they don't have Post themselves.
It costs $2.99 a month, $29.99 a year or $79 for life, sold through RevenueCat.
How I built it
- App: Expo (SDK 54) and React Native with TypeScript. Every stamp, seal, paper and postmark is an SVG generated from code, so each design looks the same on Android and on the web.
- Web: Next.js, hosted on Vercel.
- Backend: Postgres on Neon, exposed through the Neon Data API (PostgREST) with row-level security. The rules live in the database: who can write to whom, delivery times, keeping a letter's words unreadable until it lands, and which designs a sender may use.
- Sign-in: Clerk, on both the app and the web.
- Payments: RevenueCat, with one
postentitlement, monthly, yearly and lifetime products, and two offerings:default, andfoundersfor a founding members' lifetime price. A RevenueCat webhook writes each purchase into the database. The server checks Post again at the moment a letter is sent, so a free account can never send a Post design, whatever the phone believes. - Email: Resend, for welcome emails, "your letter has arrived" emails and founding member updates.
- Monitoring: Sentry.
- Testing: every database rule has an SQL test. I checked each test by breaking the code on purpose and making sure the test failed.
Challenges I ran into
- Making slow feel good, not broken. A letter that takes six hours has to look like it is on its way, not stuck. That took a map with the letter moving along its route, a real arrival time, and a notification when it lands.
- Safety with strangers. Pen pal apps can turn into inboxes full of unwanted messages, so Letterway caps things in the database:
- 5 new people a day;
- 3 unanswered letters to any one person;
- 220 words for a first letter.
Being blocked looks exactly the same as writing to someone whose inbox is full, so a block can't be detected. Your public location is your city, shifted 5 to 25 km, and distances are never worked out from it.
- Performance on cheap Android phones. I test on a budget realme phone. Drawing hundreds of SVG stamps made the stamp picker slow, and one SVG pattern crashed the app outright. I rebuilt the picker so it:
- stays loaded between openings;
- animates on the UI thread;
- redraws only what changed.
I also replaced the crashing pattern everywhere.
- Letters that cross in the post. Two people can write to each other at the same time, and one person can send several letters in a row. The app first tracked one letter per conversation. I rebuilt it to follow every letter in the air separately.
Accomplishments that I'm proud of
- In six weeks, 88 people from 36 countries have joined and sent 217 letters, 107 of them in the last week.
- The longest letter so far travelled 17,449 km.
- The busiest routes connect people who would probably never have met otherwise: Greece and Nigeria, Bangladesh and India, Pakistan and the United States, Japan and the Philippines.
- A stamp for every country Letterway's users write from, each drawn from something real there: Zuma Rock, K2, the blue doors of Sidi Bou Saïd, Colombia's wax palm.
- Launching Post with a gift: the first 87 members got six months free, with no card and nothing to cancel.
What I learned
- People write more than I expected. The average letter is 92 words, and once someone writes back, the replies get longer than the letter that started the conversation (89 words against 76, on average).
- Waiting is a feature when you design for it. An arrival time, a letter moving on a map and a seal to break turn the wait into anticipation instead of frustration.
- Safety has to be designed in. For an
Built With
- neon
- next.js
- react-native
- revenuecat
Log in or sign up for Devpost to join the conversation.