Native Android application for audio transcription with real-time playback sync and vocabulary management.
The idea to create this application emerged one day when the author of this project (me) was listening to a podcast to practice listening skills and couldn't fully understand the topic. The lack of podcast audio transcription and podcast/transcription-related applications not meeting expectations contributed to the idea of creating software that allows users to transcribe anything by uploading their own audio/video, creating a transcription, and following along with the transcript while listening to the audio with the ability to save unknown words to learn.
Note: The application is still under development and lacks several key features.
View the UI design on Figma.
- Picking audio to transcribe (planned)
- Audio transcription with a speech-to-text API (planned)
- Displaying transcription while playing audio with the ability to save vocabulary (planned)
- CRUD Room database for saved vocabulary (production-ready)
- Internet connectivity tracker (production-ready)
- Bulk-exporting saved vocabulary by generating a CSV file with a backend service (production-ready, see Say It Again Backend repository)
- Saving a CSV file directly to the device (production-ready)
- Sending a CSV file to user's email address (planned)
Minor improvements in the future:
- Splash screen with animated content
- Custom illustrations (the current ones come from undraw.co)
The project was divided into Android modules to improve the overall structure.
- app - Main application module with MainActivity and ApplicationClass
- common - Shared models, interfaces, and utilities used across all modules
- scaffold - Application-level navigation and main UI structure
- feature:home - Home screen functionality and UI
- feature:saved - Saved words management, export functionality, and related screens
- feature:transcribe - Audio transcription functionality (currently in development)
- localData - Local database operations using Room, DAOs, and data sources
- remoteData - Network operations, API endpoints, and remote data handling
- connectivity - Network connectivity monitoring and status management
- ui - Shared UI components, themes, and design system elements
Module-level dependency graph:
Android:
- SAF (Storage Access Framework)
- ContentResolver
- ConnectivityManager
Kotlin:
- Kotlin Flow and Coroutines
- Kotlin Serialization
- Extension Functions
- OOP (data, sealed, interface, abstract)
- Generics
Jetpack Components:
- Jetpack Compose
- Navigation Compose
- Room Database
- ViewModel
- Hilt
Networking:
- Retrofit
- OkHttp
- Gson
- JSON Serialization/Deserialization
Testing:
- JUnit
- MockK
- Turbine (Flow testing)
- MockWebServer
- Multi-module architecture
- Single-activity pattern
- Dependency Injection (DI)
- MVVM (Model-View-ViewModel)
- MVI (Model-View-Intent)
- Event-Driven Architecture (EDA)
- SOLID principles
- Repository pattern

