Inspiration
A camera roll keeps thousands of photographs. Almost none of them are memories. The hike, the kitchen at night, the face you meant to keep they sit in the same pile as everything else, and then they are gone.
I wanted a place for those few. A print: the photograph in front, the words from that moment on the back, the date and the place carried with it. Journals I already knew counted runs. Film apps I already knew sold a look, then a feed. Neither kept the thought that belonged to the photograph.
That is what toru is for. Your camera roll keeps everything. toru keeps what matters.
What it does
Choose a photograph that means something. Watch it develop on a film stock. Write what you want to remember on the back. Hold Keep until it is kept.
Every memory has two sides. The photograph in front. Your words behind it. A date, and a place when one was there.
Over time the journal fills with prints. The paper yellows the way paper does, or stays clean-white if you would rather it stay new. Prints that know where they were taken gather onto a map, so a year of walking around reads as a route. A photograph from this day in another year can come back in the morning.
Nothing leaves the phone. No account, no cloud. No feed, no ads, no tracking. A backup is one file, with a .toru extension, encrypted with a passphrase only you know. Nothing is uploaded.
How we built it
I build toru on my own, in the evenings. No team, no investors, nothing that tracks you.
The app runs on iPhone. The archive never has a server. The photograph, the words, the date, the place and the film stock live on the device that kept them. A photograph is copied in when it is kept, so the print does not depend on the camera roll after that.
A film stock is how a print develops: grain and colour. It is not a tint laid over a photograph. Whites stay white. Skin stays skin. The paper ages on its own clock. The map asks Apple to draw a place. A coordinate may go there so the map can draw. The archive stays on the phone.
A backup writes the whole archive to a single file. The passphrase is the only key. If the phone is lost and there is no file, the archive is gone. There is no account that can bring it back.
Challenges we ran into
The free print is one a day, on toru. A second photograph the same day is toru Pro. That had to stay a shelf, not a streak. Nothing counts the days, and a day with no print is still a day. The empty state, the tagline, and the line under the name do not ask for a photograph. Keep it if it is really a memory.
Paper that ages, and an app that does not look old. Warmth has to come from the paper. If the shell yellows with it, the whole thing reads as a costume. The same limit sits inside the film stocks. Grain belongs in the photograph. A stock that changes skin or blows out a white has failed.
A private archive has nowhere to hide a mistake. There is no server to restore from, and no one else who can open the file. The backup had to be something a person can hold — one file, one passphrase — and the privacy page had to say only that. Claim less, never more. If a sentence is not true of the build, it does not ship.
Accomplishments that we're proud of
The whole product fits in one breath. The photos that matter, kept as prints, with what you were thinking on the back.
The loop is four steps, and they stay in that order. Choose. Develop. Remember. Keep.
Nothing leaves the phone, and that is the architecture, not a slogan. No account. No cloud. No analytics kit in the app. The backup is a file. The map can draw a place without taking the archive with it.
Seven ways to develop, picked by looking. A map that reads as a route. Paper that remembers the months. A journal that puts yesterday at the top, where you left it.
What we learned
A memory is more than a photograph. The words on the back are the product. Without them, toru is another place to put pictures.
Privacy is a shape, not a sentence. No server, no account, no kit that phones home. The hard part is the sentence that follows: if the phone is gone and the file is gone, the archive is gone. Say that, and stop.
The thing to keep out was the streak. People do not need a count of days. One print a day, on toru, is the free beginning. Over time, toru becomes the story.
Voice is a constraint. Short. Second person. An object in the sentence. If a line could belong to any app, it does not belong on this one.
What's next for toru
The listing comes first. After that, the work is the journal itself: improvements, and new features as they earn a place.
Collections are one of them. A shelf for prints that belong together — a trip, a summer, one street — while each print stays in the journal. Audio is another. A few seconds kept with the photograph, the way the words on the back already are, so the day can be heard as well as read.
The archive stays a file on the iPhone that kept it.
Built With
- apple-maps
- asyncstorage
- expo-camera
- expo-file-system
- expo-haptics
- expo-image
- expo-location
- expo-notifications
- expo-router
- expo.io
- gesture-handler
- react
- react-native
- react-native-skia
- react-native-svg
- reanimated
- revenuecat
- typescript
- zustand
Log in or sign up for Devpost to join the conversation.