Theme
Bhagavad Gita app logo

Screenshots

Role Developer
Platform Android · iOS (TestFlight)
Built with Flutter, Dart
Status Live on Play Store · iOS TestFlight

The Problem

Many Bhagavad Gita apps are cluttered with ads, complicated navigation, and poor readability. Users seeking spiritual guidance deserve a distraction-free experience that respects the sacred nature of the text while being accessible on modern devices.

The Approach

Engineered an offline-first mobile app using Flutter with a clean-architecture layered design. All 700 verses ship embedded in a pre-seeded SQLite database — the entire reading experience works without a single network call. FTS5 indexing enables full-text search across all verses and translations in under 50ms. The latest update brings a refined UI, AI-powered conversations with Lord Krishna, ambience mode for a spiritual atmosphere, brief explainers for complex verses, expanded language support, private reflections, and richer chapter summaries.

System Architecture

Offline-first architecture with three distinct layers. The presentation layer handles UI state via Flutter's provider pattern, the domain layer encapsulates all business logic (verse lookups, bookmarking, search indexing), and the data layer manages local persistence and optional API sync.

Presentation
Flutter UI + Provider
Refined UI, ambience mode, multi-language renderer, AI chat interface
Domain
Business Logic
Verse service, search indexer, bookmark manager, reflection manager, AI conversation engine
Data
SQLite + Shared Prefs
700 verses, multi-language translations, bookmarks, reflections, preferences
External
Auth + AI Services
Authentication, Talk with Krishna AI, crash reporting via Supabase

Data Design

All 700 verses ship embedded in the APK via a pre-seeded SQLite database — zero network dependency for core content. Translations are stored as separate columns per language rather than normalized rows, trading storage for read speed since users read far more than they write.

verses
  • id INTEGER PK
  • chapter INTEGER
  • verse_num INTEGER
  • sanskrit TEXT
  • transliteration TEXT
  • lang_en TEXT
  • lang_hi TEXT
  • lang_gu TEXT
bookmarks
  • id INTEGER PK
  • verse_id FK → verses
  • created_at TIMESTAMP
  • note TEXT NULL
reflections
  • id INTEGER PK
  • verse_id FK → verses
  • content TEXT
  • created_at TIMESTAMP
preferences
  • language STRING
  • font_size FLOAT
  • theme STRING
  • reminder_time TIME NULL
  • last_read INTEGER

Technical Decisions & Tradeoffs

Flutter vs Native
Chose: Flutter (single codebase)
Shipping to Android first but architected for iOS expansion. Flutter's widget system enabled custom typography controls for Sanskrit rendering without platform-specific code.
Alternative: Kotlin-only — better Play Store integration, but doubles effort for iOS later.
Embedded DB vs API-first
Chose: Pre-seeded SQLite, API optional
Spiritual reading apps must work offline — temples, retreats, and rural areas often lack connectivity. Embedding all verses in the APK adds ~2 MB but removes the network dependency entirely.
Alternative: Remote API — smaller APK, but fragile UX when offline.
Denormalized Translations
Chose: One row per verse, columns per language
Read-heavy workload (users read verses thousands of times, never write). Avoids JOINs on every verse load. Five language columns add negligible disk overhead for 700 rows.
Alternative: Normalized language table — cleaner schema, but slower reads for the primary use case.
Local vs Push Notifications
Chose: Local scheduled notifications
Daily verse reminders don't need a server. Local scheduling via flutter_local_notifications avoids running a push infrastructure for a simple cron-like feature.
Alternative: FCM push — server-controlled, but overkill for user-set daily reminders.

Performance & Optimization

Designed for low-end Android devices. Lazy-loads chapter content, caches rendered widgets, and defers audio loading until playback is requested. Search uses a pre-built FTS5 index so full-text queries across all 700 verses complete in under 50ms.

<50ms
Full-Text Search
FTS5 index across all verses and translations
~80 MB
Total App Size
Embedded DB + assets + podcasts, optimized with tree shaking
0
Network Calls for Core
100% offline reading, audio streams on demand

What It Does

Full 700 Verses
Talk with Krishna (AI)
Ambience Mode
Multi-Language
Authentication
Brief Explainers
Chapter Summaries
Private Reflections
Dharma Scenarios
Sacred Art
Natural Search
Refined UI
Podcasts
Daily Reflection Sheet

What I Learned

Building an offline-first system with AI features forced me to think differently about data architecture — every byte matters when it ships in the APK, and every AI interaction needs to feel contextual, not generic. The decision to denormalize translations into columns instead of rows cut verse-load time significantly for the 99% read-heavy use case. Adding Talk with Krishna taught me how to design AI conversations that feel meaningful within a spiritual context. This project taught me that the best engineering decisions come from deeply understanding how users actually interact with the product, not from following schema textbooks.

What's Next

iOS Release
Available via TestFlight
The iOS version is now available for testing through Apple TestFlight — download it and experience the app before the full App Store release.
Adaptive Layouts
Tablets & larger screens
Expanding the reading experience to tablets and foldables with adaptive layouts — multi-pane views for chapter navigation alongside verse reading, optimized for the screen real estate that larger devices offer.

Now Available

Live on Google Play Store · iOS TestFlight

Next Project