Product case study · Independent product · live on Google Play
Aarti Sangrah
An offline-first devotional library for Android — aartis, mantras and stotras in Hindi, Marathi and English, with full-text search and no network required to read.
- Role
- Solo: product, design system, mobile, data
- When
- Live
- Links
- Google PlaySource
- CDN collections
- Sync + de-dupe
- SQLite · FTS5
- Offline UI
The problem
Devotional texts are read daily, often where connectivity is poor, and in more than one language. The app has to open instantly, work completely offline, and find a hymn by name, deity, lyric or occasion.
What I did
- Designed and built the app end to end with Expo and React Native
- Designed the "Sacred Editorial" design system with AI tooling (Stitch via MCP)
- Built the SQLite data layer, full-text search and CDN sync service
- Localised the interface in Hindi, Marathi and English
- Published and maintain the Play Store release
Architecture
- All content stored locally in SQLite (WAL mode) — the device is the source of truth for reading
- FTS5 full-text search across names, deities, lyrics and tags
- A CDN sync service merges multiple content collections into SQLite, de-duplicated by id
- Zustand for app state, React Query for sync, expo-router for file-based navigation
- Animations run on the UI thread with Reanimated; long lists use FlashList v2
Key decisions
Local database as the source of truth
Content ships into SQLite and is refreshed from a CDN in the background, so reading never waits on the network.
Search in the database, not in JavaScript
FTS5 indexes name, deity, lyrics and tags, keeping search fast across three languages without loading everything into memory.
Notifications driven by content tags
Four daily slots plus day-specific reminders (Hanuman Chalisa on Tuesday, Santoshi Mata on Friday) come from tags on the content rather than hard-coded schedules.
Outcome
- Published on Google Play
- Fully usable offline
- Three interface languages
Stack
- Expo SDK 54
- React Native
- TypeScript (strict)
- SQLite + FTS5
- Zustand
- React Query
- Reanimated
- FlashList