-
-
This is the article page displaying all ingested Wikipedia articles.
-
The Library page.
-
The home page which displays book/article suggestions and recent reads.
-
The reader showcasing the annotation feature.
-
Search page, reaches into your saved ideas, books and direct Wikipedia access.
-
Profile page.
-
Streak page
-
Saved ideas or annotations from books or articles you've read
-
The in-depth page for composing new sessions.
-
The chat page to discuss ideas or books read.
-
App Icon.
Inspiration
3 months ago, I met a friend on Discord who loved reading a lot, though I didn't know that at the beginning. We got along very well, sharing our passions and interests, and enjoying each other's company. We became so close after discovering how much we had in common that within a few days, it began to seem as if we had known each other for years. During our conversations, she'd take some time off to read and come back with topics to discuss with me. It was fun, engaging, and also educational.
In that moment, I had the thought: what if we could both read the same books in real time together and discuss them over chat, since we both enjoy talking to each other and I also wanted to develop the habit of reading? That's how Depth was born.
What it does
Depth is an app that brings two people together (denmates) to read books in timed sessions and discuss them over chat during breaks. It adds an intimate feeling and an accountability layer to the habit of reading. Depth seeks to reduce the number of books that stall when reading alone, facilitate engaging discussions around your favorite books, and help make learning or reading more memorable for two people.
How we built it
The Design Language
I started off building Depth by first paying an illustrator to design our mascot, Depthopus, an octopus. An octopus, because of how intelligent these deep sea creatures are and how they explore the ocean. I wanted Depth to feel like more than just another reading app, one that gives off the special feeling of intimate friendship or partnership through reading and the exploration of deep knowledge, and the design language is a crucial part of making that happen.
I took my time choosing our fonts, brand colors, and UI design patterns that fit the brand Depth should be. The app went through another redesign after the first iteration to what's currently built on Expo and React Native. I first developed a detailed plan and project bible specifying the philosophy of the application and design patterns to track development and ensure no digressions in any feature or design.
Backend, User Authentication, and Performance
User authentication and the entire backend infrastructure were designed using Supabase. Performance is a top priority given the nature of what Depth is and will be as the user base expands, so I used an offline-first approach to make sure everything loads instantly from cache. I treated the UI as the cache and the network as a correction. As we gain more users, I envision Depth becoming a social platform where the main conversation driver is books or other educational material, including articles.
The Library
The app library is an open system where articles are automatically added through in-app search that reaches Wikipedia, so anyone can contribute to the library by searching. Books, however, are manually curated and ingested from Project Gutenberg. The generic PG book covers had to be replaced with an in-house design style inspired by Apple Classics covers: AI-generated art on solid bright color backgrounds with the title and author names placed at the bottom. This makes for a more manageable and cohesive library for now, until we can later afford a professional redesign.
The Reader
I also designed the in-app reader to split and display book or article content into readable lines, which also supports sentence and paragraph selection and annotations. Standard mobile text selection is notoriously clunky and frustrating, so I had to build our own SelectableParagraph engine. The text is parsed, and every sentence becomes an individually tappable zone. You tap a sentence to highlight it, and tap another to extend the range effortlessly. This makes capturing ideas and annotating feel native to a touchscreen.
Proof-of-Reading
The most important system I built, though, is Proof-of-Reading. Depth will eventually add social features like posts and replies, but without followers or vanity metrics; a post's reach depends on how much the poster actually knows about the book or idea it's about. That only works if reading itself can be verified, so Proof-of-Reading tracks two independent signals: presence (was the user actually engaged during a session) and coverage (did a meaningful amount of text pass on screen). Together they let the app distinguish real reading from skimming or faked sessions.
Challenges we ran into
Building a partner-based social reading app proved challenging in some expected areas and some unexpected ones.
The Chat Composer
One of the least expected was making sure the chat composer rises smoothly along with the keyboard when it gains focus. This was extremely difficult to achieve, despite seeming like a simple feature. The composer kept jumping from the bottom to above the keyboard as it rose, instead of riding smoothly on top of it as React's KeyboardAvoidingView is designed to do.
The problem came from two places: the first was an actual bug, and the second seemed like a bug but wasn't, which made it worse. The first part was writing the full keyboard height to a shared value used by the composer, which caused it to jump to the top instead of changing gradually as the keyboard rose. Here's an example of the problem described and an attempted solution. The second was Expo Go, lol. I should have known earlier that Keyboard Controller doesn't work in Expo Go and that I needed a dev client. The useKeyboardHandler hook is what makes the spacer and thread lift, and in Expo Go that hook doesn't run, so the composer and chat list sit still (or jump) even though the JS is unchanged. I nearly cried over this bug.
Book Ingestion
One of the expected areas of difficulty was accurately splitting PG books, stripping away the table of contents and other unwanted parts before ingestion. Every book had its own formatting, which made things difficult even for frontier AI agents. Still, we managed to successfully ingest some books and will work on refining the rest later.
Proof-of-Reading
Another issue we ran into was the Proof-of-Reading engine. When we first built it to prevent people from "faking" reading sessions, our instinct was to use a ratio test: comparing the amount of time a user spent in the app against the amount of text they scrolled past.
We quickly realized a fatal flaw in this logic: careful reading produces the exact same time-to-text ratio as faking it. A dedicated reader who spends 20 minutes slowly digesting and annotating a complex 500-word passage looks mathematically identical to someone who just leaves the app open for 20 minutes and barely scrolls. If we enforced a strict ratio to catch the fakers, we ended up failing our most thoughtful, slow readers because they weren't covering "enough text per minute."
To fix this, we completely decoupled the math into two factors. Instead of a ratio, we separated the signals into two generous, independent floors that a user must pass: presence and coverage. Because the "coverage" floor is a flat minimum and not a function of time, slow reading is never penalized. Taking 40 minutes to read 600 words passes the test just as easily as taking 5 minutes. Meanwhile, fakers are still caught because our scroll-tracking rate-limits text exposure to a meaningful human reading speed, preventing flicking or skimming quickly.
Accomplishments that we're proud of
First, I'm so pumped about the reading proof algorithm. It works, and we're proud to have nailed it, though there's still room for improvement, and since it's early, there may be some unseen edge cases that aren't currently apparent.
Second is our parametric mascot system for customizing different reactions and looks for the mascot. The designer only gave us the original smiling reaction due to our budget, so handling SVGs by code to create the other reaction variants was difficult, but fun, and we're happy to have nailed that too.
Overall, we've been able to add over 180 books from PG and produce covers for each. Having been able to fully build the app with its fundamental features and test them out is the single thing we're most proud of.
What we learned
Building this app required a lot of research into book distribution services used by Apple and other popular book platforms, and how they work. I've learned a lot about working with React Native and Expo, and deploying apps on both iOS and Android. As a solo founder, I also had the obligation to create promotional content for the app, so I had to learn new frameworks such as Remotion and video creation techniques to make teasers and demo videos. I also learned how to integrate RevenueCat into my apps (this is my first app ever) and how to set up products, offerings, and entitlements, connecting them to Google Play Console and App Store Connect. This has been a truly educational journey in bringing an idea to life.
What's next for Depth
As of when this is being submitted, 18th September, we've released the app on the Google PlayStore and ASC is pending review. The plan is to now channel most of the effort into promotion and user acquisition through organic posting on X and TikTok while running ads on the PlayStore and AppStore. I will also keep an eye on fixing bugs, refining features and reiterating on user feedback.
I'm also looking forward to expanding the scope of the book library to more open classics and popular best-selling private authors. This is one of the most challenging things I foresee coming in the near future for Depth. We're aiming for Depth to house thousands of books and articles across different categories and interests and academic disciplines.
Our goal for the next major milestone for Depth is hitting 1,000 active reading pairs with 20% to 30% book completion rates. That's about 2,000 active users minimum who have at least read our top titles and can engage posts about it, enabling us to roll-out the social feed and replies without digging our own grave. Achieving this milestone will open the doors for other features like book clubs and support for multi-user or group reading and accountability. We just hope things work out as planned.