Book Is Your Friend
In development. Not yet released. Core UI, recommendation engine, and audio playback are built. Affiliate integration and Odia narration are in progress.
/01 The problem
People in India who read in Odia, Hindi, or English don't have a good way to find books that match what they actually need right now. Existing apps sort by genre or popularity — neither helps when you're grieving, restless, or looking for direction. The people who need books most are the ones least likely to know which book to reach for.
/02 The core design decision
Search by feeling, not by category. Why: genre is a publishing taxonomy, not a reader's taxonomy. When someone opens the app, they're not thinking 'I want self-help' — they're thinking 'I feel stuck' or 'I need comfort'. The emotional shelf taxonomy maps feelings to books through a deterministic engine: feeling → reason → intensity → scored match. Same inputs always produce the same result. No black box.
"The emotional shelf taxonomy maps feelings to books through a deterministic engine... Same inputs always produce the same result."
/03 The design system
Dark-first because reading happens at night and in private moments. Type scale uses system-aware tokens. Colour reasoning: warm amber/saffron for the primary accent (evoking lamp-light, old pages), with surface elevation tokens that resolve differently in light and dark themes. Component patterns follow Samsung One UI: interactive elements pulled into the bottom thumb zone, reading content anchored at the top, ≥48dp touch targets. Spacing follows a 4/8/16/24/32/48 scale.
/04 Information architecture
Three screens — Home, Shelf, Profile. Home handles discovery and recommendation (the core loop). Shelf is the personal collection — saved books, listening history, mood journal. Profile holds settings, subscription status, language preference. The division is intentional: Home is outward-facing (find something), Shelf is inward-facing (what's mine), Profile is administrative. No tab for search — search is built into Home's primary interaction.
/05 Hard technical choices
AI narration via TTS (Sarvam for Indic languages, with ElevenLabs as fallback). Script-first audio delivery — scripts are generated per book per language, then JIT-cached as audio. Media3 handles playback with offline caching, synced transcripts that highlight the current line and seek on tap. Multi-language support is not just translation — each language version has its own narration voice, cultural framing, and script structure. What broke: early attempts at real-time TTS streaming had too much latency for comfortable listening. Solution: pre-generate and cache.
/06 What I would do differently
Start with a narrower language set (just Odia) and get the emotional taxonomy right before expanding. The recommendation engine works but the feeling categories were designed top-down — in retrospect, should have been tested with readers first. Would also ship a simpler audio player initially and add synced transcripts in v2.