BACADENGAR · PRIVATE ANDROID APP · 2026

An Android app for local books and audio.

BacaDengar supports EPUB, PDF, TXT, and audio files, with saved progress and reader preferences.

PRIVATE SOURCE Product decisions, architecture, and test evidence are documented here without exposing the repository or book content.

BacaDengar app hero showing its reading and listening interface
ROLE

Product scope, Android implementation, testing, and documentation

STACK

Kotlin, Jetpack Compose, Room, Media3, WorkManager

VERIFICATION

Gradle unit tests and debug APK build

THE PROBLEM

Progress must persist between sessions.

Reading apps and audio players often treat a book as a file instead of an ongoing session. Losing the last position, changing display preferences repeatedly, or jumping between reading and listening creates friction that compounds over time.

BacaDengar was designed around continuity: import local content, remember progress, preserve preferences, and make returning feel immediate.

PRODUCT DECISIONS

Core features

The app prioritizes local content, saved progress, and reader settings instead of accounts or social features.

A

Local-first library

Import EPUB, PDF, TXT, and audio files without requiring an account or remote catalog.

B

Resume positions

Store reading and playback progress so each title opens where the session ended.

C

Reader preferences

Theme and font controls support different environments and long sessions.

D

Practical structure

Basic chapter detection, bookmarks, background work, and media playback support navigation and continuity.

ARCHITECTURE

Android architecture

Compose renders UI state. ViewModels coordinate application logic. Repositories isolate persistence and media operations.

UIJetpack ComposeLibrary · Reader · Player · Settings
↓ state & events
LOGICViewModels + CoroutinesSession state · Navigation · Async work
↓ repositories
LOCAL DATARoomBooks · Positions · Bookmarks
MEDIAMedia3 + WorkManagerPlayback · Background tasks

ENGINEERING

Main implementation challenges

01

Stable progress persistence

Reading and playback positions must update often enough to feel reliable without turning every interaction into unnecessary storage work.

02

Multiple content formats

EPUB, PDF, TXT, and audio expose different structures. The interface needs one coherent library model without pretending the formats are identical.

03

Background-safe behavior

Media and longer operations require lifecycle-aware components so activity state changes do not break the user's session.

VERIFICATION

Tests and debug build

The project is checked using its Gradle test suite and debug build task. This case study uses one safe marketing visual and an abstract architecture diagram; raw reading screenshots and the private repository are not published.

LOCAL VERIFICATION.\gradlew.bat test assembleDebug
  • Unit tests
  • Debug APK build
  • Private source retained
  • No copyrighted book text shown

WEB PROJECT

ClientOps sales dashboard

Open ClientOps ↗